我需要做這樣的事情OpenMP並行內同步進行
#pragma omp parallel{
#pragma omp for
for_1(){
for_2(){
do_something();
}
#pragma omp barrier //wait for all threads to finish after the inner for
continue_with_something_else_in parallel();
}
}
編譯器告訴我,我不能把一個障礙存在。有誰知道我該如何解決這個問題?
編譯器是正確的(就像往常一樣)。如果不同的線程在for循環中執行不同次數的迭代,他們會遇到不同數量的障礙 - 這將如何工作?你可以考慮使用'flush'來確保所有的線程都有一個共享變量的共同視圖,但是鑑於並行for循環中的東西應該是獨立的,我對任何需要它們的算法持懷疑態度內部for循環之後的內存公共視圖,同樣,並非所有線程都會執行相同的次數。你究竟想要做什麼? –
好吧,我現在明白了。事情是修改一些共享數組的內部,並且在屏障之後,所有線程都需要使用這些數組的值。 – Atirag
所以也許flush命令可以工作? – Atirag