C++ 17并行算法已经实现了吗?

Rom*_*tin 17 c++ parallel-processing g++ clang++ c++17

我试图使用C++ 17标准中提出的新并行库功能,但我无法使其工作.我试着用的了最新版本的编译g++ 8.1.1clang++-6.0-std=c++17,但也似乎支持#include <execution>,std::execution::par或任何类似.

声称,在查看并行算法的cppreference时,有很多算法列表

技术规范提供以下69种算法的并行化版本algorithm,numeric并且memory:( ...长列表...)

听起来像算法已经准备好'在纸上',但尚未准备好使用?

在一年多前的SO问题中,答案声称这些功能尚未实现.但到现在为止,我希望看到某种实现方式.有什么我们可以使用的吗?

Nan*_*iao 14

您可以参考https://en.cppreference.com/w/cpp/compiler_support查看所有C++功能实现状态。对于你的情况,只是搜索“ Standardization of Parallelism TS”,你会发现只有MSVCIntel C++编译器现在支持此功能。


Flo*_*mer 13

英特尔发布了遵循C++ 17标准的Parallel STL库:

正在合并为GCC.


Kar*_*rlM 5

Gcc 尚未实现 Parallelism TS(参见https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017

然而,libstdc++(带gcc)有一些等效并行算法的实验模式。见https://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html

让它工作:

任何并行功能的使用都需要额外的编译器和运行时支持,尤其是对 OpenMP 的支持。添加此支持并不困难:只需使用编译器标志 -fopenmp 编译您的应用程序。这将链接到 libgomp,GNU 卸载和多处理运行时库,它的存在是强制性的。

代码示例

#include <vector>
#include <parallel/algorithm>

int main()
{
  std::vector<int> v(100);

  // ...

  // Explicitly force a call to parallel sort.
  __gnu_parallel::sort(v.begin(), v.end());
  return 0;
}
Run Code Online (Sandbox Code Playgroud)


Cir*_*四事件 5

GCC 9将拥有它们

https://gcc.gnu.org/gcc-9/changes.html提及

并行算法和(需要Thread Building Blocks 2018或更高版本)。

当它得到一个释放标签时,我会试一试。我不知道“线程构建块2018”将需要什么。

  • 此处指定:https://gcc.gnu.org/onlinedocs/gcc-9.1.0/libstdc++/manual/manual/status.html#status.iso.2017:_注 3:并行算法对 Intel 有外部依赖性2018 年或之后待定。如果包含 `&lt;execution&gt;` 标头,则必须使用 `-ltbb` 链接到 TBB。_ 并行算法似乎是由 Intel 的 Parallel STL 实现的:https://github.com/gcc-mirror/ gcc/blob/master/libstdc%2B%2B-v3/include/std/algorithm#L64,它本身需要TBB。 (2认同)