【问题标题】:CUDA, cuPrintf causes "unspecified launch failure"?CUDA、cuPrintf 导致“未指定的启动失败”?
【发布时间】:2011-09-27 18:56:19
【问题描述】:

我有一个内核,它以不同的网格大小运行两次。

我的问题是 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  

【问题讨论】:

    标签: cuda compiler-errors


    【解决方案1】:

    如果您使用的是 CC 2.0 GPU,则根本不需要 cuPrintf——CUDA 为 CC-2.0 和更高版本的 GPU 内置了 printf。因此,只需将您对 cuPrintf 的调用替换为:

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

    (请注意,如果您正在为 sm_20 和更早版本编译代码,则只需要 #if / #endif 行。使用您提供的示例编译命令行,您可以消除它们。)

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

    【讨论】:

      猜你喜欢
      • 2012-12-20
      • 2012-10-21
      • 1970-01-01
      • 2016-08-29
      • 2018-03-02
      • 2020-12-23
      • 2012-04-11
      • 2014-07-28
      • 1970-01-01
      相关资源
      最近更新 更多