在内核外部使用CUDA printf来打印设备变量

Eri*_*cyk 3 c++ linux cuda

在内核之外的CUDA中打印设备变量的最佳方法是什么?我是否必须对cudaMemcpy主机执行操作然后打印结果值?当我尝试使用printf创建的指针时cudaMalloc,程序崩溃了.似乎大多数注意力都集中在内核中的打印上,而不是常规代码中.

谢谢,埃里克

Rob*_*lla 6

"当我尝试在使用cudaMalloc创建的指针上使用printf时,程序崩溃了"

如果你有这个:

int *d_data, *h_data;
cudaMalloc(&d_data, DSIZE);
Run Code Online (Sandbox Code Playgroud)

你不能做这个:

printf(" %d ", *d_data);
Run Code Online (Sandbox Code Playgroud)

因为这需要d_data在主机代码中取消引用设备指针(),这在CUDA中通常是非法的.

相反,你可以这样做:

h_data = (int *)malloc(DSIZE);
cudaMemcpy(h_data, d_data, DSIZE, cudaMemcpyDeviceToHost);
printf(" %d ", *h_data);
Run Code Online (Sandbox Code Playgroud)

您还可以调查CUDA 6中新增的统一内存,并查看它是否可以满足您的需求.

并且,如评论中所述,printf内核支持cc2.0或更高版本的设备,该内核仅对设备数据进行操作(仅限).