CUDA驅動保持衆多設備的存儲器分配,包括但不限於
- 本地存儲器* MultiprocessorCount * MaxThreadsPerMultiprocessor
- 大小=(每線程+驅動程序指定的系統調用棧用戶指定LMEM大小)。
- 實施例 - 15 SM GK110
- 15多處理器
- 2048 MaxThreadsPerMultiprocessor每個線程
- 2048字節(cudaLimitStackSize)每個線程
- 512字節爲系統調用堆棧
- SIZE = 15 * 2048 *(2048 + 512)= 78643200字節
- printf的FIFO
- malloc的堆
- 常量緩衝器
- 驅動程序分配每個數據流的多個常數緩衝器。這些用於傳遞啓動配置和啓動參數,模塊常量和常量變量。 PTX手冊有關於常量緩衝區的附加信息。
- CUDA動態並行緩衝器
司機推遲這些緩衝區的創建,直到必要的。這通常意味着內存分配將在其中一個API調用中完成以啓動內核。
通過cudaDeviceSetLimit可以在一定程度上控制項目1,2和3。
第4項與分配的流數和加載的模塊數成線性增長。在每個體系結構的不同點,驅動程序將開始混疊流常量緩衝區以限制資源分配。
它總是48MB? – user3018144
我只計算了數組乘法程序的統計數據。 – user3300239
下落不明越來越大?當您使用320x320矩陣執行計算時,是否使用了總內存? – user3018144