CUDA記憶體使用

2021-06-20 13:30:53 字數 859 閱讀 4806

cuda執行緒可以在執行過程中從多中記憶體空間訪問資料,分為三個層次:

1,區域性記憶體:每乙個執行緒有其私有的區域性記憶體。

2,共享記憶體:每乙個執行緒塊(thread block)有乙個共享記憶體,可以被該執行緒塊中的所有執行緒訪問。

3,全域性記憶體:所有的執行緒都能訪問。

此外還有兩個能被所有執行緒都訪問的唯讀記憶體:constant 和texture記憶體,如下圖所示:

cuda程式設計模型假設系統由乙個主機(cpu)和乙個裝置(gpu)組成,它們各自有自己的記憶體。在核的執行過程中,需要提供函式用於分配記憶體,釋放記憶體,複製裝置記憶體以及資料在主機記憶體和裝置記憶體之間的傳輸。

裝置記憶體可以以線性記憶體或者cuda陣列的方式進行分配,cuda陣列主要用於紋理獲取。

線性記憶體通常使用 cudamalloc()進行分配,用cudafree()對其釋放,主機記憶體和裝置記憶體之間的資料傳輸通過cudamemcpy()實現。

cudamallocpitch()和cudamalloc3d()分別用於二維和三維陣列的記憶體分配。

cudamemcpy2d()和cudamemcpy3d()分別用於二維和三維陣列的記憶體複製。

以向量的加法為例,在呼叫核之前,向量的值需要從主機記憶體複製到裝置記憶體,計算結束後,再將計算結果從裝置記憶體複製到主機記憶體。

// device code

__global__ void vecadd(float* a, float* b, float* c, int n)

// host code

int main()

cuda 本地記憶體使用 cuda實戰入門

cuda compute unified device architecture 是 nvidia 所推出的一種平行計算平台和平行計算 api。cuda 在平行計算上可以大顯神威,因此,我們先要找到乙個可並行的問題。乙個很簡單的可並行問題就是計算無窮級數 infinite series 圓周率 pi...

CUDA共享記憶體的使用示例

cuda共享記憶體使用示例如下 參考教材 gpu高效能程式設計cuda實戰 p54 p65 1 include 2 include 3 include 4 include 5 include 6 include 78 using namespace std 910 define imin a,b a...

CUDA記憶體簡介

暫存器 暫存器是gpu片上快取記憶體,執行單元可以以極低的延遲訪問暫存器。暫存器的基本單元式暫存器檔案,每個暫存器檔案大小為32bit。區域性儲存器對於每個執行緒,區域性儲存器也是私有的。如果暫存器被消耗完。資料將被儲存在區域性儲存器中。如果每個執行緒使用了過多的暫存器,或宣告了大型結構體或資料,或...