Cuda程式設計 之 塊 block 計算

2021-07-13 01:50:13 字數 1063 閱讀 8873

#include 

#include

#include

#include

#define n 512

__global__ void vec_block_add(int

*a, int

*b, int

*c)void rand_ints(int

*arr, int count)

}int main()

printf("%lf\n",time);

cudafree(d_a);

cudafree(d_b);

cudafree(d_c);

free(a);

free(b);

free(c);

return

0;}

程式有兩個關鍵部分:

c[blockidx.x] = a[blockidx.x] + b[blockidx.x];
vec_block_add<<<100, 1>>>(d_a, d_b, d_c);
add<<>>n表示同時呼叫n次add函式,這是實現並行的向量相加的語句。每個被並行呼叫的add函式稱之為乙個塊(block)。

塊的集合稱之為網格(grid).

每個塊可以使用索引值blockidx.x

函式並行執行的過程,相當於由gpu這個加速器使用硬體的方式進行了迴圈展開,而blockidx.x就是用來定位當前執行的是迴圈的哪個部分。通過使用blockidx.x作為索引,每個塊可以處理陣列元素中的一部分。從硬體的角度看,相當於同時有多個塊在並行執行:

塊0: c[0]=a[0]+b[0]

塊1: c[1]=a[1]+b[1]

塊2: c[2]=a[2]+b[2]

塊3: c[3]=a[3]+b[3]

….

程式中通過時間函式比較了平行計算的塊數目不同時的計算時間。

本文參考自hipercome博文,向作者致謝!

CUDA 程式設計 之平行計算思想

思想這個東西,是個人理解的問題。無論是 mpi openmp 等等平行計算的方法,都是使用多執行緒同時併發的執行。所謂併發,就是看起來一起執行罷了,在真正的單核cpu中,是在某段時間內,序列執行,通過執行緒排程來掩蓋其執行的順序。那麼cuda 程式設計中,平行計算的思想是simt,instructi...

GPU計算與CUDA程式設計

1.來自nvidia的 cuda 並行程式設計框架是 gpgpu 正規化的一種特定的實現。它提供了gpu程式設計的簡易介面,基於cuda程式設計可以構建基於gpu計算的應用程式。2.cuda 在技術上是一種異構計算環境,也就是說它利用了同時在 cpu 和 gpu 上的協調計算。cuda 架構由主機 ...

CUDA平行計算框架程式設計 矩陣相乘平行計算

當下的gpgpu general purpose gpu graphic process unit cuda compute unified device architecture 即通用計算圖形處理器。安裝過程可參考我的另一篇blog cuda軟體架構 1 開發庫 cuda library 2 執...