インテル® C++ コンパイラー 15.0 ユーザー・リファレンス・ガイド
ループの反復順に実行されるワークシェア・ループのコードブロックを指定します。
#pragma omp ordered |
structured-block
なし。
一度に 1 つのスレッドだけが ordered セクションに入ることができます。スレッドは、ループの反復順に入ることができます。以前の反復がすべて完了していること、または以前の反復がすべて ordered セクションを実行しないことが保証されるまで、スレッドは ordered セクションに入ることができません。これにより、ordered セクション内のコードはシーケンシャル化し、順序を設定して、セクション外のコードは並列に実行できるようにします。
次の例は、このプラグマを使用して、各スレッドで変数 intermediate のプライベート値を計算し、それらを for ループのシリアルバージョンと同じ順序で running_calc に合計する方法を示します。 操作の順序を維持することで、浮動小数点結果がシリアルバージョンと同じになることを保証できます。
例 |
---|
#include <omp.h> float running_calc = 0.0; float intermediate; #pragma omp parallel for ordered private(intermediate) { for (i=0; i<N; i++) { // compute private “intermediate” value #pragma omp ordered { running_calc = intermediate + running_calc; } } } |