Чтобы использовать Intel TBB (блокирование потоков) для работы с visual studio 2015, я попробовал следующий подход (поскольку по умолчанию встроенные двоичные файлы предназначены только для upto vs2013).Зависимость от msvcr120d.dll Visual Studio 2015 (Intel TBB)
Compile Intel TBB с Visual Studio 2015 -
- Загрузить исходный код Intel TBB от Here.
- Распакуйте,
- Откройте VS2010 Решение
makefile.sln
с путиtbb<version>\build\VS2010
- Одобрить преобразование файла проекта использовать Визуальная 2015 инструментарий
- Выбор конфигурации отладки и платформы x64 и Buid. (обратите внимание, если уже сделана предыдущая сборка, затем перестроить (очистить и построить)).
- Скопируйте dll, pdb, lib, exp, def файлы с
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.
Дополнительная информация
Быстрый анализ с зависимостях Walker (depends.exe) дает следующие результаты:
зависимость tbb_debug.lib
как ниже
- TBB_DEBUG.dll
- KERNEL32.DLL
- MSVCP140D.DLL
- VCRUNTIME140D.DLL
- UCRTBASED.DLL
Однако зависимости tbb_debug.lib
, как показано в Exe (EXE из выше PROGR am) является следующим:
- TBB_EXPERIMENT.EXE
- TBB_DEBUG.dll
? MSVCP120D.DLL
? MSVCR120D.DLL
- KERNEL32.
Почему разница? Есть ли способ получить дополнительную информацию, связанную с этим, и, наконец, есть ли способ правильно компилировать и отлаживать Intel TBB на Visual Studio 2015?
Вы проверили полный путь в зависимости от библиотеки DLL? Это похоже на загрузку неправильного TBB_DEBUG.dll. – 1201ProgramAlarm
@ 1201ProgramAlarm Ah Да. Это действительно так. Я думаю, это связано с тем, что я недавно обновил Visual Studio, и что-то все еще заставляет Visual Studio работать в студии Composer Libs. Я посмотрю, что вызывает это, посмотрим, смогу ли я исправить это и сообщить вам. – Atimaharjun
@ 1201ПрограммаAlarm Вы ударяете ноготь по голове. Во время работы над предыдущей версией я включил библиотеку распределенных библиотек Intel TBB в переменную среды пути, которая заставляет Visual Studio обходить папки, которые я сказал им, чтобы посмотреть. Пожалуйста, отправьте свой комментарий в качестве ответа, я пометю его как принятый. – Atimaharjun