2012-12-13 27 views
0

只要其中一個線程完成執行,我就需要繼續執行。平行部分內部的邏輯確保所有事情都已圓滿完成。我嵌套並行化,因此當數據未準備好處理時,我將一些頂級線程置於休眠狀態,以免消耗計算能力。因此,當其中一個頂級線程完成時,我想繼續執行,而不是等待其他線程喚醒並自然返回。OpenMP構造只要至少有一個線程完成就會繼續執行

我用

#pragma omp parallel for num_threads(wanted_thread_no) 
+0

如果外循環有N次迭代和內環具有M(每個的N),你想要的任何外部環路 –

+0

內的以N兒童在許多扶養樹/圖分支機構。另一個循環尋找可以更新獨立於其他分支 – Leon

回答

0

你怎麼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循環之間有用。

這是你想要的嗎?

也看看這個,即使它說的是同樣的事情。

http://openmp.org/mp-documents/omp-hands-on-SC08.pdf

+0

謝謝這個想法的分支。從我讀過的 - nowait意味着沒有任何線程已經完成。我需要至少一個線程來完成,然後我會知道所有其他線程都沒有任何工作要做。 – Leon

相關問題