我试图尝试使用C ++ 17标准中提出的新并行库功能,但无法使其正常工作。我尝试使用g++ 8.1.1
和clang++-6.0
和-std=c++17
的最新版本进行编译,但似乎都不支持#include <execution>
,std::execution::par
或任何类似版本。
查看cppreference中的并行算法时,有很长的算法列表,声称
技术规范提供了
algorithm
,numeric
和memory
中以下69种算法的并行版本:(... long list ...) < / p>
听起来算法已经准备好了,但还没准备好使用吗?
一年多以前的this SO question中,答案声称这些功能尚未实现。但是到现在,我期望看到某种实现。我们已经可以使用任何东西了吗?
答案 0 :(得分:11)
答案 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
”,您将发现仅MSVC
和Intel C++
编译器现在支持此功能。
答案 4 :(得分:0)
Gcc 现在支持执行头,但不支持来自 https://apt.llvm.org
的标准 clang 构建