Intro to Parallel Programming CUDA-第一单元
一、GPU典型工作流程:
1.CPU在GPU上分配存儲
2.CPU把某個輸入數據從CPU復制到GPU上
3.CPU調用某些內核來監視這些在GPU上處理這個數據的內核
4.CPU把結果從GPU復制回CPU
二、Kernel<<<grid of blocks,block of threads>>>(……)
核函數是GPU每個thread上運行的程序。必須通過__gloabl__函數類型限定符定義。形式如下:
? ? ? ? ? ? ? ? __global__ void kernel(param list){ ?}
核函數只能在主機端調用,調用時必須申明執行參數。調用形式如下:
? ? ? ? ? ? ? ??Kernel<<<Dg,Db, Ns, S>>>(param list);
<<<>>>運算符內是核函數的執行參數,告訴編譯器運行時如何啟動核函數,用于說明內核函數中的線程數量,以及線程是如何組織的。
<<<>>>運算符對kernel函數完整的執行配置參數形式是<<<Dg, Db, Ns, S>>>
- 參數Dg用于定義整個grid的維度和尺寸,即一個grid有多少個block。為dim3類型。Dim3 Dg(Dg.x, Dg.y, 1)表示grid中每行有Dg.x個block,每列有Dg.y個block,第三維恒為1(目前一個核函數只有一個grid)。整個grid中共有Dg.x*Dg.y個block,其中Dg.x和Dg.y最大值為65535。
- 參數Db用于定義一個block的維度和尺寸,即一個block有多少個thread。為dim3類型。Dim3 Db(Db.x, Db.y, Db.z)表示整個block中每行有Db.x個thread,每列有Db.y個thread,高度為Db.z。Db.x和Db.y最大值為512,Db.z最大值為62。 一個block中共有Db.x*Db.y*Db.z個thread。計算能力為1.0,1.1的硬件該乘積的最大值為768,計算能力為1.2,1.3的硬件支持的最大值為1024。
- 參數Ns是一個可選參數,用于設置每個block除了靜態分配的shared Memory以外,最多能動態分配的shared memory大小,單位為byte。不需要動態分配時該值為0或省略不寫。
- 參數S是一個cudaStream_t類型的可選參數,初始值為零,表示該核函數處在哪個流之中。
三、如何將彩色圖像轉換成灰度圖像
人對綠色比對紅色敏感,對紅色比對藍色敏感
I=0.299f*R+0.589f*G+0.114f*B
四、映射
是一種數據與方法的關系(其實感覺就是函數)。?Map(Elements, Function)?
元素為待處理的數據集合,Function為對每個元素處理的方法。
?
總結
以上是生活随笔為你收集整理的Intro to Parallel Programming CUDA-第一单元的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PPM图片格式及其C读写代码
- 下一篇: Intro to Parallel Pr