我正在尝试将 CUDA 集成到现有项目中,其中创建了几个库(DLL)。我从一个计算点积的非常简单的内核开始:
// 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。这是问题吗?