cuda程式設計 一

2021-10-07 12:24:00 字數 1495 閱讀 6048

乙個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和高並...