CUDA程式設計學習(三)

2021-10-25 19:50:40 字數 1473 閱讀 5142

乙個kernel所啟動的所有執行緒稱為乙個網格(grid)。

同乙個網格上的執行緒共享相同的全域性記憶體空間,grid是執行緒結構的第一層次。

網格又可以分成很多執行緒塊(block),乙個執行緒塊裡包含很多執行緒,這是第二個層次。

wrap:32個執行緒一組,這是第三個層次。

kernel在呼叫時必須通過執行配置<<>>來指定kernel所使用的執行緒數和結構。

乙個執行緒需要兩個內建的座標變數(blockidx,threadidx)來唯一標識。他們都是dim3型別的變數。其中blockidx指明執行緒在grid上的位置,而threadidx指明執行緒在block上的位置。

threadidx包含三個值:threadidx.x , threadidx.y , threadidx.z.

邏輯順序:x>y>z (x先變)

dim3 grid(3,2);

dim3 block(5,3)

即塊:(0,0) (1,0) (2,0) (0,1) (1,1) (2,1)

執行緒:(0,0) (1,0) (2,0) (3,0) (4,0) (0,1) (1,1) (2,1) (3,1) (4,1) …(如上圖)

gpu記憶體型別:

每個執行緒都有自己的私有本地記憶體(local memory);

每個執行緒塊有包含共享記憶體(shared memory),可以被執行緒塊中所有執行緒共享,其生命週期與執行緒塊一致;

所有的執行緒都可以訪問全域性記憶體(global memory);

訪問一些唯讀記憶體塊:常量記憶體(constant memory)和紋理記憶體(texture memory);

記憶體的使用

1.cpu 和gpu 記憶體都需要使用

2.先將資料放在cpu上,然後拷貝至gpu

3.在gpu中運算,得結果後,再將結果拷貝至cpu。

需要傳輸資料時,應用下一種方式速度較快。

使用cpu和gpu記憶體同步拷貝:(寫的操作完成才跳到後面的語句)

括號內引數(傳輸的方向,**,拷貝記憶體大小,拷貝方向);

Cuda學習筆記(三) Cuda程式設計Tips

cuda中對核心函式的呼叫 m n m表示執行緒塊的個數,n表示每個執行緒塊的執行緒數,m個執行緒塊構成乙個執行緒格。m和n可以是一維的或者二維 三維 的,即使n是一維的,那麼m也可以是二維的。共享記憶體對於每個執行緒塊建立乙個副本,但是共享記憶體對於所有的執行緒塊中的執行緒都是相同的。執行緒同步語...

CUDA程式設計 三 執行緒模型

首先要搞清楚的就是執行緒網格 grid 執行緒塊 block 和執行緒 thread 之間的關係.在前面的文章裡面就已經看到了核函式kernel 但是並不知道這個核函式啟動的背後的一些原理,接下來就結合這幅圖來說一說基礎的東西.圖中有乙個執行緒網格,網格中有2 3 6個執行緒塊,而每乙個執行緒塊裡面...

cuda程式設計系列 核心呼叫(三)

1 核心呼叫介紹 使用ansi c 和cuda擴充套件關鍵字編寫的 稱為核心,該 是執行在gpu上面,通過cpu 通過核心呼叫的方式來啟動。也就是說,核心呼叫即cpu 啟動gpu 核心呼叫通常會生成大量的塊 block 和執行緒 thread 來在gpu上並行處理資料。核心 類似普通的c函式,不同的...