我应该汇集CUDA流吗?

时间:2018-06-17 10:25:34

标签: c++ parallel-processing cuda stream pool

创建和销毁CUDA流的操作有多轻量级?例如。对于CPU线程,这些操作很重,因此它们通常会汇集CPU线程。我也可以汇集CUDA流吗?或者,每次我需要它然后销毁它时,是否快速创建流?

2 个答案:

答案 0 :(得分:1)

创建流是否快速可能无关紧要。创建它们并重新使用它们总是比不断创建和销毁它们更快。

分摊延迟是否真的很重要取决于您的应用程序,而不是其他任何东西。

答案 1 :(得分:1)

来自NVIDIA的指导是您应该合并CUDA流。这是来自马口https://github.com/pytorch/pytorch/issues/9646的评论:

  

在其中创建,保留和销毁CUDA流会产生成本。   PyTorch大师。特别是:

     
      
  • 跟踪CUDA流需要原子重新计数
  •   
  • 销毁CUDA   流(很少)会导致隐式设备同步
  •   
  •   提出了退货问题,这是对扩大流量的关注   跟踪以允许向后流,例如,很明显   最好避免隐式设备同步,因为它经常导致   意外的性能下降。
  •   
     

对于静态框架,建议的最佳实践是创建所有   工作前需要的流,并销毁它们。   此模式不适用于PyTorch,但每个   设备流池将达到类似的效果。