刚接触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
谢谢。
最佳答案
您更有可能被误解为 parallel for
。
在大多数情况下,当您没有为 omp for
设置 schedule
时,
每个线程都将执行一个循环。
所以1和0几乎同时执行。
如果你想 1 在 0 之后执行。尝试添加 schedule(static, 2)
。
关于c++ - 用于 cout 顺序的 OpenMP 并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44552851/