c++ - 用于 cout 顺序的 OpenMP 并行

标签 c++ parallel-processing 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

谢谢。

最佳答案

您更有可能被误解为 parallel for

在大多数情况下,当您没有为 omp for 设置 schedule 时, 每个线程都将执行一个循环。

所以1和0几乎同时执行。

如果你想 1 在 0 之后执行。尝试添加 schedule(static, 2)

关于c++ - 用于 cout 顺序的 OpenMP 并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44552851/

相关文章:

c++ - 混合 Boost FOREACH 宏和 OpenMP 并行化

c - openmp 在指针数组和指向数组的指针之间的性能差异有什么问题?

c++ - fatal error LNK1318 : Unexpected PDB error; FORMAT (11)

c++ - 为多个平台构建时如何使用 hudson

c# - 异步,只有一个等待

r - 有没有办法跟踪并行随机森林构建过程中的进度?

c++ - 错误 : expected function body after function declarator

c++ - 编译为 32 位时未声明 QT_VERSION_MAJOR

c++ - OpenMP 实现比串行实现慢

c++ - 指针在 OpenMP 并行部分中是私有(private)的吗?