创建和销毁CUDA流的操作有多轻量级?例如。对于CPU线程,这些操作很重,因此它们通常会汇集CPU线程。我也可以汇集CUDA流吗?或者,每次我需要它然后销毁它时,是否快速创建流?
答案 0 :(得分:1)
创建流是否快速可能无关紧要。创建它们并重新使用它们总是比不断创建和销毁它们更快。
分摊延迟是否真的很重要取决于您的应用程序,而不是其他任何东西。
答案 1 :(得分:1)
来自NVIDIA的指导是您应该合并CUDA流。这是来自马口https://github.com/pytorch/pytorch/issues/9646的评论:
在其中创建,保留和销毁CUDA流会产生成本。 PyTorch大师。特别是:
- 跟踪CUDA流需要原子重新计数
- 销毁CUDA 流(很少)会导致隐式设备同步
- 提出了退货问题,这是对扩大流量的关注 跟踪以允许向后流,例如,很明显 最好避免隐式设备同步,因为它经常导致 意外的性能下降。
对于静态框架,建议的最佳实践是创建所有 工作前需要的流,并销毁它们。 此模式不适用于PyTorch,但每个 设备流池将达到类似的效果。