未找到 clang 执行 header

clang execution header not found

我想使用新的执行策略并行化一些 std::for_each 循环。 ubuntu 20.04 上的 gcc 9.3 没问题,但 macos 11 上的 clang 11 抱怨找不到 #include <execution>。他们还没有包括 execution 吗?

我的旗帜是-std=c++17 -lstdc++ -ltbb

尝试了 -lstdc++-libc++ 并阅读了

基于C++ compiler support,“并行化标准化 TS”未包含在 Clang 或 Apple Clang 中。


旁注:

我认为 macOS 11 的默认 Apple Clang 版本是 12。

无论如何,在 Apple Clang 12 中,有 <execution> header,它需要 _LIBCPP_HAS_PARALLEL_ALGORITHMS 自定义标志才能将您带到 <__pstl_execution>。但是 <__pstl_execution> 没有实现,或者至少我找不到它。

我已经有办法使用它了。
下载 pstl
1.include那个目录
2.rename __pstl_config_site.in 到 __pstl_config_site 然后你删除

#cmakedefine _PSTL_PAR_BACKEND_SERIAL
#cmakedefine _PSTL_PAR_BACKEND_TBB
#cmakedefine _PSTL_HIDE_FROM_ABI_PER_T

加选一个吧,我选TBB

#define _PSTL_PAR_BACKEND_TBB

3.link 库 TBB(或其他后端)
4.in 你的主文件之前定义这个

#define _LIBCPP_HAS_PARALLEL_ALGORITHMS

测试:


    int main([[maybe_unused]] int argc, [[maybe_unused]] char *argv[]) {
        vector A {1, 2, 3, 6, 5, 7};
        vector B {2, 3, 4, 8, 9, 10};
        cout << transform_reduce(execution::par, A.cbegin(), A.cend(), B.cbegin(), 0);
    }

输出:
183
注意一些错误:pstl