當我們使用xptxas檢查寄存器使用,我們看到這樣的內容:CUDA不斷內存銀行
ptxas info : Used 63 registers, 244 bytes cmem[0], 51220 bytes cmem[2], 24 bytes cmem[14], 20 bytes cmem[16]
不知目前還清楚地解釋CMEM [X]的任何文件。將不變內存分成多個銀行,總共有多少家銀行,以及除0,2,14,16以外的其他銀行用於什麼?
一個側面說明,@njuffa(特別感謝你)NVIDIA的論壇先前解釋什麼是銀行0,2,14,16:
使用的常內存在不斷的節目「變量」分區(銀行1),加上編譯器生成的常量(銀行14)。
CMEM [0]:內核參數
CMEM [2]:用戶定義的常量對象 CMEM [16]
:編譯器生成的常數(其中的一些可能對應於字面在源代碼中的常量)
不客氣。我想我在NVIDIA論壇上的帖子中提到,GPU架構中恆定銀行的數量不同,銀行分配也不同。換句話說,這些是程序員不應該擔心的實現細節,因爲它們不是編程模型的一部分。使用多個銀行的一個原因是儘量減少常量內存衝突使用的可能性,特別是儘可能多地爲用戶代碼提供程序員可見的常量銀行。 – njuffa
@njuffa我認爲這應該被轉換爲答案(與上面論壇帖子中的引號一起)。 :) – harrism
@njuffa我有一個後續問題。編程指南說_執行配置的參數在實際的函數參數之前被評估,並且像函數參數一樣,目前通過共享內存傳遞給設備。我的理解是在編譯時,參數被複制到cmem [0 ],但在運行時,它們會在新塊開始之前從cmem複製到smem。那是對的嗎? –