2017-02-13 12 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仕様書では見つかりません。

EDIT

のOpenMP仕様でbarrier説明から:

バリア領域と結合されたすべての明示的 タスクの完全な実行を実行する必要があります結合並列領域を実行しているチームのすべてのスレッドいずれかがバリアを越えて実行を続けることができるようになる前に、この並列領域に移動してください。

しかし、これは私がタスクの完了を担当しているのか、OpenMPランタイムがそれを担当しているのかは言いません。 OpenMPの中

答えて

1

タスク完了が、明示的ではない、暗黙的である(1.2.5タスキング用語)

タスク完了と関連構成ブロックの端部がを構築するときに完了が発生タスクタスクが生成されました。

singleワークシェアリング構成の最後に暗黙のバリアがあります。あなたが言及したように、障壁は明示的な仕事を待つ。したがって、すべてのタスクはsingleブロックで完了します。

+0

ありがとうございました。私は、SpecのGlossaryセクションでこれが定義されるとは思っていませんでした。 –

関連する問題