Hallo Ich lese diese Website http://www.viva64.com/en/a/0054/ und für Punkt Nummer 17, heißt es, dass der Code unten ohne die Barriere falsch ist. Warum ? Ich lese um http://bisqwit.iki.fi/story/howto/openmp/#BarrierDirectiveAndTheNowaitClause gibt es eine implizite Barriere am Ende jedes Parallelblocks und am Ende jedes Abschnitts, für und einzelne Anweisung, es sei denn, die Nowait-Direktive wird verwendet.OpenMP implizite Barriere
struct MyType
{
~MyType();
};
MyType threaded_var;
#pragma omp threadprivate(threaded_var)
int main()
{
#pragma omp parallel
{
...
#pragma omp barrier // code is wrong without barrier.
}
}
Jemand erklären mir bitte. Danke
Soweit verstehe ich [es ist eine Umsetz icit-Barriere am Ende einer parallelen Region] (https://computing.llnl.gov/tutorials/openMP/#ParallelRegion). Angenommen, das ist richtig, denke ich, Punkt Nummer 17 ist falsch in der Verbindung. –
Überprüfen Sie nur die OpenMP 4.5-Spezifikation und es heißt "Es gibt eine implizite Barriere am Ende des parallelen Konstrukts." –
Die Spezifikation besagt "Die Speicherung aller Kopien einer threadprivate-Variablen wird freigegeben, je nachdem, wie statische Variablen in der Basissprache behandelt werden, aber an einem nicht angegebenen Punkt im Programm." –