1
我有一個C++的OpenMP代碼看起來這一點:OMP屏障嵌套線程
#pragma omp parallel proc_bind(spread), num_threads(ncpu)
{
<some code>
#pragma omp parallel proc_bind(close), num_threads(ncore)
{
<some more code...>
#pragma omp barrier
}/* End of Level 2 threads*/
}/* End of Level 1 threads*/
這將創建2級嵌套螺紋(總共16個線程)。我的問題是我需要屏障來延伸兩層線程。因爲它現在是每個8線程的第2級羣組將等待其羣組成員,但是當一個羣組完成時,它將繼續前進,而不管其他8個線程的組。有沒有辦法建立一個在頂層運作的障礙? (沒有終止L2並行區域並重新創建它)
對不起,只是在例子中忘了他們......我確實有他們在真正的代碼 – Joel
,但如果總線程數爲100k,那麼在每個障礙處它們需要在它們之間的存儲器切換中保持10萬個堆棧。 –