2011-07-03 29 views
1

我有一个运行两次不同网格大小的内核。CUDA,cuPrintf会导致“未指定的启动失败”?

我的问题是与cuPrintf。内核运行之前我没有cudaPrintfInit(),内核运行之后没有cudaPrintfDisplay(stdout, true)cudaPrintfEnd(),我没有错误,但是当我把它们放在那里时,出现“未指定的启动失败”错误。

在我的设备代码,只有一个这样的循环打印:

if (threadIdx.x==0) { 
    cuPrintf("MAX:%f x:%d y:%d\n", maxVal, blockIdx.x, blockIdx.y); 
} 

我使用CUDA 4.0与CUDA功能的卡2.0所以我编译代码才能使用此语法:

nvcc LB2.0.cu -arch=compute_20 -code=sm_20 

回答

1

如果你是一个CC 2.0的GPU,你不需要cuPrintf在所有 - CUDA已经printf的内置了对CC-2.0和更高的GPU。因此,只需更换你的电话与这cuPrintf:

#if __CUDA_ARCH__ >= 200 
if (threadIdx.x==0) { 
    printf("MAX:%f x:%d y:%d\n", maxVal, blockIdx.x, blockIdx.y); 
} 
#endif 

(请注意,您只需要在#if/#ENDIF线,如果编译你的sm_20和代码也更早版本有了你给的例子编译命令行。 ,您可以消除它们。)

使用printf,您不需要cudaPrintfInit()或cudaPrintfDisplay() - 它是自动的。但是,如果打印大量数据,则可能需要使用cudaDeviceSetLimit()增加默认printf FIFO大小,并通过cudaLimitPrintfFifoSize选项。

相关问题