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。區域性儲存器對於每個執行緒,區域性儲存器也是私有的。如果暫存器被消耗完。資料將被儲存在區域性儲存器中。如果每個執行緒使用了過多的暫存器,或宣告了大型結構體或資料,或...