乙個grid中包含多個block
乙個block中包含多個thread
對於不同的 組織方式都有各自不同的儲存空間
每個thread---私有local memery
每個block--shared memery
對於每個裝置device 共有的global memery。
cuda中三類宣告
__global__ 定義乙個kernel函式(資料並行處理函式)
入口函式,cpu上呼叫,gpu上執行
必須返回void
__device__ gpu呼叫,gpu 執行
__host__ host呼叫,host執行
kernel 函式的呼叫方式
kernel函式定義 __global__ void function(a,b,c) {}
呼叫 function<<>>(a,b,c);
grid 一維或者多維度執行緒塊
block 一組執行緒(一維,二維或者三維)
乙個grid裡面每個block的執行緒數是一樣的
每個block中的執行緒可以:
同步synchronize
訪問共享儲存器shared memery
barrier 塊內所有執行緒等待所有執行緒完成了再執行下面操作
執行緒索引 threadidx
塊索引 blockidx
cuda 記憶體傳輸
gpu中分為兩塊記憶體:1,global memory,2, constant memory
cudamalloc() 在device端分配global memory
cudafree() 釋放儲存空間
float *m;//指向的裝置端的位址,而不是主機端位址
int size = w*h*sizeof(float);
cudamalloc((void**)&m,size)
cudafree(m)
cuda 記憶體傳輸
cudamemcpy()
使用範圍 host to host;host to device,device to host; device to device
//cudamemcpy(目的位址,源位址,大小,拷貝方向)
cudamemcpy(md,m,size,cudamemcpyhosttodevice); //主機端 copy 裝置端
cudamemcpy(m,md,size,cudamemcpydevicetohost);//裝置端 copy 主機端
cuda 一般框架三步走
為gpu記憶體分配空間(gpu上的輸入、輸出)
啟動並行kernel
將gpu上結果copy到cpu,並釋放步驟1上的分配空間
CUDA程式設計
cuda目前支援linux和windows作業系統。進行cuda開發需要依次安裝驅動 toolkit sdk三個軟體。在 安裝目錄 c src目錄下有很多的例程可以進行學習。cuda 的核心有三個重要抽象概念 執行緒組層次結構 共享儲存器 遮蔽同步 barrier synchronization 可...
cuda程式設計
參照 一 gpu與cpu的聯絡與區別 gpu上可以進行資料結構統一的運算,gpu上整合大量相對cpu邏輯計算單元簡單的計算部件,利於序列。cpu上可以邏輯計算 流程控制等複雜的過程,利於並行。總而言之,gpu是乙個 人多力量大 的部件,而cpu是乙個 單兵作戰力強 的部件。基於cpu gpu的異構計...
CUDA程式設計(一)第乙個CUDA程式
cuda compute unified device architecture 是顯示卡廠商nvidia推出的運算平台。是一種通用平行計算架構,該架構使gpu能夠解決複雜的計算問題。說白了就是我們可以使用gpu來並行完成像神經網路 影象處理演算法這些在cpu上跑起來比較吃力的程式。通過gpu和高並...