Gibt es eine implizite omp Barriere nach omp kritischen AbschnittGibt es eine implizite Barriere nach omp kritischen Abschnitt
Zum Beispiel kann ich diesen folgenden Code-Version-1 in Version-2 ändern.
VERSION-1
int min = 100;
#pragma omp parallel
{
int localmin = min;
#pragma omp for schedule(static)
for(int i = 0; i < 1000; i++)
localmin = std::min(localmin, arr[i]);
#pragma omp critical
{
min = std::min(localmin, min)
}
}
VERSION-2
int min = 100;
#pragma omp parallel
{
int localmin = min;
#pragma omp for schedule(static) nowait
for(int i = 0; i < 1000; i++)
localmin = std::min(localmin, arr[i]);
#pragma omp critical
{
min = std::min(localmin, min)
}
} // will I get the right "min" after this (because I have included nowait)
Will ich das gleiche Ergebnis für beide Version-1 und Version-2 bekommen?
Gibt es eine implizite Barriere nach der kritischen omp-Region?
EDIT: Sorry, wenn das Beispiel sehr schlecht ist .. Auch ich möchte, ob wissen es einen Unterschied in der Leistung zwischen Version-1 und Version-2
Das ist wahrscheinlich nicht das beste Beispiel, da es eine Barriere geben wird, wenn Sie die parallele Region verlassen. Aber gute Frage trotzdem. +1 – Mysticial
Es gibt keinen Leistungsvorteil in v2 gegenüber v1 in dem von Ihnen geposteten Beispiel, aber in der realen Welt könnte es sein. –