繁体   English   中英

英特尔 oneTBB Ubuntu Linux std::execution::par 错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM