1
如果我創建了一堆OpenMP任務並且不使用taskwait
,那麼程序在哪裏等待該任務完成?請看下面的例子:等待OpenMP任務完成的隱式障礙?
#pragma omp parallel
{
#pragma omp single
{
for (int i = 0; i < 1000; i++) {
#pragma omp task
... // e.g., call some independent function
}
// no taskwait here
}
// all the tasks completed now?
}
方案是否在隱性障礙等待任務的完成在single
塊的結束?我假設如此,但在OpenMP規範中找不到有關此問題的任何信息。
編輯
從barrier
描述的OpenMP規格:
組中執行並行結合區域必須 執行屏障區和所有明確 任務結合完整的執行的所有線程在任何被允許繼續執行超出屏障之前,將其移動到該平行區域。
但是,這並不表示我是否負責任務完成,或者OpenMP運行時是否爲我完成。 OpenMP中
謝謝。我有點不認爲這是在規範的術語表部分定義的。 –