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

时间:2015-01-31 22:12:42

标签: c cuda printf gpu

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

现在CUDA(2号及更高版本)支持printf我很想知道这是如何工作的?我的意思是屏幕上的GPU printf内部如何?计算能力1的限制因素是什么?

1 个答案:

答案 0 :(得分:3)

来自CUDA C Programming Guide

  

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

     

在内核启动之前,printf()的输出缓冲区设置为固定大小(请参阅关联的主机端API)。它是循环的,如果在内核执行期间产生的输出多于缓冲区中的输出,则会覆盖旧的输出。只有在执行其中一个操作时才会刷新它:

     

...

     

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

     

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

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