2010-10-12 14 views
1

J'ai besoin d'utiliser cuda dans mon application. Mais je ne peux pas créer une DLL. Du code ici.Comment créer une DLL CUDA?

__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; 
} 

et dll créé avec succès! Mais quand j'essaie d'inclure dans mon code de l'application, je prends une erreur - erreur fatale LNK1107: fichier invalide ou corrompu: ne peut pas lire à 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; 
} 

Si vous pouvez, prenez-moi s'il vous plaît un peu de code source à l'utilisation dll. P.S. Désolé pour mon mauvais anglais.

Répondre

1

Depuis que je récemment fait face à un camion plein de problèmes lors de la tentative de créer et de relier une bibliothèque CUDA Je suggère que vous créez un .lib au lieu et si vous voulez vous pouvez ensuite envelopper cela dans une dll

Je posté question aujourd'hui parce que j'avais des problèmes avec cela et il a été répondu. Cela vous aidera à créer un code CUDA contenant du .lib et le lier à un exe. Lien vers un dll ne devrait pas être terrible différent:

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