未找到 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
我想使用新的执行策略并行化一些 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