CUDA C語言
前一節,我已經說了怎樣在ubuntu linux上構建CUDA開發環境了,對一個語言來說,最簡單的,也是用得最多的當然是它的語法了,下面我簡單的介紹一下CUDA的語法。
CUDA C不是C語言,而是對C語言進行擴充套件。CUDA對C的擴充套件主要包括以下四個方面:
函式型別限定符,用來確定函式是在CPU還是在GPU上執行,以及這個函式是從CPU呼叫還是從GPU呼叫。
__device__,__device__表示從GPU上呼叫,在GPU上執行;
__global__,__global__表示在CPU上呼叫,在GPU上執行,也就是所謂的核心(kernel)函式;核心主要用來執行多執行緒呼叫。
__host__,__host__表明在CPU上呼叫,在CPU上執行,這是預設時的情況,也就是傳統的C函式。CUDA支援__host__和__device__的聯用,表示同時為主機和裝置編譯。此時這個函式不能出現多執行緒語句。
變數型別限定符,用來規定變數儲存什麼位置上。在傳統的CPU程式上,這個任務由編譯器承擔。在CUDA中,不僅要使用主機端的記憶體,還要使用裝置端的視訊記憶體和GPU片上的暫存器、共享儲存器和快取。在CUDA儲存器模型中,一共抽象出來了8種不同的儲存器。複雜的儲存器模型使得必須要使用限定符要說明變數的儲存位置。
__device__,__device__表明宣告的資料存放在視訊記憶體中,所有的執行緒都可以訪問,而且主機也可以通過執行時庫訪問;
__shared__,__shared__表示資料存放在共享儲存器在,只有在所在的塊內的執行緒可以訪問,其它塊內的執行緒不能訪問;
__constant__,__constant__表明資料存放在常量儲存器中,可以被所有的執行緒訪問,也可以被主機通過執行時庫訪問;
texture,texture表明其繫結的資料可以被紋理快取加速存取,其實資料本身的存放位置並沒有改變,紋理是來源於圖形學的一介概念,CUDA使用它的原因一部分在於支援圖形處理,另一方面也可以利用它的一些特殊功能。
如果在GPU上執行的函式內部的變數沒有限定符,那表示它存放在暫存器或者本地儲存器中,在暫存器中的資料只歸執行緒所有,其它執行緒不可見。
如果SM的暫存器用完,那麼編譯器就會將本應放到暫存器中的變數放到本地儲存器中。
執行配置運算子<<<
>>>,用來傳遞核心函式的執行引數。執行配置有四個引數,第一個引數宣告網格的大小,第二個引數宣告塊的大小,第三個引數宣告動態分配的共享儲存器大小,預設為0,最後一個引數宣告執行的流,預設為0。
五個內建變數,用於在執行時獲得網格和塊的尺寸及執行緒索引等資訊
gridDim, gridDim是一個包含三個元素x,y,z的結構體,分別表示網格在x,y,z三個方向上的尺寸,雖然其有三維,但是目前只能使用二維;
blockDim, blockDim也是一個包含三個元素x,y,z的結構體,分別表示塊在x,y,z三個方向上的尺寸,對應於執行配置中的第一個引數,對應於執行配置的第二個引數;
blockIdx, blockIdx也是一個包含三個元素x,y,z的結構體,分別表示當前執行緒所在塊在網格中x,y,z三個方向上的索引;
threadIdx, threadIdx也是一個包含三個元素x,y,z的結構體,分別表示當前執行緒在其所在塊中x,y,z三個方向上的索引;
warpSize,warpSize表明warp的尺寸,在計算能力為1.0的裝置中,這個值是24,在1.0以上的裝置中,這個值是32。
其它的還有數學函式,原子函式,紋理讀取、繫結函式,內建柵欄,記憶體fence函式等。一般而言,知道這些就應該能夠寫出CUDA程式了,當然要寫好的話,必須知道很多其它的細節。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23057064/viewspace-624774/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C語言 C語言野指標C語言指標
- C語言---“C語言 誰與爭鋒?”C語言
- C語言C語言
- 聊聊C語言/C++—程式和程式語言C語言C++
- C語言字串C語言字串
- C語言: returnC語言
- C語言(一)C語言
- C語言概述C語言
- c語言 %pC語言
- 字串(C語言)字串C語言
- C語言程式C語言
- C語言 typedefC語言
- C語言的本質(32)——C語言與彙編之C語言內聯彙編C語言
- C語言函式手冊:c語言庫函式大全|C語言標準函式庫|c語言常用函式查詢C語言函式
- C語言與嵌入式C語言的區別C語言
- C語言學習方法,怎麼學習C語言?C語言
- go語言與c語言的相互呼叫GoC語言
- C語言魔塔遊戲C語言遊戲
- C語言:extern用法C語言
- C語言 截圖C語言
- C語言陣列C語言陣列
- c語言_遞迴C語言遞迴
- c語言筆記C語言筆記
- 初識C語言C語言
- C語言基礎C語言
- C語言位操作C語言
- c語言入門C語言
- C語言初學C語言
- C語言運算子C語言
- C語言版本迭代C語言
- C語言(指標)C語言指標
- C語言extern用法C語言
- C語言的HelloWorldC語言
- 向C語言致敬C語言
- C語言拾遺C語言
- C語言 - 字串拼接C語言字串
- c語言複習C語言
- C語言加強C語言