Чтобы заставить Intel TBB (Thread Building Blocks) работать с Visual Studio 2015, я попробовал следующий подход (потому что по умолчанию встроенные двоичные файлы предназначены только для версии до 2013 года).
Компилировать Intel TBB с Visual Studio 2015 —
makefile.sln
с пути tbb<version>\build\VS2010
tbb<version>\build\VS2010\intel64\Debug
в tbb<version>\lib\Debug
,Создать новый пустой проект Visual C ++
Сделайте следующие изменения для отладки, конфигурации 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. Обратите внимание, что это происходит после сборки всего (включая библиотеки TBB) с использованием Visual 2015.
Дополнительная информация
Быстрый анализ с помощью Dependancy Walker (depen.exe) дает следующие результаты:
Зависимость tbb_debug.lib
как показано ниже
- TBB_DEBUG.dll
- KERNEL32.DLL
- MSVCP140D.DLL
- VCRUNTIME140D.DLL
- UCRTBASED.DLL
Однако зависимости tbb_debug.lib
как показано в Exe (exe вышеуказанной программы), как показано ниже:
- TBB_EXPERIMENT.EXE
- TBB_DEBUG.dll
? MSVCP120D.DLL
? MSVCR120D.DLL
- KERNEL32.
Почему расхождение? Есть ли способ получить больше информации, связанной с этим, и, наконец, есть ли способ правильно скомпилировать и отладить Intel TBB в Visual Studio 2015?
Похоже, что он загружает неправильную TBB_DEBUG.DLL. Проверьте полный путь к DLL в Dependency Walker.