【问题标题】:CUDA kernel not launchingCUDA 内核未启动
【发布时间】:2012-03-09 00:32:34
【问题描述】:

我使用的是 GeForce 9800 GX2。我安装了驱动程序和 CUDA SDK,我编写了如下所示的简单程序:

__global__ void myKernel(int *d_a) 
{ 
    int tx=threadIdx.x; 
    d_a[tx]+=1; 
    cuPrintf("Hello, world from the device!\n"); 


} 
int main() 
{ 
    int *a=(int*)malloc(sizeof(int)*10); 
    int *d_a; 
    int i; 
    for(i=0;i<10;i++) 
        a[i]=i; 
    cudaPrintfInit(); 
    cudaMalloc((void**)&d_a,10*sizeof(int)); 
    cudaMemcpy(d_a,a,10*sizeof(int),cudaMemcpyHostToDevice); 
    myKernel<<<1,10>>>(d_a); 
    cudaPrintfDisplay(stdout, true); 
    cudaMemcpy(a,d_a,10*sizeof(int),cudaMemcpyDeviceToHost); 

    cudaPrintfEnd(); 
    cudaFree(d_a); 
} 

代码正在正确编译,但内核似乎没有启动...内核端没有打印任何消息。我应该怎么做才能解决这个问题?

【问题讨论】:

  • 您可以从添加一些错误检查开始。这些 API 调用中的每一个都会返回一个状态。您应该检查其中的每一个,以查看报告的错误以及发生的位置。
  • 另外,您确实运行了 SDK 示例代码,对吧? Linux 还是 Windows? SDK 示例是否可以编译和工作?全部?
  • 我尝试使用 API 来识别运行时错误,但它显示 no CUDA-capable device is detected in simple_device_call.cu at line 30...我正在使用 linux 并且 SDL 示例代码也无法正常工作
  • @user997704:所以你有一个不工作的 CUDA 安装。在您担心此代码之前修复它。

标签: cuda


【解决方案1】:

鉴于在您的 cmets 中您说您收到“没有支持 CUDA 的设备”,这意味着您没有支持 CUDA 的 GPU 或者您没有安装正确的驱动程序。鉴于您说两者都有,我建议您尝试重新安装驱动程序进行检查。

其他一些注意事项:

  1. 您是否尝试通过远程桌面执行此操作?这将不起作用,因为 Microsoft 使用虚拟显示设备来远程转发显示,Tesla GPU 支持TCC,这允许 RDP 通过使 GPU 表现为非显示设备来工作,但使用显示 GPU像 Geforce 一样,这是不可能的。在控制台运行或在控制台登录并使用 VNC。
  2. 还可以尝试运行 deviceQuery SDK 代码示例以检查它是否正确检测到您的 GPU 和驱动程序/运行时版本。
  3. 您应该检查所有 CUDA API 调用是否有错误。
  4. cudaPrintfDisplay()之前致电cudaDeviceSynchronize()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-28
    • 2013-07-15
    • 2012-08-23
    • 1970-01-01
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多