Gibt es eine Multithreading hilfe für Lazarus/FP?
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Gibt es eine Multithreading hilfe für Lazarus/FP?
Ich habe vor mich in naher Zukunft mal mit dem Thema Multithreading zu beschäftigen. Als ich mal für dieses Thema etwas rechachiert habe, bin ich per Zufall drauf gestoßen das es für Haskell eine Hilfe für die Optimierung seines Programms für Parallelisierung gibt, nämlich "ThreadScope", was einem so weit ich das verstanden habe anzeigen kann, wann welcher CPU-Kern ein Thread des Programms bearbeitet so das man die aufgaben Verteilung möglichst gut auf diese aufteilen kann. Also lautet meine Frage jetzt wie folgt ob es so was oder so was ähnliches auch für Lazarus/FP Programme gibt.
Zuletzt geändert von Dragon am Di 10. Jun 2014, 16:44, insgesamt 2-mal geändert.
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
O.k, danke theo ich kannte den Text noch nicht hab ihn mir jetzt aber mal durchgelesen. Da steht ja drin das man die Multithreading Anwendungen noch nicht vollständig Debuggen kann. Heißt das jetzt, das es die Funktionalität die ich suche nicht in Lazarus/FP vorhanden ist, oder nicht vollständig? Oder bin ich jetzt mit meinem Gedankengang auf dem völlig falschem weg?
Zuletzt geändert von Dragon am Di 10. Jun 2014, 16:44, insgesamt 2-mal geändert.
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
Vpu svaqr, qnff gurbf Nagjbeg qrvar Sentr mvrzyvpu tranh ornagjbegrg: "Jb svaqr vpu rvar Uvysr süe Zhygvguernqvat". Qh xöaagrfg nhpu qvr ratyvfpur Frvgr össara haq tnam hagra qvr jrvgresüueraqra Yvaxf nhfcebovrera - bqre unyg tranhre sentra.
(Ich habe meine Antwort ROT13 kodiert, was ähnlich umständlich zu lesen ist, wie deine Frage ohne Beachtung der Groß-/Kleinschreibung und ohne Satzzeichen.)
(Ich habe meine Antwort ROT13 kodiert, was ähnlich umständlich zu lesen ist, wie deine Frage ohne Beachtung der Groß-/Kleinschreibung und ohne Satzzeichen.)
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
Ich sehe jetzt da keinen Zusammenhang.Dragon hat geschrieben:Ok danke theo ich kannte den text noch nicht hab ihn mir jetzt aber mal durchgelesen da steht ja drin das man die multithreading anwendungen noch nich vollständig debuggen kann heißt das jetzt das es die funktionalität die ich suche nicht in Lazarus/FP vorhanden ist oder nicht vollständig oder bin ich jetzt mit meinem gedankengang auf dem föllig falschem weg?
Da steht:
Und:Sobald Sie Threads benutzen, werden diese vom Betriebsystem auf mehrere Prozessoren verteilt.
Ist das für dich ein Widerspruch?Das Debuggen von Multithread-Anwendungen wird von Lazarus zur Zeit noch nicht vollständig unterstützt.
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
tut mir Leid Scotty wenn die frage etwas doof formuliert ist.
O.k., theo ich glaube du verstehst mich da etwas falsch. Es geht mir nicht darum das das System die Threads alleine aufteilt, sondern darum wie man lernen kann ein Problem in so viele und Effiziente Threads aufzuteilen, das das System sie so auf die CPU-Kerne verteilt, das möglichst keiner bzw. wenn nur für kurze Zeit einer inaktiv ist, also die möglichst Effiziente Ausnutzung der zur verfühgung stehenden Ressourcen.
Und dafür suche ich ein Programm/Komponente die mir das Thread verhalten des Programms anzeigt also wo ich heraus lesen kann ob das Programm Effizient arbeitet oder ein Thread auf den anderen warten muss was das Programm ja wiederum abbremsen würde.
O.k., theo ich glaube du verstehst mich da etwas falsch. Es geht mir nicht darum das das System die Threads alleine aufteilt, sondern darum wie man lernen kann ein Problem in so viele und Effiziente Threads aufzuteilen, das das System sie so auf die CPU-Kerne verteilt, das möglichst keiner bzw. wenn nur für kurze Zeit einer inaktiv ist, also die möglichst Effiziente Ausnutzung der zur verfühgung stehenden Ressourcen.
Und dafür suche ich ein Programm/Komponente die mir das Thread verhalten des Programms anzeigt also wo ich heraus lesen kann ob das Programm Effizient arbeitet oder ein Thread auf den anderen warten muss was das Programm ja wiederum abbremsen würde.
-
- Beiträge: 203
- Registriert: Di 22. Sep 2009, 13:08
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
ThreadScope sieht jetzt auf den ersten Blick nach einem Profiler aus.
Für Free Pascal: -> Valgrind
Wenn man den Code unter Delphi compilieren kann, hat man noch die Option mit AQtime Threads zu profilen (geht nur mit der teuren Version).
Oder der Sampling Profiler von Eric Grange hat für Multi-Threading ein Monte-Carlo Samples Gathering - sehr einfach zu benutzen und manchmal ganz nützlich.
Für Free Pascal: -> Valgrind
Wenn man den Code unter Delphi compilieren kann, hat man noch die Option mit AQtime Threads zu profilen (geht nur mit der teuren Version).
Oder der Sampling Profiler von Eric Grange hat für Multi-Threading ein Monte-Carlo Samples Gathering - sehr einfach zu benutzen und manchmal ganz nützlich.
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
@Dragon: Naja, du musst selber wissen, wie weit du gehen willst.
Mein Credo: Halte es einfach und stabil. Kann schon sein, dass man irgendwo "was rausholen" kann, aber meistens verplempert man nur seine (Arbeits-) Zeit mit solchen "Optimierungen".
Mein Credo: Halte es einfach und stabil. Kann schon sein, dass man irgendwo "was rausholen" kann, aber meistens verplempert man nur seine (Arbeits-) Zeit mit solchen "Optimierungen".
-
- Beiträge: 768
- Registriert: Mo 4. Mai 2009, 13:24
- OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
- CPU-Target: x86_64-linux-qt/gtk2
- Kontaktdaten:
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
Die Aufteilung der Kapazitäten ist doch Aufgabe des OS, was willst du denn noch weiter optimieren? Auf der englischsprachigen Wiki-Seite ist der Link zu den MTProcs drin (http://wiki.lazarus.freepascal.org/Parallel_procedures). Vielleicht hilft dir das.
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
Das Gefühl habe ich bei vielen Programmen, aus meiner Sicht ist es enorm wichtig wenn Verarbeitungszeiten grenzwertig oder relevant sind zu optimieren, da warte/vertraue ich nicht auf das Betriebssystem, ok das Betriebssystem verteilt die Prozesse/Threads auf die Prozessoren/Kerne aber damit das möglich ist müssen diese erst einmal existieren, wird ein Programm einfach ohne diese Aufteilungsmöglichkeiten geschrieben funktioniert es halt nicht und Du kannst Kapazitäten bis zum Abwinken haben!Scotty hat geschrieben:Die Aufteilung der Kapazitäten ist doch Aufgabe des OS, was willst du denn noch weiter optimieren? Auf der englischsprachigen Wiki-Seite ist der Link zu den MTProcs drin (http://wiki.lazarus.freepascal.org/Parallel_procedures). Vielleicht hilft dir das.
Hat man eine "richtige" Web-App wie z.B. ISAPI oder Apache Modul gibt es nur ein Programm, aber jeder Request/Thread läuft parallel und kann so auf einem anderen Prozessor laufen. Bei CGI wird für jeden Aufruf das Programm erneut gestartet wodurch auch jede Abfrage parallel auf einen anderen Prozessor laufen kann, startet halt nur etwas langsamer und braucht mehr Ressourcen, aber trotzdem parallel!
Hat man aber ein Programm welches einmal gestartet wird und dann viele Aufgaben zu lösen hat kann es Sinn machen auch dort parallele Prozesse zu nutzen um die Arbeit auf alle Prozessoren/Kerne zu verteilen damit das Ergebnis halt schneller zur Verfügung steht.
Also noch einmal, erst feststellen ob es an der Stelle Sinn macht, erst dann mehr Arbeitszeit investieren für Multithreading, aber nicht von vorne herein ausschließen und auf den Rest vertrauen.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
Die Kunst ist eigentlich immer in einem Programm, Programmteile zu finden bei denen es Sinn macht sie in separate Threads aufzuteilen, also sich nicht gegenseitig ausbremsen, weil der Eine auf den Anderen warten muss, denn häufig basiert die Ausführung eines Programmteils auf dem Ergebnis eines anderen. Da die Threadverwaltung dann auch noch zeit benötigt kann es sonst passieren das aus der ganzen Aktion ein Vorteil entsteht.Dragon hat geschrieben: Es geht mir nicht darum das das System die Threads alleine aufteilt, sondern darum wie man lernen kann ein Problem in so viele und Effiziente Threads aufzuteilen, das das System sie so auf die CPU-Kerne verteilt, das möglichst keiner bzw. wenn nur für kurze Zeit einer inaktiv ist, also die möglichst Effiziente Ausnutzung der zur Verfügung stehenden Ressourcen.
Und dafür suche ich ein Programm/Komponente die mir das Thread verhalten des Programms anzeigt also wo ich heraus lesen kann ob das Programm Effizient arbeitet oder ein Thread auf den anderen warten muss was das Programm ja wiederum abbremsen würde.
In einem Programm was mehrere "unabhängige" Aufgaben durchführt, kann man natürlich diese Aufgaben parallel durchführen woraus eine schnellere Bearbeitungszeit resultiert, vorausgesetzt der Rechner hat genügend freie Ressourcen, also am Anfang steht erst einmal eine Analyse:
- welche Aufgaben sind zu bewältigen
- welche basieren auf dem Ergebnisses einer anderen Aufgabe
- wie rechenintensiv ist die Durchführung jeder Aufgabe
- läuft das Programm nachher auf einem gleichwertigen System wie dem Entwicklungssystem
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
Manche Sprachen (wie Delphi Prism) haben da spezielle Konstrukte für ("parallel loop" ...).Dragon hat geschrieben:...ein Problem in so viele und Effiziente Threads aufzuteilen, das das System sie so auf die CPU-Kerne verteilt, das ... die möglichst Effiziente Ausnutzung ...
Es gibt auch Libaries zur Unterstützung zu.B. "OpenMP" -> http://wiki.lazarus.freepascal.org/OpenMP_support .
Ob das was bringt hängt natürlich sehr stark vom Problem und von der Hardware ab.
Ideal z.B. Matrix-Multiplikation und ein System mit vielen CPUs.
Schlecht: Probleme, bei denen ein Rechenschritt das Ergebnis eines vorigen benötigt.
-Michael
-
- Beiträge: 162
- Registriert: Mi 31. Jul 2013, 15:07
- OS, Lazarus, FPC: Ubuntu 16.04, CodeTyphon 5.80
Re: Gibt es eine Multithreading hilfe für Lazarus/FP?
tut mir leid das ich mich erst jetzt wieder melde also
Über die Aufteilung der Arbeitsschritte habe ich mir schon ein paar Gedanken gemacht.
Ich werde morgen oder übermorgen mal ein Bild hochladen mit einer Mindmap wie ich mir das gedacht habe wie die Aufgabenverteilung aussehen könnte.
Danke werd ich mir mal anguckenPatito hat geschrieben: Für Free Pascal: -> Valgrind
Danke werde ich mir mal durchlesenScotty hat geschrieben: Auf der englischsprachigen Wiki-Seite ist der Link zu den MTProcs drin (http://wiki.lazarus.freepascal.org/Parallel_procedures). Vielleicht hilft dir das.
Also als erstes Übungsprojekt hatte ich mir gedacht das ich versuche mal einen Sudoku Generator zu schreibengocher hat geschrieben: In einem Programm was mehrere "unabhängige" Aufgaben durchführt, kann man natürlich diese Aufgaben parallel durchführen woraus eine schnellere Bearbeitungszeit resultiert, vorausgesetzt der Rechner hat genügend freie Ressourcen, also am Anfang steht erst einmal eine Analyse:
welche Aufgaben sind zu bewältigen
welche basieren auf dem Ergebnisses einer anderen Aufgabe
wie rechenintensiv ist die Durchführung jeder Aufgabe
läuft das Programm nachher auf einem gleichwertigen System wie dem Entwicklungssystem
Diese Aufgaben kann Dir keine Komponente abnehmen, hast Du das bereits erledigt?
Über die Aufteilung der Arbeitsschritte habe ich mir schon ein paar Gedanken gemacht.
Ich werde morgen oder übermorgen mal ein Bild hochladen mit einer Mindmap wie ich mir das gedacht habe wie die Aufgabenverteilung aussehen könnte.