我的問題就是這樣的one。但我想做一些不同的...c openmp並行平行區內
例如,在我的平行區域內我想運行我的代碼在4個線程。當每個線程進入for循環時,我想在8個線程上運行我的代碼。像
#pramga omp parallel num_threads(4)
{
//do something on 4 threads
#pragma omp parallel for num_threads(2)
for(int i=0;i<2;i++){
//do something on 8 threads in total
}
}
這樣,是有辦法「分裂」每個(4)運行的線程分爲兩個(新)線程,以便裏面的for循環更多(8)線程正在運行?
這裏有什麼 - 嵌套的並行機制,一個平行部分在另一個平行部分 - 被大多數當前支持OpenMP的編譯器支持,但默認情況下通常是關閉的。您需要將'OMP_NESTED'環境變量設置爲'TRUE',或者在程序中調用'omp_set_nested(1)'。看到,例如,[這個答案](http://stackoverflow.com/a/8303151/463827) – 2013-04-05 11:36:50
是的,這工作正常!謝謝 ! – PinkFloyd 2013-04-05 12:18:27
@Jonathan Dursi:Vakh要求你重寫你的評論作爲答案。那麼也許你可以提供一個補充信息。就在我的for循環結束之前,我想同步到線程。但如果我添加一個「障礙」,編譯器會說:障礙區域可能沒有緊密嵌套在工作共享,關鍵,有序,主控或顯式任務區域內。我怎麼解決這個問題 ? – PinkFloyd 2013-04-08 10:29:02