CUDA内核没有启动

时间:2012-03-01 15:48:56

标签: cuda

我正在使用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); 
} 

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

1 个答案:

答案 0 :(得分:1)

鉴于你在评论中说你得到的“没有支持CUDA的设备”意味着要么你没有支持CUDA的GPU,要么你没有安装正确的驱动程序。鉴于你说你有两个,我建议你尝试重新安装你的驱动程序进行检查。

其他一些说明:

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