GPU程式設計入門(二)
阿新 • • 發佈:2018-12-22
對於
kernel<<m,n>>();
,引數m和n的大小都有一定的限制(來自硬體的限制)。m即block的數量不超過65535,n即一個block中thread的數量不超過512。因此對於向量求和時,若向量長度小於512可以呼叫int tid = threadIdx.x;
對於長度小於65535的向量可以呼叫int tid = blockIdx.x
,但長度位於512–65535,也可以呼叫int tid = threadIdx.x + blockIdx.x*blockDim.x
進行計算。上面的
blockDim.x
是一個常量,表示block其中一維的執行緒數量,類似的變數還有gridDim.x
gridDim.x
是2D的,blockDim.x
是3D的。這種三維索引好像適合計算影象畫素之間的運算)grid 和block通過dim3類定義,dim3可以看成包含3個無符號整數(x, y, z)的結構體變數,在定義是預設值初始化為1。
- 瞭解硬體架構
通過上述簡單概念對GPU和CUDA有一個簡單的認識之後,需要了解GPU的硬體架構,如果需要設計一個高效能的並行程式,必然要對GPU的計算過程有一個詳細的瞭解。用圖說話
SP是GPU的基本處理單元,kernel啟動後,thread即被分配到SP上。負責執行執行緒上的程式。
SM:多處理器,包含SP以及其他一些硬體結構(如:register, local memory(thread私有的), shared memory(block,global memory(共享,都可訪問))等 - 程式設計模型
SIMD(Single Instruction Multiple Data), 針對GPU—SIMT(Single Instruction Multiple Thread)
程式設計模式:使用擴充套件的C語言,多了一些關鍵詞,內建的變數,一些API函式,函式呼叫形式等
CUDA函式宣告: