1
嗨我正在閱讀本網站http://www.viva64.com/en/a/0054/和點號17,它表示下面的代碼沒有屏障是錯誤的。爲什麼?我在http://bisqwit.iki.fi/story/howto/openmp/#BarrierDirectiveAndTheNowaitClause處讀到,在每個並行塊的末尾有一個隱式屏障,並且在每個段的結尾處,對於單個語句,除非使用nowait指令。OpenMP隱式屏障
struct MyType
{
~MyType();
};
MyType threaded_var;
#pragma omp threadprivate(threaded_var)
int main()
{
#pragma omp parallel
{
...
#pragma omp barrier // code is wrong without barrier.
}
}
有人向我解釋請。謝謝
據我明白[有一個IMPL平行區域末端的icit障礙](https://computing.llnl.gov/tutorials/openMP/#ParallelRegion)。假設這是真的,我認爲點號17在鏈接中是錯誤的。 –
剛剛檢查了OpenMP 4.5規範,它說:「在並行結構的末尾有一個隱式屏障。」 –
該規範規定:「根據靜態變量如何在基本語言中處理,但在程序中未指定的位置處,釋放threadprivate變量的所有副本的存儲空間。」 –