cuda 6.0以後,出現了:統一記憶體,unified memory,其具有以下特性:
1 其宣告有以下兩種方式:
a 使用關鍵字managed,可選的和device,一起使用,比如:devicemanagedint ret[1000];
b 使用函式cudamallocmanaged():
int *ret;
cudamallocmanaged(&ret,1000*sizeof(int));
cudafree(ret);
2 使用上面兩種方式宣告的記憶體,能夠被cpu和gpu同時訪問,不需要顯式的在cpu和gpu之間使用cudamemcpy()在cpu和gpu之間進行記憶體傳輸
3 cuda的managed記憶體和其zero-copy memory之間的區別在於:
a zero-copy分配的是cpu中的固定頁記憶體(pinned memory in cpu system ),這種方式下,根據從**索引這個記憶體,其速度將更快或者更慢,零複製記憶體
實際上是一種特殊形式的記憶體對映,它允許你將主機記憶體直接對映到gpu記憶體空間上。
b 統一記憶體,將記憶體與執行空間分開,這樣所有的資料訪問都很快
cuda中鎖頁記憶體和零複製記憶體
鎖頁記憶體允許gpu上的dma控制器請求主機傳輸,而不需要cpu主機處理器的參與
cpu仍然可以訪問上述鎖頁記憶體,但是此記憶體是不能移動或換頁到磁碟上的
在gpu上分配的記憶體預設都是鎖頁記憶體,這只是因為gpu不支援將記憶體交換到磁碟上
在主機上分配鎖頁記憶體有以下兩種方式:
a 使用特殊的cudahostalloc函式,對用的釋放記憶體使用cudafreehost函式進行記憶體釋放
b 使用常規的malloc函式,然後將其註冊為(cudahostregister)鎖頁記憶體,註冊為鎖頁記憶體只是設定一些內部標誌位以確保記憶體不被換出,並告訴cuda驅動程式,該記憶體為鎖頁記憶體,可以直接使用而不需要使用臨時緩衝區
鎖頁記憶體分配的記憶體,也有對應的三種形式:
cudamemcpytosymbol可以將資料從host拷貝到global,cudamemcpy也是從host到》global,這種情況下二個函式有什麼區別嗎?
和各位大佬討論一下後,和大家分享一下~
cudamemcpytosymbol也有將資料從host拷貝到global的功能,以前只用過這個函式拷貝constant memory。拷貝方式的不同是由目的記憶體申請的方式決定的。申請的是device記憶體,cudamemcpytosymbol拷貝就是從host拷貝到global。申請的是constant記憶體,cudamemcpytosymbol拷貝就是從host拷貝到constant memory。
cuda中與記憶體相關的一些函式:
cudamemcpytosymbol(主要用於將資料從host拷貝到device的constant memory,但也可以用於將資料從host拷貝到device的global區)
cudamalloc分配,對應使用cudafree釋放,使用cudamemcpy在裝置和主機之間進行資料傳輸
cudahostallocwritecombined:主要是去掉一級二級快取,這樣主機寫資料的時候會很快,而主機讀取的時候極慢,所以用於就是用處主機只寫不讀
cudahostregister:是得到鎖頁記憶體的另一種方式,和cudahostalloc的區別是,cudahostregister是將現有的記憶體標記成鎖頁記憶體
cudamallocpitch(opencv中的gpumat使用的該函式對影象進行記憶體分配)
注意的是,位於同乙個block中的執行緒才能實現通訊,不同block中的執行緒不能通過共享記憶體、同步進行通訊,而應採用原子操作或主機介入。
CUDA頁鎖定記憶體(Pinned Memory)
對cuda架構而言,主機端的記憶體被分為兩種,一種是可分頁記憶體 pageable memroy 和頁鎖定記憶體 page lock或 pinned 可分頁記憶體是由作業系統api malloc 在主機上分配的,頁鎖定記憶體是由cuda函式cudahostalloc 在主機記憶體上分配的,頁鎖定記憶...
CUDA學習之零拷貝記憶體
當使用零拷貝記憶體來共享主機和裝置間的資料時,必須同步主機和裝置間的記憶體訪問,同時更改主機和裝置的零拷貝記憶體中的資料將導致不可預知的後果。有兩種常見的異構計算系統架構 整合架構和離散架構。在整合架構中,cpu和gpu整合在乙個晶元上,並且在實體地址上共享主存。在這種架構中,由於無須在pcie匯流...
NUMA 非統一記憶體訪問
之前很多人都認為ms的產品只能使用在中小企業,進不了企業級市場,ms的東西都是在pc server上來實現,無法和ibm的主機系統來pk。隨著硬體的不斷發展,pc server的優勢也漸漸體現出來了,但是很多時候使用者還是希望能夠有更強大的pc server來執行他們的系統。ibm的主機可以有數千顆...