cudaPrintfInit 和 cudaPrintfDisplay 失败
cudaPrintfInit and cudaPrintfDisplay failed
我正在使用 GeForce 210、计算能力 1.2 和 CUDA 6.5。
我希望从我的 CUDA 内核中打印浮点值,我在我的项目目录中包含了 "cuPrintf.cu" 和 "cuPrintf.cuh",并将它们包含在我的代码中。它编译得很好并且 运行s 没有错误,但是什么都不打印。这就是我编译代码的方式:
$ 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);
}
在编译和 运行ning 时,输出是:
cudaPrintfInit failed
cudaPrintfDisplay failed
我猜可能是我编译的方式有问题,或者cuPrintf不允许打印float?根据类似 question 的附件 link,问题是每个块的线程数超过了最大值,但我的块大小是 16 x 16(所以这应该不是问题)。 cudaPrintfInit 和 cudaPrintfDisplay 显示失败!
我还有 运行 CUDA 安装附带的 CUDA 示例代码 "simplePrintf"。这非常有效。求助!
只有计算能力为 2.x 及更高的设备才支持格式化输出。
int printf(const char *format[, arg, ...]);
将格式化的输出从内核打印到主机端输出流。
参考:CUDA C 编程指南 2015,第 119 页。
看到这个link:https://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialHelloWorld
我可以通过 运行 'cuda-memcheck' 解决问题。 cudaPrintf 不工作,因为 'nan' 值正在内核中生成。某些计算中的分母变为零,当我避免这些情况时,cudaPrintfInit 和 cudaPrintfDisplay 开始工作。
我正在使用 GeForce 210、计算能力 1.2 和 CUDA 6.5。
我希望从我的 CUDA 内核中打印浮点值,我在我的项目目录中包含了 "cuPrintf.cu" 和 "cuPrintf.cuh",并将它们包含在我的代码中。它编译得很好并且 运行s 没有错误,但是什么都不打印。这就是我编译代码的方式:
$ 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);
}
在编译和 运行ning 时,输出是:
cudaPrintfInit failed
cudaPrintfDisplay failed
我猜可能是我编译的方式有问题,或者cuPrintf不允许打印float?根据类似 question 的附件 link,问题是每个块的线程数超过了最大值,但我的块大小是 16 x 16(所以这应该不是问题)。 cudaPrintfInit 和 cudaPrintfDisplay 显示失败!
我还有 运行 CUDA 安装附带的 CUDA 示例代码 "simplePrintf"。这非常有效。求助!
只有计算能力为 2.x 及更高的设备才支持格式化输出。
int printf(const char *format[, arg, ...]);
将格式化的输出从内核打印到主机端输出流。
参考:CUDA C 编程指南 2015,第 119 页。
看到这个link:https://code.google.com/p/stanford-cs193g-sp2010/wiki/TutorialHelloWorld
我可以通过 运行 'cuda-memcheck' 解决问题。 cudaPrintf 不工作,因为 'nan' 值正在内核中生成。某些计算中的分母变为零,当我避免这些情况时,cudaPrintfInit 和 cudaPrintfDisplay 开始工作。