1. 程式人生 > >GPU程式設計入門(二)

GPU程式設計入門(二)

  • 執行緒協作
    對於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
    ,代表grid每一維的block數量。其中,gridDim.x是2D的,blockDim.x是3D的。這種三維索引好像適合計算影象畫素之間的運算)
    grid 和block通過dim3類定義,dim3可以看成包含3個無符號整數(x, y, z)的結構體變數,在定義是預設值初始化為1。
    1. 瞭解硬體架構
      通過上述簡單概念對GPU和CUDA有一個簡單的認識之後,需要了解GPU的硬體架構,如果需要設計一個高效能的並行程式,必然要對GPU的計算過程有一個詳細的瞭解。用圖說話
      引https://www.cnblogs.com/1024incn/p/4539754.html
      引https://www.cnblogs.com/skyfsm/p/9673960.html
      SP是GPU的基本處理單元,kernel啟動後,thread即被分配到SP上。負責執行執行緒上的程式。
      SM:多處理器,包含SP以及其他一些硬體結構(如:register, local memory(thread私有的), shared memory(block,global memory(共享,都可訪問))等
    2. 程式設計模型
      SIMD(Single Instruction Multiple Data), 針對GPU—SIMT(Single Instruction Multiple Thread)
      程式設計模式:使用擴充套件的C語言,多了一些關鍵詞,內建的變數,一些API函式,函式呼叫形式等
      CUDA函式宣告: