CUDA_存儲器模型



CUDA有本身的存儲器模型,線程在執行時將會訪問處處於多個不一樣存儲器空間中的數據。cuda應用程序開發中涉及8中存儲器,層次結果如圖所示:緩存

每個線程擁有本身的私有存儲器寄存器和局部存儲器;每個線程塊擁有一塊共享存儲器(shared_memory);最後,grid中全部的線程均可以訪問同一塊全局存儲器(global memory)。除此以外,還有兩種能夠被全部線程訪問的只讀存儲器:常數存儲器(constant memory)和紋理存儲器(Texture memory),他們分別爲不一樣的應用進行了優化。全局存儲器、常數存儲器和紋理存儲器中的值在一個內核函數執行完成後將被繼續保持,能夠被同一程序中的其餘內核函數調用。app

各種存儲器比較:函數

存儲器 位置 擁有緩存 訪問權限 變量生命週期
register GPU片內 N/A device可讀/寫 與thread相同
local_memory 板載顯存 device可讀/寫 與thread相同
shared_memory CPU片內 N/A device可讀/寫 與block相同
constant_memory 板載顯存 device可讀,host可讀/寫 可在程序中保持
texture_memory 板載顯存 device可讀,host可讀/寫 可在程序中保持
global_memory 板載顯存 device可讀/寫,host可讀/寫 可在程序中保持
host_memory host內存 host可讀/寫 可在程序中保持
pinned_memory host內存 host可讀/寫 可在程序中保持

說明性能

(1)Registershared_memory都是GPU片上的高速存儲器;優化

(2)經過mapped memory實現的zero copy功能,某些功能GPU能夠直接在kernel中訪問page-locked memory。線程

GPU執行的是一種內存的加載/存儲模型(load-storage model),即全部的操做都要在指令載入寄存器以後才能執行,所以掌握GPU的存儲器模型對於GPU代碼性能的優化具備重要意義。code

相關文章
相關標籤/搜索