2010-10-12 65 views
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.對不起,我的英語不好。

回答

1

由於我試圖創建和鏈接庫CUDA我會建議你創建的.lib,而不是,如果你願意,你可以在以後換這一個dll

我張貼了這個時候最近面臨的問題,一卡車今天的問題,因爲我有這個問題,它被回答。這將幫助您創建包含CUDA代碼的.lib並將其鏈接到exe。鏈接到一個DLL不應該是可怕的不同:

CUDA & Visual Studio 2008: Problems when trying to link different projects