【发布时间】:2015-03-31 04:21:14
【问题描述】:
在早期,printf 不受支持,我们要么使用模拟器运行 CUDA 程序,要么来回复制变量并在主机端打印。
现在 CUDA(arch 2 和更高版本)支持 printf 我很想知道它是如何工作的?我的意思是 GPU printfs 在屏幕上的内部情况如何?计算能力 1 的限制因素是什么?
【问题讨论】:
-
据我所知
printf()需要 ABI。 sm_1x 设备没有 ABI,原因之一可能是设备上缺少带有通用指针的平面地址空间(sm_1x 仅支持共享、全局、常量等地址空间的地址空间特定指针)。当前设备端printf()输出到GPU 全局内存中的环形缓冲区,其内容在内核完成后传输到主机。环形缓冲区显然会溢出;据我所知,大小是用户可配置的,请查看编程指南。 -
您可以使用
cudaDeviceSetLimit (cudaLimitPrintfFifoSize, sizeInBytes)设置设备大小printf()的环形缓冲区大小。请参阅 [CUDA 运行时 API 文档](docs.nvidia.com/cuda/cuda-runtime-api/…) -
设备端
printf()的操作在section B.17. of the CUDA C Programming Guide中有详细描述