繁体   English   中英

>> printf如何在CUDA计算> = 2上工作

[英]How does printf work on CUDA compute >= 2

在早期,不支持printf ,我们要么使用仿真器运行CUDA程序,要么来回复制变量并在主机端打印。

既然CUDA(arch 2和更高版本)支持printf我急于想知道它是如何工作的? 我的意思是屏幕上内部的GPU printf如何? 计算能力1的限制因素是什么?

从《 CUDA C编程指南》中

printf将格式化的输出从内核打印到主机端输出流。

在内核启动之前,将printf()的输出缓冲区设置为固定大小(请参阅关联的主机端API)。 它是循环的,并且如果内核执行过程中产生的输出超出缓冲区的容量,则较旧的输出将被覆盖。 仅在执行以下操作之一时才刷新:

...

在内部,printf()使用共享的数据结构,因此调用printf()可能会更改线程的执行顺序。 特别是,调用printf()的线程可能比不调用printf()的线程花费更长的执行路径,并且该路径的长度取决于printf()的参数。 但是请注意,CUDA不保证线程执行顺序,除非在显式__syncthreads()障碍处,因此无法确定执行顺序是否已被printf()或硬件中的其他调度行为修改。

以下API函数获取并设置用于将printf()参数和内部元数据传输到主机的缓冲区的大小(默认值为1 MB):

  • cudaDeviceGetLimit(size_t* size,cudaLimitPrintfFifoSize)
  • cudaDeviceSetLimit(cudaLimitPrintfFifoSize, size_t size)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM