只要其中一個線程完成執行,我就需要繼續執行。平行部分內部的邏輯確保所有事情都已圓滿完成。我嵌套並行化,因此當數據未準備好處理時,我將一些頂級線程置於休眠狀態,以免消耗計算能力。因此,當其中一個頂級線程完成時,我想繼續執行,而不是等待其他線程喚醒並自然返回。OpenMP構造只要至少有一個線程完成就會繼續執行
我用
#pragma omp parallel for num_threads(wanted_thread_no)
只要其中一個線程完成執行,我就需要繼續執行。平行部分內部的邏輯確保所有事情都已圓滿完成。我嵌套並行化,因此當數據未準備好處理時,我將一些頂級線程置於休眠狀態,以免消耗計算能力。因此,當其中一個頂級線程完成時,我想繼續執行,而不是等待其他線程喚醒並自然返回。OpenMP構造只要至少有一個線程完成就會繼續執行
我用
#pragma omp parallel for num_threads(wanted_thread_no)
你怎麼parallelise?你使用任務,章節還是?
如果我理解正確並且如果您使用任務原語,則可以在最後一項任務之後使用#pragma omp parallel nowait
。
請參閱第13頁上的pdf(pdf)。
http://openmp.org/wp/presos/omp-in-action-SC05.pdf
它明確地說:
默認情況下,是在「OMP的」末的屏障。使用 「nowait」子句關閉屏障。
#pragma omp for nowait
「nowait」在兩個連續的獨立omp for循環之間有用。
這是你想要的嗎?
也看看這個,即使它說的是同樣的事情。
謝謝這個想法的分支。從我讀過的 - nowait意味着沒有任何線程已經完成。我需要至少一個線程來完成,然後我會知道所有其他線程都沒有任何工作要做。 – Leon
如果外循環有N次迭代和內環具有M(每個的N),你想要的任何外部環路 –
內的以N兒童在許多扶養樹/圖分支機構。另一個循環尋找可以更新獨立於其他分支 – Leon