c++ - 在内核外使用 CUDA printf 打印设备变量

标签 c++ linux cuda

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

谢谢,埃里克

最佳答案

"When I try to use printf on pointers created using cudaMalloc, the program crashes"

如果你有这个:

int *d_data, *h_data;
cudaMalloc(&d_data, DSIZE);

你不能这样做:

printf(" %d ", *d_data);

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

你可以这样做:

h_data = (int *)malloc(DSIZE);
cudaMemcpy(h_data, d_data, DSIZE, cudaMemcpyDeviceToHost);
printf(" %d ", *h_data);

您还可以调查Unified Memory这是 CUDA 6 中的新功能,看看它是否符合您的目的。

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

关于c++ - 在内核外使用 CUDA printf 打印设备变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23473894/

相关文章:

c - 如何将元素 (cv::Point) 添加到共享数组中 - CUDA

c++ - 在多线程中添加到 vector

c++ - 多重虚拟继承和可变参数模板

并发内核启动示例 - CUDA

linux - 在 CentOS 7 (PC) 上安装 OpenCV-2.4.9

linux - 如何指定使用 bitbake/yocto 构建哪个内核

我们能否将 CUDA 或 OpenCL 的速度与 CPU 性能进行比较?

c# - C++ dll 似乎无法在 .NET 中正常工作

c++ - 有没有一种简单的方法可以使用 native C++ 代码(VS2010)和 Bamboo 执行 CI?

linux - CronTab 每 5 分钟重启一次不起作用