CUDA學習筆記之 CUDA儲存器模型

2021-05-23 20:39:39 字數 2447 閱讀 8231

gpu片內:register,shared memory; 板載視訊記憶體:local memory,constant memory, texture memory, texture memory,global memory; host 記憶體: host memory, pinned memory.

cuda儲存器模型:

gpu片內:register,shared memory;

板載視訊記憶體:local memory,constant memory, texture memory, texture memory,global memory;

host 記憶體: host memory, pinned memory.

register: 訪問延遲極低;

基本單元:register file (32bit/each)

計算能力1.0/1.1版本硬體:8192/sm;

計算能力1.2/1.3版本硬體: 16384/sm;

每個執行緒占有的register有限,程式設計時不要為其分配過多私有變數;

local memory:暫存器被使用完畢,資料將被儲存在區域性儲存器中;

大型結構體或者陣列;

無法確定大小的陣列;

執行緒的輸入和中間變數;

定義執行緒私有陣列的同時進行初始化的陣列被分配在暫存器中;

shared memory:訪問速度與暫存器相似;

實現執行緒間通訊的延遲最小;

儲存公用的計數器或者block的公用結果;

硬體1.0~1.3中,16kbyte/sm,被組織為16個bank;

宣告關鍵字 _shared_  int sdata_static[16];

global memory:存在於視訊記憶體中,也稱為線性記憶體(視訊記憶體可以被定義為線性儲存器或者cuda陣列);

cudamalloc()函式分配,cudafree()函式釋放,cudamemcpy()進行主機端與裝置端的資料傳輸;

初始化共享儲存器需要呼叫cudamemset();

二維三維陣列:cudamallocpitch()和cudamalloc3d()分配線性儲存空間,可以確保分配滿足對齊要求;

cudamemcpy2d(),cudamemcpy3d()與裝置端儲存器進行拷貝;

host記憶體:分為pageable memory 和 pinned memory

pageable memory: 通過作業系統api(malloc(),new())分配的儲存器空間;、

pinned memory:始終存在於物理記憶體中,不會被分配到低速的虛擬記憶體中,能夠通過dma加速與裝置端進行通訊;

cudahostalloc(), cudafreehost()來分配和釋放pinned memory;

使用pinned memory優點:主機端-裝置端的資料傳輸頻寬高;

某些裝置上可以通過zero-copy功能對映到裝置位址空間,從gpu直接訪問,省掉主存與視訊記憶體間進行資料拷貝的工作;

pinned memory 不可以分配過多:導致作業系統用於分頁的物理記憶體變, 導致系統整體效能下降;通常由哪個cpu執行緒分配,就只有這個執行緒才有訪問許可權;

cuda2.3版本中,pinned memory功能擴充:

portable memory:讓控制不同gpu的主機端線程操作同一塊portable memory,實現cpu執行緒間通訊;使用cudahostalloc()分配頁鎖定記憶體時,加上cudahostallocportable標誌;

write-combined memory:提高從cpu向gpu單向傳輸資料的速度;不使用cpu的l1,l2 cache對一塊pinned memory中的資料進行緩衝,將cache資源留給其他程式使用;在pci-e匯流排傳輸期間不會被來自cpu的監視打斷;在呼叫cudahostalloc()時加上cudahostallocwritecombined標誌;cpu從這種儲存器上讀取的速度很低;

constant memory:唯讀位址空間;位於視訊記憶體,有快取加速;64kb;用於儲存需要頻繁訪問的唯讀引數 ;唯讀;使用_constant_ 關鍵字,定義在所有函式之外;兩種常數儲存器的使用方法:直接在定義時初始化常數儲存器;定義乙個constant陣列,然後使用函式進行賦值;

texture memory:唯讀;不是一塊專門的儲存器,而是牽涉到視訊記憶體、兩級紋理快取、紋理拾取單元的紋理流水線;資料常以一維、二維或者三維陣列的形式儲存在視訊記憶體中;快取加速;可以宣告大小比常數儲存器大得多;適合實現影象樹立和查詢表;對大量資料的隨機訪問或非對齊訪問有良好的加速效果;在kernel中訪問紋理儲存器的操作成為紋理拾取(texture fetching);紋理拾取使用的座標與資料在視訊記憶體中的位置可以不同,通過紋理參照系約定二者的對映方式;將視訊記憶體中的資料與紋理參照系關聯的操作,稱為將資料與紋理繫結(texture binding);視訊記憶體中可以繫結到紋理的資料有:普通線性儲存器和cuda陣列;存在快取機制;可以設定濾波模式,定址模式等;

摘自:http://cuda.csdn.net/news.aspx?id=88ee54d0-add5-464b-8d64-f5c8a47855e3

CUDA學習筆記之 CUDA儲存器模型

標籤 cuda 儲存binding cache 程式設計api 2010 01 03 20 32 5577人閱讀收藏 舉報 cuda 6 cuda儲存器模型 gpu片內 register,shared memory 板載視訊記憶體 local memory,constant memory,textu...

CUDA學習筆記之 CUDA儲存器模型

標籤 cuda 儲存binding cache 程式設計api 2010 12 14 01 33 1223人閱讀收藏 舉報 cuda 26 gpu片內 register,shared memory 板載視訊記憶體 local memory,constant memory,texture memory...

cuda學習筆記(一)儲存

1.乙個gpu 上有很多的sm stream multiprocessor 每個 sm中包括了8個 sp stream processor 標量流處理器,商業宣傳中所說的數百個 核 大多指的是 sp的數量。隸屬於同乙個sm的 sp共用同一套取指與發射單元。cuda 中的kernel 是以block ...