當PyTorch需要為壹個張量分配內存時,它會向CUDA內存管理器申請壹塊適當大小的內存。如果該內存塊已經存在於空閑池中,則會立即返回給PyTorch,並用於存儲張量。但是,如果沒有足夠的空閑內存,則CUDA內存管理器將查看哪些內存塊可以被釋放以騰出足夠的空間來滿足請求。這個過程涉及到壹些算法和策略,例如內存碎片整理、異步釋放等,因此分配不壹定會立即發生。
此外,顯存分配還受到其他因素的影響,如操作執行的順序、數據類型、張量大小等。有時候可能需要手動釋放已不再需要的變量或清理緩存以確保盡可能多地利用可用的顯存資源。