![](/img/trans.png)
[英]sam local start-api go lambda returns 502 "internal server error" on linux ubuntu
[英]Intel oneTBB Ubuntu Linux std::execution::par error
我在 Ubuntu 20.04 上正确使用 oneTBB 时遇到问题。 当我想使用 CLI g++ 和 cmake 将 std::execution::par 与 std::for_each 一起使用时,就会出现问题。 我有 gcc 9.4.0。
这是我遵循的程序:
我已经使用英特尔 web 页面( 此处)的英特尔 GUI 安装了 oneTBB。
我已经使用 /tbb/latest/env 中的“source vars.sh”设置了环境( 在此处解释)。
我有一个示例代码:
测试.cpp:
#include <iostream>
#include <vector>
#include <algorithm>
#include <execution>
int main(){
std::vector<int> vec = {1, 2, 3, 4, 5, 10, 20, 4 };
std::sort(std::execution::seq, vec.begin(), vec.end()); // sequential
std::sort(std::execution::par, vec.begin(), vec.end()); // parallel
return 0;
}
我尝试了以下命令:
g++ -std=c++17 -o test test.cpp -ltbb
这不起作用并给出许多错误。
我尝试了这里解释的命令行:
g++ -o test test.cpp $(pkg-config --libs --cflags tbb)
它给出了以下错误:
error: 'std::execution' has not been declared
指向行 std::sort 行。
我尝试了以下(基于此处)cmake 文件,但没有成功:
cmake_minimum_required(VERSION 3.22) project(test) set(CMAKE_CXX_STANDARD 20) list(APPEND CMAKE_MODULE_PATH "/home/username/oneapi/tbb/latest/lib/cmake/tbb") #set(CMAKE_MODULE_PATH "/home/username/oneapi/tbb/latest/lib/cmake/tbb") #this did not work either add_executable(test test.cpp) find_package(TBB REQUIRED) target_link_libraries(${PROJECT_NAME} tbb)
有趣的是,这里给出的例子都是有效的。 我可以全部构建和运行它们(MKL 示例除外)。 据我所知,这些示例都没有#include <execution>
和std::execution::par
。
在 oneTBB 示例之一(例如 fibonacci)中,如果我只在示例源代码中包含<execution>
,则上面的第 5 和第 6 选项不会出错。 但是当我想在代码中使用std::execution::par
时,它不会编译。 因此,当std::execution::par
发挥作用时,示例不起作用。
可以使用apt
安装的旧版 TBB 不会出现此错误。
任何帮助表示赞赏。
本帖详细解释
您在示例中使用了 oneDPL API,因此它本身与 TBB 无关。 事实上,TBB 只是可以与 oneDPL 一起使用的后端之一——另一个是 OpenMP。 使用 TBB 后端,您可以了解确实来自与 TBB 后端不正确使用相关的问题的错误——上述响应之一中描述的一个方面。 使用 oneAPI,我们从旧的(并且与新的不兼容)“旧”TBB 切换到新的 oneTBB——这也可能溢出到编译过程中。 建议是将 oneDPL 头文件首先放入您的源代码中(例如,在标准库头文件之前)——这足以自动调用正确的 TBB 后端。
我们已经有关于 oneDPL 的文档,例如,请参阅
https://www.intel.com/content/www/us/en/develop/documentation/oneapi-dpcpp-library-guide/top.html
您第一次看到的错误的解决方案(由您找到)在哪里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.