2017-06-14 10 views
0

私はopenmpに非常に新しく、そのような質問に遭遇します。OpenMP並列のための注文

#pragma omp parallel for 
for (int i = 0; i < 10; ++i) { 
    if (i == 0) 
     for (int j = 0; j < 100000000; ++j); // Create a delay for i = 0. 
    cout << i << flush; 
} 

0は遅延があるので最後に出力する必要があります。しかし、実際の出力は無作為な順番になります。

これは何らかのコンパイラの最適化によって引き起こされますか?または、私は誤解したparallel forですか?

私はバージョン

#define _OPENMP 201307 

感謝を持っています。

+3

ほかにも、コンパイラは「遅延」を最適化している可能性があります。適切な遅延を使用したい場合http://en.cppreference.com/w/cpp/thread/sleep_for –

+0

また、コードはおそらくi == 0とi == 1の遅延を追加しているようです。 –

答えて

1

あなたは誤解されている可能性が高いです。parallel for

ほとんどの場合、scheduleomp forに設定しないと、すべてのスレッドがループの1つを実行します。

あなたは0がschedule(static, 2)を追加しようとした後、1が実行されたい場合は、その1を0

とほぼ同時に実行されます。

+0

5年以上にわたってopenmpアプリケーションを開発してきました。私はここで質問に答えるのはかなり新しい人です。あなたが明示的にしたいことを私が与えていないなら、plsのコメント。 –

+0

お返事ありがとうございます! – frankyjuang

関連する問題