CUDA加速學習

2021-10-23 06:14:45 字數 1697 閱讀 9496

今天學習了一下nvidia官方教程第一課

cuda 提供了一種可擴充套件 c、c++、python 和 fortran 等語言的編碼正規化

我對 cuda理解,cuda就像是c的超集一樣,提供了對gpu的操作,我目前覺得cuda沒有太多物件導向的東西,更多的是面向過程的**

cpu上的**稱為主機**,而在gpu上的**稱為裝置**,gpu就可以理解成一種外設一樣,專門用來處理一些計算

在呼叫gpu後,需要在cpu上加同步鎖等待gpu執行完成(cpu給gpu傳送一條指令,gpu就去算去了,等完了再返回給cpu,感覺就像是io裝置一樣)

cuda 為許多常用程式語言提供擴充套件,在此文以c++為例

.cu是 cuda 加速程式的副檔名

void cpufunction()

__global__ void gpufunction()

int main()

gpufunction<<<1, 1>>>();cuda的函式在呼叫 的時候需要指定執行緒塊數和執行緒數,這個地方我按照程序和執行緒理解的,前面乙個引數定義程序數,後面乙個定義每個程序有多少個執行緒,這就是cuda並行原理

cudadevicesynchronize();

為同步鎖,cpu等待gpu運算完成

nvcc -arch=sm_70 -o out some-cuda.cu -run

nvcc類似於gcc,一種編譯器,需要指定架構,我估摸著guda針對不同架構做了不同的優化,-o輸出檔案

blockdim.x和threaddim.x為執行緒塊數和每個執行緒塊內線程數 ,可以模擬程序與執行緒

乙個經典的cuda並行程式,每個執行緒只處理

threadidx.x + blockidx.x * blockdim.x及+stride的索引

stride = griddim.x * blockdim.x;

cuda的記憶體分配和釋放使用

cudamallocmanaged,cudafree,可以模擬於malloc和free 

cudagetlasterror(),對於一些沒有返回值的函式,當使用者想知道該函式處理過程中是否出錯就用該介面獲取狀態

cudaerror_t err;

err = cudamallocmanaged(&a, n) 

常用的err狀態

最後看乙個cuda加法樣例吧~

#include #include inline cudaerror_t checkcuda(cudaerror_t result)

return result;

}void initwith(float num, float *a, int n)

}__global__

void addvectorsinto(float *result, float *a, float *b, int n)

}void checkelementsare(float target, float *array, int n)

} printf("success! all values added correctly.\n");

}int main()

筆記 CUDA加速

cuda 由nvidia推出的通用平行計算架構 該架構使gpu能夠解決複雜的計算問題 包含了cuda指令集架構 isa 以及gpu內部的平行計算引擎 開發人員現在可以使用c語言來為cuda架構編寫程式,將來還會支援其它語言,包括fortran以及c 在科學計算領域所要用到的計算往往不是我們熟知的普通...

CUDA卷積加速 一

推出這個系列的目的呢,主要是因為cuda學習的乙個主要用途就是對影象處理進行加速,而處理影象的過程中經常要用到卷積。卷積的計算有多種形式,本系列主要研究的是二維矩陣的卷積計算。從最原始的計算方法 就是本科教科書上的那種 再到優化後的適用於大型資料的演算法,均提供並行化的設計思路。考慮到機器學習很火,...

kinectbridge啟用cuda加速

如果不啟用cuda,跑程式的時候,kinect2影象的接收頻率總是會突然降為0,連線斷開 1 安裝對應版本的cuda 2 在對lib 2進行build的時候,新增這麼一步操作,cmake denable cxx11 on dcuda propagate host flags off 3 在安裝iai...