Intel TBB 开发指南 1 发布包与编译

本文档详细介绍了Intel TBB库的调试和发布版本,包括tbb_debug、tbbmalloc_debug等,以及如何根据TBB_USE_DEBUG宏设置进行编译。此外,还涵盖了内存分配器、Windows和Linux平台的编译配置,以及与Intel Inspector、VTune等工具的兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文

发布包内容

TBB 包括适用于 Windows*、Linux* 和 macOS* 操作系统的动态共享库文件、头文件和代码示例,你可以按照本节所述进行编译和运行。

Debug

tbb_debug
tbbmalloc_debug
tbbmalloc_proxy_debug

  • 这些版本对库的正确使用进行了广泛的内部检查。
  • 在宏 TBB_USE_DEBUG 设置为 1 的情况下编译的代码。

Release

tbb
tbbmalloc
tbbmalloc_proxy

  • 这些版本可提供最佳性能。 它们消除了对正确使用库的大多数检查。
  • 未定义或设置为0TBB_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.dlltbbmalloc.dll。 应用程序可以选择只使用通用库,或者只使用可伸缩内存分配器,或者两者都使用。

Windows

Include files

include\tbb*.h

.lib files

lib<arch>\vc<lib>.lib

.dll files

…\redist<arch>\tbb\vc<lib>.dll

Processor
ia32IA-32 architecture processors
intel64Intel® 64 architecture processors
Environment
14Microsoft Visual Studio* 2015
14_uwpMicrosoft Visual Studio* 2017
14_uwdMicrosoft Windows Store* applications
_mtIndependent of Microsoft Visual Studio* version.
Version
tbbGeneral library
tbbmallocMemory allocator
tbbmalloc_proxySubstitution for default memory allocator
tbb_previewPreview features library
Version
(none)Release version
_debugDebug 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.2libtbbmalloc.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_AFFINITYOMP_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++ 编译器文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值