私はN-1
へ0
からi
のために、二つの機能、do_step_one(i)
とdo_step_two(i)
を持っています。OpenMPで途中のすべてのスレッドの同期化( `barrier`)を使って` omp parallel for`を作成する方法
現在、I本(シーケンシャル)コードを持っている:(do_step_one()
とdo_step2()
の
for(unsigned int i=0; i<N; i++) {
do_step_one(i);
}
for(unsigned int i=0; i<N; i++) {
do_step_two(i);
}
各呼び出しは、任意の順序で並列に行うことができますが、任意のdo_step_two()
が開始するすべてのdo_step_one()
の終了を必要としますdo_step_one()
の結果を使用します)。
#omp parallel for
for(unsigned int i=0; i<N; i++) {
do_step_one(i);
#omp barrier
do_step_two(i);
}
しかし、gccが文句
convolve_slices.c:21:警告:バリア領域が密接に命じ、ワークシェアリングの内側に重大な入れ子にすることはできません、
は、私は、次の試してみましたマスターまたは明示的なタスク領域。
私は何を誤解していますか?その問題を解決するには?
あなたのOpenMPの構文が間違って見えます - あなたがあるように見えるの両方の呼び出しについて'#pragma'を見逃しました - あなたはそれを省略しましたか、それともそこにありませんか? –
私はそれを省略します、申し訳ありませんが、実際のコードではここにあります。 –