OpenMP
thread
OpenMp = Open Multi-Processing
thread = kleinste Folge von programmierten Abläufen, die ein Betriebssystem selbständig verwalten kann. Ein Prozess hat mindestens einen Thread. Threads können gleichzeitig und parallel ausgeführt werden, wenn es mehr als einen CPU-Kern gibt.
parallel execution
Auto-parallelism:
- Compiler/Libraries parallelise operations in the background
Explicit parallelism:
- If parallelism is no manually specified, it doesn’t happen
Fakten zu OpenMP
Ein Prozess beim Start der Applikation
Erzeugung und Zerstörung paralleler Threads
Threads können auf gemeinsame oder private Daten zugreifen
Offener Standard & vielseitig (viele Plattformen und Compiler)
Unterstützt C, C++ & Fortran
Einfach und begrenzter Satz an Direktiven
Erlaubt Grobkörnige oder feinkörnige (partielle) Parallelisierung ohne
Änderung des sequentiellen Codes
OpenMP: Clause schedule
Der Typ bei der Klausel schedule kann sein:
static: Iterationen werden in Stücke der Größe chunk unterteilt. Die Stücke werden statisch den threads in einem team zugewiesen
dynamic: Iterationen werden in Stücke der Größe chunk unterteilt. Sobald ein thread einen Brocken des Iterationsraums abgearbeitet hat, erhält er dynamisch den nächsten Brocken
guided: Jeder thread bekommt ein Stück der Größe chunk. Ist ein thread fertig, bekommt er ein neues Stück, dessen Größe abfällt runtime: Schedule durch Umgebungsvariable “OMP_SCHEDULE” bestimmt
OpenMP: Synchronization constructs
Problem: two different processors are both trying to increment a varible x at the same time
Incrementing of x must be synchronized between the two threads
Synchronization constructs control how the execution relation betw. the threads
Shared memory Programmierfehler
Race conditions:
Data-race: Mindestens 2 threads greifen auf die gleiche shared variable zu und zumindest 1 thread modifiziert die Variable und die Zugriffe finden “gleichzeitig” und nicht synchronisiert statt (oftmals bei nicht beabsichtigtem Gebrauch von shared data)
Deadlock
Threads warten auf eine locked Ressource, die niemals den Zustand unlocked erreicht (vermeide das Schachteln von verschiedenen locks)
Zuletzt geändertvor einem Jahr