我需要在我的应用程序中使用cuda。但我不能创建一个DLL。这里有一些代码。
__global__ void calc(float *a, int n) {
int idx = blockIdx.x * blockDim.x + threadIdx.x;
float val = a[idx];
if (idx < n){
a[idx] = 4.0 /(1.0 + val*val);
}
}
...
extern "C" __declspec(dllexport) void GPU_Code ( float *a_h, float *sum ) {
float *a_d;
const int numSteps = 10000;
cudaMalloc((void **) &a_d, sizeof(float)*numSteps);
int blockSize = 4;
int blocks = numSteps / blockSize + (numSteps % blockSize == 0 ? 0:1);
cudaMemcpy(a_d, a_h, sizeof(float)*numSteps, cudaMemcpyHostToDevice);
calc<<< blocks, blockSize >>> (a_d, numSteps);
cudaMemcpy(a_h, a_d, sizeof(float)*numSteps, cudaMemcpyDeviceToHost);
...
return;
}
和dll成功创建!但是当我尝试在我的应用程序代码中包含时,我会犯一个错误 - 致命错误LNK1107:文件无效或损坏:无法读取0x2D0。
__declspec(dllimport) void GPU_Code ( float *a_h, float *sum );
int main() {
float*a_h;
a_h = (float*)malloc(sizeof(double)*10000);
float sum = 0.0;
GPU_Code(a_h, &sum);
...
return 0;
}
如果可以,请带一些使用dll的源代码。 附:抱歉我的英语不好。
答案 0 :(得分:1)
由于我最近在尝试创建和链接CUDA库时遇到了大量问题,我建议您创建一个.lib,如果您愿意,可以稍后将其包装在一个DLL中
我今天发布了这个问题,因为我遇到了这个问题并得到了解答。这将帮助您创建包含CUDA代码的.lib并将其链接到exe。链接到DLL不应该是非常不同的:
CUDA & Visual Studio 2008: Problems when trying to link different projects