【问题标题】:How to create a CUDA dll?如何创建一个 CUDA dll?
【发布时间】:2010-10-12 19:33:48
【问题描述】:

我需要在我的应用程序中使用 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 的源代码。 附言对不起我的英语不好。

【问题讨论】:

    标签: dll cuda


    【解决方案1】:

    由于我最近在尝试创建和链接 CUDA 库时遇到了一大堆问题,我建议您创建一个 .lib,如果您愿意,以后可以将其包装在一个 dll 中

    我今天发布了这个问题,因为我遇到了这个问题并且得到了回答。这将帮助您创建一个包含 CUDA 代码的 .lib 并将其链接到一个 exe。链接到一个 dll 不应该是可怕的不同:

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

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 2011-02-22
      • 2012-05-17
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多