【发布时间】: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,目前尚未发布到生产环境,但可在 master 和 onetbb_2021 分支上使用。此外TBB releases 支持 CMake 集成。 Here 是 TBB 2020 及更早版本的一些说明,如何与
find_package(TBB)一起使用。 -
@Touloudou,嗯,听起来像是我们永远等待但永远不会发生的替代品之一。
标签: c++ cmake parallel-processing c++-standard-library tbb