からまでの 2 つの関数と がdo_step_one(i)
ありdo_step_two(i)
ます。i
0
N-1
現在、私はこの(シーケンシャル)コードを持っています:
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_one()
との各呼び出しはdo_step2()
任意の順序で並列に実行できますが、開始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: 警告: バリア領域は、ワークシェアリング、クリティカル、順序付き、マスター、または明示的なタスク領域内に密接にネストされていない可能性があります。
私は何を誤解していますか?その問題を解決する方法は?