2017-11-09 3 views
0

マルチスレッドについて学ぶためにOpenMPを使用してプログラミングしています。このスレッドでは、11のスレッドであるスレッドは、最後にreturnステートメントに到達する可能性がありますが、一部のスレッドはforループの中で何かに取り組んでいる可能性がありますか?それとも、13行目以降も1つのマスタースレッドになりますか?OpenMPマルチスレッドが1つのスレッドになる

int np, iam; 
#pragma omp parallel private(np, iam) num_threads(11) 
{ 
    np = omp_get_num_threads(); 
    iam = omp_get_thread_num(); 

    #pragma omp for 
    for (int i = 2; i < 100; i++) { 
     std::cout << i; 
     doStuff(i); 
     } 
    } 
}  // line 13 
// synchronize necessary? 
return 0; 
+0

AFAIK行13の後にスレッドが完了し、1つの実行スレッドに戻ります。 OpenMPの背後にある考え方全体は、スレッドコードを書く一方で、何が並列化可能であるかについてのプラグマを使用してヒントを削除し、OpenMPに何をするのかを任せることです。 – bazza

答えて

2

ありparallelコンストラクトの端AR暗黙的なバリアがあるので、同期は必要ではありません。それ以降のコードは、すべてのスレッドが並列領域の最後に到達した後にのみ、マスタースレッド(並列領域内にthread_num == 0を持つスレッド)によってのみ実行されます。

関連する問題