Mit OMP_SCHEDULE mit #pragma omp for parallel schedule(runtime)
Ich versuche zu verstehen, wie die schedule(runtime)
Direktive von OpenMP in C++. Nach einigen Recherchen fand ich OMP_SCHEDULE(1)
und OMP_SCHEDULE(2)
.
Habe ich festgestellt, dass ich brauche, um die Variable OMP_SCHEDULE
zu einem bestimmten Wert.
Allerdings, ich weiß nicht, wie zu tun, und ich habe nicht gefunden, einen C++ - Beispiele, die mir erklären, wie man richtig tun.
Kann jemand mir erklären, wie setzen Sie die variable, und geben Sie eine funktionierende C++ - Beispiel?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es 4 Arten von OMP scheduling. Sie sind statisch, dynamisch, Laufzeit und geführt werden. Jede Planung hat Ihre Vorteile. Die Terminplanung ist vorhanden für einen besseren Lastenausgleich zwischen den threads.
Werde ich Ihnen einige Beispiel für statische und dynamische scheduling. Es ist ähnlich wie bei den geführten als auch.
Schedule(runtime) - Klausel sagt es, um den Zeitplan mithilfe der Umgebungsvariablen. Die environment-variable kann eingestellt werden, um jede andere Planung geben. Es kann eingestellt werden, indem
Statisches Scheduling
Statisches scheduling verwendet wird, wenn Sie wissen, dass jeder thread wird mehr-oder-weniger-tun, die gleiche Menge an Arbeit, die zur compile-Zeit.
Beispielsweise den folgenden code parallelisiert werden kann mit OMP. Lassen Sie uns davon ausgehen, dass wir nur mit 4 threads.
Wenn wir mit den Standard-statisches scheduling und Ort pragma auf die äußere for-Schleife, die dann jeden thread tun wird, 25% der äußeren Schleife (ich) Arbeit und eqaul Menge der inneren Schleife (j) arbeiten Daher mit dem Gesamtbetrag der Arbeit, die jeder thread ist gleich. Daher könnten wir einfach kleben mit der Standard-statisches scheduling zu geben, optimale Lastverteilung.
Dynamische Planung
Dynamische Planung verwendet wird, wenn Sie wissen, dass jeder thread wird nicht dieselbe Menge an Arbeit durch die Verwendung statischer Planung.
In der Erwägung, dass in diesem folgenden code,
Die innere Schleife die variable j ist abhängig von der ich. Wenn Sie den Standard-statisches scheduling, die äußere Schleife (ich) Arbeit sein könnte, die sich gleichmäßig auf die 4 threads, aber die innere Schleife (j) Arbeit wird groß sein für einige threads. Dies bedeutet, dass jeder thread wird nicht gleich der Menge an Arbeit, die mit statischen scheduling. Statisches scheduling führt nicht in der optimalen Lastausgleich zwischen den threads. Daher wechseln wir auf die dynamische Planung (Einplanung erfolgt in der Laufzeit). Auf diese Weise können Sie sicherstellen, dass der code erzielt optimale Lastenausgleich.
Hinweis: Sie können auch angeben, die chunk_size für die Planung. Es kommt auf die loop-Größe.
schedule(runtime)
weist OpenMP für die Planung geben durch die ausführen-sched-var internal control variable. EinstellungOMP_SCHEDULE
ist nur eine der zwei Möglichkeiten zum festlegen ausführen-sched-var. Implementierungen sind erlaubt, um spezielle scheduling-Arten überstatic
,dynamic
, undguided
- und diese kann nur aktiviert werden, mitomp_set_schedule()
.static
ist NICHT der Standard-scheduling. Der Standard wird gesteuert durch die - def-sched-var ICV und sein Wert ist Umsetzung-spezifischen. Es könnte geschehen zu seinstatic
wie bei vielen aktuellen OpenMP-Laufzeiten, aber es gibt keine Garantie, dass es gleich bleiben wird in Zukunft.