2016-07-04 73 views
0

我有一個多線程程序,它應該在6個GPU設備上運行。 我想在每個設備上打開6個流,以便在我的程序的整個生命週期內(共36個)重複使用。我使用cudaStreamCreate()cublasCreate()cublasSetStream()來創建每個流和句柄。 我也使用GPU內存監視器來查看每個句柄的內存使用情況。但是,當我查看每個設備上的GPU內存使用情況時,它只會在第一個流創建時增長,並且在我創建的其餘流中不會改變。一個GPU設備中的多個流

據我所知,我想使用的流量沒有任何限制。 但我不明白爲什麼句柄和流的內存使用量不顯示在GPU內存使用情況。

+1

在每個設備上創建第一個流可能會初始化該設備的CUDA上下文。這將涉及顯着/明顯的內存使用量。每個設備上的附加流創建不涉及此上下文初始化,因此相比之下,額外的內存使用量很小(或爲零)。 –

回答

2

您創建的所有流都駐留在給定設備上的單個上下文中,因此在第一個流之後創建額外的流時沒有上下文相關的開銷。流本身是輕量級的,並且(主要)是主機端調度器抽象。正如你所觀察到的,它們本身並不消耗太多(如果有的話)設備內存。

相關問題