簡體   English   中英

我應該合並CUDA流嗎?

[英]Shall I pool CUDA streams?

用於創建和銷毀CUDA流的操作輕巧嗎? 例如,對於CPU線程,這些操作很繁瑣,因此通常會合並CPU線程。 我也可以合並CUDA流嗎? 還是在每次需要它時創建流然后銷毀它是否很快?

創建流是否快速並不重要。 一次創建並重新使用它們總是比持續創建和銷毀它們更快。

攤銷該延遲是否實際上很重要,取決於您的應用程序比什么都重要。

NVIDIA的指導原則是您應該合並CUDA流。 這是來自馬口的評論, https//github.com/pytorch/pytorch/issues/9646

在PyTorch主機中創建,保留和銷毀CUDA流會產生成本。 尤其是:

  • 跟蹤CUDA流需要原子重新計數
  • 銷毀CUDA流可能(很少)導致隱式設備同步
  • refcounting問題已引起關注,例如,為了擴展流跟蹤以允許向后流傳輸,顯然最好避免隱式設備同步,因為這通常會導致意外的性能下降。

對於靜態框架,建議的最佳實踐是先創建所有需要的流,並在工作完成后銷毀它們。 這種模式並不立即適用於PyTorch,但是每個設備的流池將實現類似的效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM