为什么 std::execution::par_unseq 不起作用?

问题描述 投票:0回答:1

以下代码不能并行运行的原因可能是什么?

#include <iostream>
#include <execution>
#include <unistd.h>

int main() {
    std::vector<int> parts(10);
    std::iota(parts.begin(), parts.end(), 0);

    std::for_each(std::execution::par_unseq,
                  parts.begin(), parts.end(), [&](int part) {
        usleep(1'000'000);
        std::cout << part << std::endl;
    });

    return 0;
}

这是在AMD上运行的Linux Debian,代码是通过以下命令编译的

g++ -std=c++17 -fopenmp -O2 -o test test.cpp

代码应在大约 1 秒内输出数字 0..9。现在大约需要 10 秒,因为代码不并行运行。

顺便说一句。 usleep() 函数可以用其他计算量大的函数代替,但这并不能改变情况。

parallel-processing c++17 g++
1个回答
0
投票

并行执行策略描述了允许的并行类型。

如果未实现并行执行策略,则允许实现回退到顺序执行策略,这似乎就是您的情况。

某些实现可以有条件地使用这些并行策略,具体取决于您安装了哪些附加软件包。

© www.soinside.com 2019 - 2024. All rights reserved.