1
我需要在我的應用程序中使用cuda。但我無法創建一個dll。一些代碼在這裏。如何創建一個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的源代碼。 P.S.對不起,我的英語不好。