当我在代码中使用 oneDPL 时,我面临以下问题:
/usr/lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/pstl/parallel_backend_tbb.h:70:10: error: no member named 'task' in namespace 'tbb'
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况以及如何解决它?
小智 5
当您使用oneTBB时会发生这种情况,因为 oneTBB 与旧版 TBB不兼容。
libstdc++9,libstdc++10使用 oneTBB 不支持的传统 TBB 接口。它已修复libstdc++11(请参阅详细信息)。
oneTBB 发行说明中写道:
由于早期版本的线程构建块 (TBB) 和 oneAPI 线程构建块 (oneTBB) 之间的接口更改不兼容,在 libstdc++ 版本 9 和 10 中使用并行 STL 算法的应用程序可能无法编译。在每个翻译单元中包含第一个标准头文件之前,通过将 PSTL_USE_PARALLEL_POLICIES(在 libstdc++ 9 中)或 _GLIBCXX_USE_TBB_PAR_BACKEND(在 libstdc++ 10 中)宏定义为零来禁用对并行 STL 算法的支持。
如果您使用 oneDPL,则不必应用这些解决方法,因为 oneDPL 会为您完成此操作,但您需要在标准标头之前包含其标头。同时,您仍然可以像以前一样使用并行 STL 算法,因为 oneDPL 实现了它们。
如果标题的重新排序不适合您,您可以定义宏,例如:
dpcpp my_app.cpp -DPSTL_USE_PARALLEL_POLICIES=0 # for libstdc++ 9
dpcpp my_app.cpp -D_GLIBCXX_USE_TBB_PAR_BACKEND=0 # for libstdc++ 10
Run Code Online (Sandbox Code Playgroud)
如果它也不适用,请尝试使用旧版 TBB 而不是 oneTBB。
| 归档时间: |
|
| 查看次数: |
1981 次 |
| 最近记录: |