#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 執...