【问题标题】:c++17 parallel algorithms and CMakec++17 并行算法和 CMake
【发布时间】:2021-03-04 16:21:46
【问题描述】:

看起来越来越多的标准库实现依赖 TBB 来实现并行算法。这让我有点惊讶,因为我认为标准库不会有外部依赖项(除了pthread 之类的东西),但我想这是一个不同的问题。

我的问题是我现在需要将它烘焙到我的 CMakeLists.txt 文件中。

第一个坏消息:TBB 没有官方的 CMake 支持,TBB 本身也不提供任何FindTBB.cmake 文件。你可以在网上找到它hereandthere,但是如果标准库开始依赖它,CMake 正式支持它会很好。这会更进一步吗?

然后,我需要在我的CMakeLists.txt 文件中添加一些稍微复杂的代码到find_package(TBB REQUIRED),并在需要时链接相应的目标(取决于标准库、版本等)。看起来柯南已经提供了一个对用户隐藏所有内容的包。你只需得到parallelstl 就可以了。将来我们会在 CMake 中有类似的东西吗?

我们今天已经可以在 CMake 中使用这些并行算法,但如果能更轻松地创建此类项目,那就太好了。

【问题讨论】:

  • 嗯,标准库的哪些实现是这样做的?标准库应该是自包含的。如果你的要求你链接到其他库,那么这是一个质量很差的实现。
  • @PeteBecker GCC 9's libstdc++ (v9.1+)
  • youtu.be/-KT8gaojHUU 描述了当前的情况。显然,libcxx 也应该依赖于 TBB,因为它使用 Intel 给出的相同实现。但是,他们的计划是在未来某个时候替换并行后端。
  • 关于 TBB 中的 CMake:最近 TBB 迁移到 CMake,目前尚未发布到生产环境,但可在 masteronetbb_2021 分支上使用。此外TBB releases 支持 CMake 集成。 Here 是 TBB 2020 及更早版本的一些说明,如何与 find_package(TBB) 一起使用。
  • @Touloudou,嗯,听起来像是我们永远等待但永远不会发生的替代品之一。

标签: c++ cmake parallel-processing c++-standard-library tbb


【解决方案1】:

我安装了带有 GCC 和 TBB (libtbb-dev 2020.3-1) 的 Ubuntu 21.10。 由于 TBB 使用 pkg-config 对我有用的是:

# file CMakeLists.txt

find_package(PkgConfig REQUIRED)
pkg_search_module(TBB REQUIRED tbb)
link_libraries(PkgConfig::TBB)

不幸的是,当我后来安装了 intel-oneapi 2021.4.0,其中包括它自己的 TBB(在 /opt/intel/oneapi 中)时,它停止了工作。 这个较新版本的 TBB 显然不能用作 GCC(并行)STL 的支持(在我的系统中生成编译错误),所以我这样做是为了选择系统的 TBB 而不是 /opt/intel 版本。

link_libraries(-ltbb) #(PkgConfig::TBB)

这违背了 CMake 的目的,所以我也在寻找更强大的解决方案。 我目前的建议是不要安装 oneapi 的 TBB,如果你想让它与系统的 GCC 一起工作。

【讨论】:

    猜你喜欢
    • 2018-12-04
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2020-05-30
    • 2019-06-28
    • 2018-11-04
    • 1970-01-01
    相关资源
    最近更新 更多