Как создать DLL CUDA? - PullRequest
       8

Как создать DLL CUDA?

1 голос
/ 12 октября 2010

Мне нужно использовать 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.PS Извините за мой плохой английский.

1 Ответ

1 голос
/ 04 марта 2011

Поскольку я недавно столкнулся с множеством проблем при попытке создать и связать библиотеку CUDA, я бы посоветовал вам создать вместо этого .lib, а если захотите, вы можете позже обернуть это в DLL

этот вопрос сегодня, потому что у меня были проблемы с этим, и на него был дан ответ.Это поможет вам создать .lib-файл с кодом CUDA и связать его с exe-файлом.Связывание с dll не должно быть по-другому:

CUDA & Visual Studio 2008: проблемы при попытке связать разные проекты

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...