[c++] Was ist der Unterschied zwischen "statischem" und "dynamischem" Zeitplan in OpenMP?



Answers

Ich denke, das Missverständnis kommt von der Tatsache, dass Sie den Punkt über OpenMP vermissen. In einem Satz ermöglicht Ihnen OpenMP, das Programm schneller auszuführen, indem Sie die Parallelität aktivieren. In einem Programm kann die Parallelität auf viele Arten und Weise aktiviert werden, indem man Threads verwendet. Angenommen, Sie haben und Array:

[1,2,3,4,5,6,7,8,9,10]

und Sie möchten alle Elemente in diesem Array um 1 erhöhen.

Wenn du es benutzen willst

#pragma omp for schedule(static, 5)

es bedeutet, dass jedem der Threads 5 zusammenhängende Iterationen zugewiesen werden. In diesem Fall nimmt der erste Thread 5 Nummern. Der zweite Vorgang dauert weitere 5 usw., bis keine weiteren Daten verarbeitet werden oder die maximale Anzahl der Threads erreicht ist (normalerweise gleich der Anzahl der Kerne). Die Freigabe der Arbeitslast erfolgt während der Kompilierung.

Im Falle von

#pragma omp for schedule(dynamic, 5)

Die Arbeit wird unter Threads geteilt, aber diese Prozedur wird zur Laufzeit ausgeführt. Also mehr Overhead. Der zweite Parameter gibt die Größe des Chunks der Daten an.

Da ich OpenMP nicht sehr gut kenne, gehe ich davon aus, dass der dynamische Typ besser geeignet ist, wenn kompilierter Code auf dem System ausgeführt wird, das eine andere Konfiguration hat als der, auf der der Code kompiliert wurde.

Ich würde die folgende Seite empfehlen, wo Techniken zur Parallelisierung des Codes, Vorbedingungen und Einschränkungen diskutiert werden

https://computing.llnl.gov/tutorials/parallel_comp/

Zusätzliche Links :
http://en.wikipedia.org/wiki/OpenMP
Unterschied zwischen statischem und dynamischem Zeitplan in openMP in C
http://openmp.blogspot.se/

Question

Ich begann mit OpenMP mit C ++ zu arbeiten.

Ich habe zwei Fragen:

  1. Was ist #pragma omp for schedule ?
  2. Was ist der Unterschied zwischen dynamic und static ?

Bitte erläutern Sie mit Beispielen.




Related