CUDA學習之零拷貝記憶體

2021-09-01 20:58:38 字數 373 閱讀 9525

當使用零拷貝記憶體來共享主機和裝置間的資料時,必須同步主機和裝置間的記憶體訪問,同時更改主機和裝置的零拷貝記憶體中的資料將導致不可預知的後果。

有兩種常見的異構計算系統架構:整合架構和離散架構。

在整合架構中,cpu和gpu整合在乙個晶元上,並且在實體地址上共享主存。在這種架構中,由於無須在pcie匯流排上備份,所以零拷貝內存在效能和可程式設計性方面可能更佳。

對於通過pcie匯流排將裝置連線到主機的離散系統而言,零拷貝記憶體只在特殊情況下有優勢。

因為對映的固定內存在主機和裝置之間是共享的,必須同步記憶體訪問來避免任何潛在的資料衝突,這種資料衝突一般是由多執行緒非同步訪問相同的記憶體而引起的。

注意不要過度使用零拷貝記憶體。由於其延遲較高,從零拷貝記憶體中讀取裝置核函式可能很慢。

CUDA記憶體拷貝

1 cudamemcpy cudamalloc 線性記憶體拷貝 1 線性記憶體拷貝 2 cudamalloc void dev a,data size 3 cudamemcpy dev a,host a,data size,cudamemcpyhosttodevice 2 cudamemcpy2d ...

CUDA記憶體拷貝

1 cudamemcpy cudamalloc 線性記憶體拷貝 1 線性記憶體拷貝 2 cudamalloc void dev a,data size 3 cudamemcpy dev a,host a,data size,cudamemcpyhosttodevice 2 cudamemcpy2d ...

CUDA學習 記憶體處理之常量記憶體(4)

常量記憶體,顧名思義,它是唯讀記憶體。這種型別的記憶體要麼是在編譯時宣告為唯讀記憶體,要麼是在執行時通過主機端定義為唯讀記憶體。常量只是從gpu記憶體的角度而言。在編譯時宣告一塊常量記憶體,需要用到const關鍵字。常量記憶體其實只是全域性記憶體的一種虛擬位址形式,並沒有特殊保留的常量記憶體塊。常量...