CUDA基礎(1) 操作流程與kernel概念

2022-09-04 00:42:11 字數 1038 閱讀 8906

cuda是nvidia發布的平行計算框架,gpu的工作早已不侷限於處理圖形影象,它所包含的大量的計算單元用來執行那些計算量大但可以並行處理的任務。

cuda的操作概括來說包含5個步驟:

1.cpu在gpu上分配記憶體:cudamalloc;

2.cpu把資料傳送到gpu:cudamemcpy;

3.cpu在gpu上啟動核心(kernel),它是自己寫的一段程式,在每個執行緒上執行;

4.cpu把資料從gpu取回:cudamemcpy;

5.cpu釋放gpu上的記憶體。

其中關鍵是第3步,能否寫出合適的kernel,決定了能否正確解決問題和能否高效的解決問題。

cuda對執行緒做了合適的規劃,引入了gridblock的概念,block由執行緒組成,grid由block組成,一般說blocksize指乙個block放了多少thread;gridsize指乙個grid放了多少個block。

乙個kernel結構如下:kernel<<>>(param1, param2, ...)

-dg:grid的尺寸,說明乙個grid含有多少個block,為dim3型別,乙個grid最多含有65535*65535*65535個block,dg.x,dg.y,dg.z最大值為65535;

-db:block的尺寸,說明乙個block含有多上個thread,為dim3型別,乙個block最多含有1024(cuda2.x版本)個threads,db.x和db.y最大值為1024,db.z最大值64;

(舉個例子,乙個block的尺寸可以是:1024*1*1 | 256*2*2 | 1*1024*1 | 2*8*64 | 4*4*64等)

-ns:可選引數,如果kernel中由動態分配記憶體的shared memory,需要在此指定大小,以位元組為單位;

-s:可選引數,表示該kernel處在哪個流當中。

可參見:

關於cuda版本資訊:

blocksize大小:

gridsize大小:

CUDA總結1 OpenCV與CUDA簡介

因為演算法的需要,正常的cpu演算法速度不夠需要進行加速,opencv中正好加入了gpu計算的模組,opencv中有兩種gpu的加速方式,一種是通用標準的opencl,另一種是nvidia的cuda加速。opencl是蘋果公司提出的一種通用標準,多種平台支援的標準。cuda是nvidia提出的平行計...

cuda與opengl互操作之VBO

opengl的緩衝區可以對映到cuda的位址空間,當做global memory被訪問。這樣做可以使計算得到的資料直接視覺化,提公升速度。因為資料儲存在裝置端,沒有裝置端到主機端的傳輸耗費,不論計算還是可是化都相當的快。具體使用步驟 1 建立vbo glgenbuffers 1,vbo glbind...

Django基礎(1 架構流程與目錄)

django 是 python 做 web 開發的乙個很著名的框架,很多大型 比如豆瓣 youtube 都用它開發,下面就來介紹一下 django 的架構原理 1.mvt設計模式m models 資料模型,直接對映到資料庫 v views 功能檢視,編寫你的業務功能 t templates 頁面模板...