FPC und Parallelität

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

FPC und Parallelität

Beitrag von corpsman »

Guten Morgen,

Ich höre gerade eine Vorlesung zum thema Konzepte der Programmiersprachen und da nehmen wir Parallelität durch.

Was das ist , ist mir klar. Und das FPC dies zu gewissen Punkten zu läst habe ich mit CopyCommander auch schon feststellen dürfen.

Nun erzählt uns unser Prof hier aber was von "Parallelität im kleinen" sprich. Es gibt die Möglichkeit, das ein Programmierer einzelne Anweisungen Parallel ausführen läst. z.b.

Code: Alles auswählen

S1;S2;S3 // Sequentiell S1-3 hintereinander ausführen
 
S1,S2,S3 // Der Programmierer weis um Parallele Probleme, hat sie abgewogen und der Compiler darf nun S1-3 Parallel ausführen.
das Selbe kann man anscheinend auch mit Umschliesenden Blöcken machen so nach dem Motto

Code: Alles auswählen

..
cobegin // Begin für Parallel
S1;S2;S3
coend;
..
Die Frage ist, gibts so etwas in FOC auch ?, cool wärs ja schon.

Ich kenne bisher nur die TThread Komponente, diese ist natürlich auch nicht schlecht, aber kann so etwas wie oben natürlich nicht im ansatz lösen..

Oder ist der Optimierer von FPC etwa so clever, das er die entsprechenden Parallelitäten selbst findet, und diese dann entsprechend einfügen kann ?

im Reference Manual konnte ich zu diesem Thema leider nichts finden, deswegen seid nun ihr gefragt ;).
--
Just try it

MacWomble
Lazarusforum e. V.
Beiträge: 999
Registriert: Do 17. Apr 2008, 01:59
OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
CPU-Target: Intel i7-10750 64Bit
Wohnort: Freiburg

Re: FPC und Parallelität

Beitrag von MacWomble »

Keine Ahnung, ob das wirklich hilft, aber hast du das hier gesehen?

http://wiki.freepascal.org/Parallel_procedures" onclick="window.open(this.href);return false;
Diese Seite beschreibt, wie man eine einzelne Prozedur parallel laufen lässt unter Benutzung der MTProcs Unit, welche das parallel laufen lassen und die Implementierung von parallelen Algorithmen vereinfacht.
Es gibt im Text der Seite auch noch einige Verweise zu verwandten Themen.

Gruß Klaus
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: FPC und Parallelität

Beitrag von corpsman »

ui, sieht auch interessant aus. werde ich bei gelegenheit mal ausprobieren.

Weis jemand ob FPC Semaphoren unterstüzt ?
--
Just try it

mschnell
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: FPC und Parallelität

Beitrag von mschnell »

"Von Hand" kann man Parallelität einfach mit TThread programmieren.

Natürlich gibt es auch Semaphoren (z.B. TEvent, TCriticalSection).

-Michael

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: FPC und Parallelität

Beitrag von corpsman »

ich kenne Semapphoren eben mit P und V Operationen.

eine Critical section ist da ja nicht unbedingt das selbe..
--
Just try it

mschnell
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: FPC und Parallelität

Beitrag von mschnell »

corpsman hat geschrieben:ich kenne Semapphoren eben mit P und V Operationen.
Das sagt mir nix. Ich kenne "binäre" und "counting" Semaphoren. TCriticalSection benutzt eine Binäre Semaphore. TEvent vermutlich auch. Binäre Semaphoren haben die Grund-Operationen "lock" und "unlock", Counting Semaphoren "inc" und "dec".

Du kannst aber jeden beliebigen Systemcall mit FPC machen, in Linux kannst Du also System-V Semaphoren benutzen, wenn Du das willst. Die sind "Counting".

In Linux benutzt FPC (vermutlich) pthreadlib für TThread. Dann wäre es naheliegend pthread_sema... für die binären Semaphoren zu verwenden. Das wiederum benutzt FUTEX (Fast Userspace Mutex), und ist sehr viel schneller als ein System-Call, weil für den "Fast-Pass" im User-Space ein Locking mit atomischen Prozessor-Instruktionen gemacht wird.

-Michael
Zuletzt geändert von mschnell am Do 15. Okt 2009, 09:27, insgesamt 1-mal geändert.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: FPC und Parallelität

Beitrag von corpsman »

Ahh, nun haben wir uns verstanden, vielen Dank für die hinweise, nun kann ich mich erst mal ausgiebig mit dem Thema beschäftigen.
--
Just try it

mschnell
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: FPC und Parallelität

Beitrag von mschnell »

corpsman hat geschrieben:nun kann ich mich erst mal ausgiebig mit dem Thema beschäftigen.
Dann lass uns wissen, was Du herausfindest....

-Michael

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: FPC und Parallelität

Beitrag von theo »

Ich habe mich selber nicht so sehr mit Semaphoren beschäftigt, aber Google ist doch immer noch unser Freund:

http://www.friends-of-fpc.org/library/L ... g/0950719/" onclick="window.open(this.href);return false;
http://www.koders.com/delphi/fid3F54458 ... px?s=proxy" onclick="window.open(this.href);return false;

etc. pp

mschnell
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: FPC und Parallelität

Beitrag von mschnell »

TThread sollte automatisch Posix Threads (pthreadlib) verwenden. Ich würde das also nicht v on Hand machen.

Ich vermute, dass TCriticalSection pthread_mutex verwendet. Damit also FUTEX (auf Architekturen, die FUTEX tatsächlöich anbieten (wie X86 und ARM).

Man sollte vorsichtig sein TCriticalSection als Semaphore zu missbrauchen (wie im Beispielcode). Je nach implementierung kann das funktionieren oder auch nicht. Bei Ctritical Section (und möglicherweise bei FUTEX) wird vorausgesetzt, dass der Thread der "lock" macht, später auch "unlock" macht. Eine Semaphore kann aber auch so eingesetzt werden, dass ein Thread sie belegt und ein anderer sie freigibt.

-Michael

Antworten