发布包内容
TBB 包括适用于 Windows*、Linux* 和 macOS* 操作系统的动态共享库文件、头文件和代码示例,你可以按照本节所述进行编译和运行。
Debug
tbb_debug
tbbmalloc_debug
tbbmalloc_proxy_debug
- 这些版本对库的正确使用进行了广泛的内部检查。
- 在宏
TBB_USE_DEBUG
设置为1
的情况下编译的代码。
Release
tbb
tbbmalloc
tbbmalloc_proxy
- 这些版本可提供最佳性能。 它们消除了对正确使用库的大多数检查。
- 未定义或设置为
0
的TBB_USE_DEBUG
编译的代码。
提示
首先使用库的调试版本测试你的程序,以确保你正确使用库。 对于发布版本,不正确的使用可能会导致不可预测的程序行为。
TBB 支持 Intel Inspector XE、Intel® VTune™ Amplifier XE 和 Intel® Advisor。 完全支持这些工具需要使用宏 TBB_USE_THREADING_TOOLS=1
进行编译。 在以下条件下,该符号默认为 1:
- 当
TBB_USE_DEBUG=1
时。 - 在 Microsoft Windows* 操作系统上,当
_DEBUG=1
时。
“TBB 开发人员参考”部分更详细地解释了默认值。
警告
对 Intel Inspector XE 的检测支持在任务库首次初始化后生效。 如果在此初始化发生之前使用库组件,Intel Inspector XE 可能会错误地报告并非真正竞争的竞争条件。
可扩展内存分配器
TBB的调试版和发布版均包含两个动态共享库,一个具有通用支持,另一个具有可扩展内存分配器。 后者的区别在于它的名字 malloc。 例如,Windows 的发行版本分别是 tbb.dll
和 tbbmalloc.dll
。 应用程序可以选择只使用通用库,或者只使用可伸缩内存分配器,或者两者都使用。
Windows
Include files
include\tbb*.h
.lib files
lib<arch>\vc<lib>.lib
.dll files
…\redist<arch>\tbb\vc<lib>.dll
Processor | |
---|---|
ia32 | IA-32 architecture processors |
intel64 | Intel® 64 architecture processors |
Environment | |
---|---|
14 | Microsoft Visual Studio* 2015 |
14_uwp | Microsoft Visual Studio* 2017 |
14_uwd | Microsoft Windows Store* applications |
_mt | Independent of Microsoft Visual Studio* version. |
Version | |
---|---|
tbb | General library |
tbbmalloc | Memory allocator |
tbbmalloc_proxy | Substitution for default memory allocator |
tbb_preview | Preview features library |
Version | |
---|---|
(none) | Release version |
_debug | Debug version |
警告
确保环境变量提到了相关的产品目录; 否则编译器可能找不到所需的文件。
笔记
Microsoft* C/C++ 运行时库有静态和动态两种形式。 两者都可以与英特尔 TBB 一起使用。 与英特尔 TBB 库的链接始终是动态的。
警告
从 TBB 2017 开始,适用于 Windows* 操作系统的 TBB 示例与库分开分发,可在 网站 作为独立包或作为一部分提供 Intel Parallel Studio XE 或 Intel System Studio 在线示例包。
Linux
如果开源版本的 TBB 已安装到 /usr/lib64 等系统文件夹中,则示例可能无法链接,因为链接器可能会以不寻常的顺序搜索库。要解决此问题,请使用 -L 链接器选项指定 TBB 库的正确位置。此问题不影响程序执行。
如果使用 VTune™ Amplifier XE 分析通过 LD_PRELOAD
使用动态内存分配器替换的应用程序,则分析可能无法启动。要解决此问题,请在 LD_PRELOAD
中指定 libtbbmalloc_proxy.so.2
和 libtbbmalloc.so.2
的完整路径,或者为 VTune Amplifier XE 设置项目以使用设置 LD_PRELOAD
并启动应用程序的 shell 脚本。
如果使用 Clang 和 GCC 7 之前版本的 GNU libstdc++ 库进行编译,则 TBB 头文件无法正确检测 C++11 功能的可用性。为了解决这个问题,在包含任何 TBB 头文件之前,将 TBB_USE_GLIBCXX_VERSION
宏定义为 libstdc++ 的正确版本。
互操作性问题
不同版本共存
一个应用程序不能在一个进程中使用多个 TBB 运行时库实例。如果应用模块(包括应用使用的第 3 方库)是使用不同版本的 TBB 构建的,则应用应使用版本最大或更高的运行时库,并确保它是第一个 TBB 运行时库加载到应用程序进程中。使用运行时库的多个实例,或使用比任何应用程序模块所需版本小的库,都可能导致加载时或运行时出错。
与 OpenMP 的互操作性
如果使用 TBB 和 OpenMP 构造在同一程序中以较短的间隔一个接一个地调用,并且将 Intel C++ 编译器用于 OpenMP 代码,请将 KMP_BLOCKTIME
环境变量设置为一个小值(20
毫秒或更短)以提高性能。你还可以通过 kmp_set_blocktime()
库调用在程序中进行此设置。
如果你在 Linux 上的程序中同时使用 TBB 和 OpenMP,在 TBB 任务调度程序初始化之前使用 KMP_AFFINITY
、OMP_PROC_BIND
等环境变量或以编程方式设置线程关联可能会限制 TBB 使用的默认工作线程数。要解决此问题,请更新至 Intel C++ 编译器 16.0 Update 1 或更高版本以及 TBB 4.4 Update 2 或更高版本。
其他事宜
如果你的应用程序 #include <tbb/enumerable_thread_specific.h>
或 <tbb/tbb.h>
以在 Intel® Xeon Phi™ 协处理器上卸载执行(offload execution),可能会看到与 libpthread
相关的链接错误。要解决此问题,请使用以下编译器选项:Windows* 操作系统上的 /Qoffload-option,mic,compiler,"-pthread"
或 Linux* 操作系统上的 -qoffload-option,mic,compiler,"-pthread"
。
有关上述选项、函数和环境变量的更多详细信息,请参阅 Intel C++ 编译器文档。