为了让英特尔TBB(线程构建模块)与Visual Studio 2015一起使用,我尝试了以下方法(因为默认情况下,构建的二进制文件仅适用于vs2013)。
使用Visual Studio 2015编译英特尔TBB -
makefile.sln
tbb<version>\build\VS2010
tbb<version>\build\VS2010\intel64\Debug
复制到tbb<version>\lib\Debug
。创建新的空Visual C ++项目
对debug,x64配置进行以下更改
tbb<version>\include
tbb<version>\lib\Debug
添加以下库依赖项
tbbmalloc_debug.lib
tbbmalloc_proxy_debug.lib
tbb_debug.lib
选择Debug, x64
配置和构建。构建成功。
用于测试的代码如下:
#include <iostream>
#include <vector>
#include <random>
#include <tbb/parallel_for.h>
// #include "..\Headers\MexMem.hpp"
using namespace std;
int main() {
std::vector<int> A(100, 0);
std::vector<int> B(100, 0);
std::vector<int> C(100, 0);
mt19937_64 RandNoEngine;
uniform_int_distribution<int> RandNoGenerator;
for (int i = 0; i < A.size(); ++i) {
A[i] = RandNoGenerator(RandNoEngine);
B[i] = RandNoGenerator(RandNoEngine);
}
tbb::parallel_for(tbb::blocked_range<int>(0, 100), [&](tbb::blocked_range<int> &Range) {
int beg = Range.begin();
int end = Range.end();
for (int i = beg; i < end; ++i) {
C[i] = A[i] * B[i];
}
});
cout << A[30] << " * " << B[30] << " = " << C[30] << endl;
system("pause");
return 0;
}
按F5进行调试,此处出现错误程序无法启动,因为您的计算机缺少MSVCP120D.dll。尝试重新安装该程序以解决此问题。下一条消息与MSVCR120D.dll相关。请注意,这是在使用Visual 2015构建所有内容(包括TBB库)之后发生的。
其他信息
使用Dependancy Walker(depends.exe)进行快速分析会得到以下结果:
tbb_debug.lib
的依赖关系如下
- TBB_DEBUG.dll
- KERNEL32.DLL
- MSVCP140D.DLL
- VCRUNTIME140D.DLL
- UCRTBASED.DLL
然而,Exe(上述程序的exe)中显示的tbb_debug.lib
的依赖关系如下:
- TBB_EXPERIMENT.EXE
- TBB_DEBUG.dll
? MSVCP120D.DLL
? MSVCR120D.DLL
- KERNEL32.
为什么会出现差异?有没有办法获得更多与此相关的信息,最后,有没有办法在Visual Studio 2015上正确编译和调试英特尔TBB?
答案 0 :(得分:1)
这看起来正在加载错误的TBB_DEBUG.DLL。检查Dependency Walker中DLL的完整路径。