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 直接找...