CUDA基本知識 (不斷更新)

2021-08-18 10:18:42 字數 1417 閱讀 5227

cpu和gpu是一種異構結構。包括多個多核cpu和gpu。gpu是cpu的協處理器。gpu通過pcie匯流排與機遇cpu的主機相連線來操作。

因此成為cpu是主機端,gpu是裝置端。

cuda是一種通用得平行計算平台和程式設計模型;

其分為記憶體層次架構和執行緒層次結構。核心與主機是非同步的;

主機**:是在cpu上面執行的,主要的工作就是裝置端的環境、**和資料。

裝置**:gpu上執行,提高並行資料的執行速度。

一些指標:

gpu容量特徵:cuda核心數量、記憶體大小。

gpu效能:峰值計算效能、記憶體寬頻

cpu和gpu的優勢:

cpu適合計算處理控制密集型的任務;

gpu適合處理包含資料並行的計算密集的任務;

*global:告訴編譯器這個函式將會從cpu中呼叫,在gpu上執行。*

<<>>: 啟動裝置上的grid個塊,每個塊block個執行緒。

__device__:僅在裝置端呼叫

__host__:僅在主機中呼叫**

api函式:

cudadevicereset():顯示釋放和清空當前程序中與裝置有關的資源;

cudamalloc():

cudamemcpy(): cudamemcpyhosttohost 等標誌位函式;致使主機阻塞

cudamemset() cudamemfree()

cudageterrorstring() :將錯誤**轉換成為可讀資訊

cudadevicesynchronize():強制主機並行所有核函式執行

一些基本操作:

nvcc -arch sm_20 hello.cu -o hello

-arch sm_20 是編譯器為fermi架構生成裝置**

gpu記憶體:

全域性記憶體和共享記憶體

資料在全域性記憶體中線性儲存的可以用blockidx.x和threadidx.x來進行操作。

gpu執行緒管理:

乙個核心啟動所產生的所有執行緒統稱為乙個網路;

所有的網路中的所有執行緒共享相同的全域性記憶體空間;

同乙個執行緒塊協同合作通過:同步、共享記憶體 不同塊內的執行緒不能協作;

執行緒依靠blockidx和threadidx來區分

blockdim 執行緒快維度,每個執行緒塊的執行緒數

griddim執行緒格維度,每個維度格中的執行緒數

核計時:

1、cpu計時 利用gettimeofday 系統呼叫來確定

2、nvprof 工具計時

優化需要知道的幾點:

1、改變執行配置對核心效能有影響;

2、傳統的核函式實現一般不能獲得最佳效能;

3、對於給定的核函式,嘗試不同的網格和執行緒塊大小可以獲得更好的效能;

備用小知識 不斷更新

1.延時函式 nsthread sleepfortimeinterval 3 self performselector selector machineballaction withobject nil afterdelay 0 你一定要在dealloc方法中release這個array,顯然易見,...

libuv 不斷更新

initialize the uv async t handle.a null callback is allowed.note that uv async init unlike other libuv functions,immediately starts the handle.to stop...

小知識彙總 不斷更新中

目錄 1.在應用中拖拽檢視新增彈簧效果!2.storyboard開發中退出登入的操作 3.一步移除控制器的所有子檢視 4.自定義cell 5.給tableview的最下面與手機最底端增加乙個間距 詳情1.在應用中拖拽檢視新增彈簧效果!如圖 2.storyboard開發中退出登入的操作 2.1 直接找...