2017-02-13 72 views
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中

回答

1

任務完成是隱式的,不明確的(1.2.5任務分派術語)

任務完成任務當與相關聯的結構化的端部構造完成發生生成任務已達到。

single工作共享構造的末尾存在隱含障礙。正如你所提到的,障礙等待明確的任務。因此所有任務將在single區塊完成。

+0

謝謝。我有點不認爲這是在規範的術語表部分定義的。 –