我正在使用GeForce 210,计算能力1.2和CUDA 6.5。

我希望从CUDA内核中打印浮点值,我在项目目录中包括了“ cuPrintf.cu”和“ cuPrintf.cuh”,并将它们包括在我的代码中。它可以很好地编译并且可以正常运行,但不打印任何内容。这就是我编译代码的方式:

$ nvcc -arch=compute_12 test.cu


我读了类似的question,然后用cudaPrintfInit()和cudaPrintfDisplay()包围了我的内核。

if(cudaPrintfInit() != cudaSuccess)
    printf("cudaPrintfInit failed\n");

test_kernel<<<grid, block>>>(val);

if(cudaPrintfDisplay(stdout, true) != cudaSuccess)
    printf("cudaPrintfDisplay failed\n");
cudaPrintfEnd();


我的内核看起来像这样:

__global__ void test_kernel (float val){
    i = blockIdx.x*BLOCK_X + threadIdx.x;
    j = blockIdx.y*BLOCK_Y + threadIdx.y;
    if( j == 20 )
        cuPrintf("%f is value, %d is j", val, j);
}


在编译和运行时,输出为:

cudaPrintfInit failed
cudaPrintfDisplay failed


我猜我的编译方式可能有问题,还是cuPrintf不允许打印浮点数?根据类似的question的附加链接,问题在于每个块的线程数超过最大值,但是我的块大小为16 x 16(所以这不应该是问题)。 cudaPrintfInit和cudaPrintfDisplay显示失败!

我还运行了CUDA安装随附的CUDA示例代码“ simplePrintf”。那很好。救命!

最佳答案

格式化输出仅受计算能力2.x及更高版本的设备支持。

int printf(const char *format[, arg, ...]);

将格式化的输出从内核打印到主机端输出流。

参考:《 CUDA C编程指南2015》,第119页。

查看此链接:https://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialHelloWorld

关于c - cudaPrintfInit和cudaPrintfDisplay失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29028786/

10-13 06:02