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

时间:2018-06-25 20:03:05

标签: c++ parallel-processing g++ c++17 clang++

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

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

  

技术规范提供了algorithmnumericmemory中以下69种算法的并行版本:(... long list ...) < / p>

听起来算法已经准备好了,但还没准备好使用吗?

一年多以前的this SO question中,答案声称这些功能尚未实现。但是到现在,我期望看到某种实现。我们已经可以使用任何东西了吗?

5 个答案:

答案 0 :(得分:11)

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

它是being merged into GCC

答案 1 :(得分:4)

GCC 9将拥有它们

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

  

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

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

答案 2 :(得分: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;
}

答案 3 :(得分:2)

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

答案 4 :(得分:0)

Gcc 现在支持执行头,但不支持来自 https://apt.llvm.org

的标准 clang 构建