Wenn ich eine Reihe von OpenMP-Aufgaben erstelle und nicht verwende, wo wartet das Programm auf den Abschluss dieser Aufgaben? Betrachten Sie das folgende Beispiel:Warten auf OpenMP-Aufgabenabschluss bei impliziten Barrieren?
#pragma omp parallel
{
#pragma omp single
{
for (int i = 0; i < 1000; i++) {
#pragma omp task
... // e.g., call some independent function
}
// no taskwait here
}
// all the tasks completed now?
}
Wartet das Programm für die Erledigung der Aufgabe an der impliziten Barriere am Ende des single
Block? Ich nehme an, aber kann keine Informationen zu diesem Problem in der OpenMP-Spezifikation finden.
EDIT
Von barrier
Beschreibung in OpenMP Spec .:
Alle Fäden des Teams muß die Bindung parallel Region Ausführung den Barrierebereich ausführen und vollständige Ausführung aller expliziten Aufgaben gebunden zu diesem parallelen Bereich vor jeder weiter Ausführung über die Barriere hinaus.
Dies sagt jedoch nicht, ob ich für die Aufgabenvervollständigung verantwortlich bin oder die OpenMP-Laufzeit für mich.
Danke. Ich habe nicht erwartet, dass dies im Glossarbereich der Spezifikation definiert wird. –