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

问题描述 投票:17回答:4

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

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

技术规范提供了来自algorithmnumericmemory的以下69种算法的并行化版本:( ...长列表...)

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

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

c++ parallel-processing g++ c++17 clang++
4个回答
2
投票

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


11
投票

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

这是being merged into GCC


4
投票

GCC 9将拥有它们

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

并行算法和(需要线程构建块2018或更新)。

当它获得发布标签时,我会试一试。我想知道“螺纹构建模块2018”将需要什么。


3
投票

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.