C++ 编译器支持 std::execution(并行 STL 算法)

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

我想使用

std::sort
的并行版本,我可以在其中指定像
std::execution::par_unseq
这样的执行策略。

我目前在 Ubuntu Linux 下使用

clang++-10
g++ 7.5.0
,但是两者都没有找到所需的包含文件
execution
,所以显然这些编译器版本尚不支持并行算法。

有人可以告诉我哪个版本的

clang
gcc
支持此功能吗?

c++ c++17 std
2个回答
4
投票

GCC 10 和 Clang 11 支持 C++17 执行策略。

这是一个演示示例https://gcc.godbolt.org/z/xahs5x1Kx

#include <execution>

int main()
{
    int a[] = {2,1};
    std::sort(std::execution::par_unseq, std::begin(a), std::end(a) );
    return a[0];
}

2
投票

poolSTL是一些并行C++17算法的单头实现,包括排序:

#include <poolstl/poolstl.hpp>

std::sort(poolstl::par, vec.begin(), vec.end());

它适用于 GCC 7 和缺少本机支持的 Clang 版本。

还有

pluggable_sort
可以并行化其他快速顺序排序,例如 pdqsort:

poolstl::pluggable_sort(poolstl::par, vec.begin(), vec.end(), pdqsort);
© www.soinside.com 2019 - 2024. All rights reserved.