在内核之外的CUDA中打印设备变量的最佳方法是什么?我是否必须对cudaMemcpy
主机执行操作然后打印结果值?当我尝试使用printf
创建的指针时cudaMalloc
,程序崩溃了.似乎大多数注意力都集中在内核中的打印上,而不是常规代码中.
谢谢,埃里克
"当我尝试在使用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或更高版本的设备,该内核仅对设备数据进行操作(仅限).