Я пытаюсь интегрировать CUDA в существующий проект, в котором создаются несколько библиотек (DLL). Я начал с очень простым ядром, который вычисляет скалярное произведение:CUDA: ошибка C2491: 'log1p': определение функции dllimport не разрешено
// dotProd_kernel.cu
__global__ void dotProd(double* result, double* vec1, double* vec2)
{
int i = threadIdx.x;
result[i] = vec1[i] * vec2[i];
}
Это ядро вызывается хост сценария:
// doProd.cu
#include <cutil_inline.h>
#include <dotProd_kernel.cu>
extern "C" double CUDA_dot(THTensor *vec1, THTensor *vec2);
double CUDA_dot(THTensor *vec1, THTensor *vec2)
{
// [content skipped]
// execute the kernel
dotProd<<< 1, nbThreads >>>(device_vec1, device_vec2, device_result_array);
// [content skipped]
return sum;
}
Я генерировать файлы сборки с помощью CMake, и использовать Visual Studio 2008 Pro для скомпилируйте его. Если я просто использую файл .cu с функцией foobar, которая не вызывает ядро, она выполняется отлично. Но приведенный выше код, я получаю следующее сообщение об ошибке:
c:\cuda\include\math_functions.h(3459) : error C2491: 'log1p' : definition of dllimport function not allowed
Результирующий код, который вызывает код CUDA экспортируется как DLL. Это проблема?
комментируйте вызов ядра и скомпилируйте его. Сохраняется ли проблема? Я не вижу вызов log1p в коде выше ... – fabrizioM
Да, я тоже был в замешательстве;)! Но я, наконец, понял это, посмотрю на мой ответ ... Спасибо за помощь! – Wookai