私は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
感謝を持っています。
ほかにも、コンパイラは「遅延」を最適化している可能性があります。適切な遅延を使用したい場合http://en.cppreference.com/w/cpp/thread/sleep_for –
また、コードはおそらくi == 0とi == 1の遅延を追加しているようです。 –