看cuda初級教程視訊筆記(周斌講的)--CUDA、GPU程式設計模型
主要內容:cpu和gpu互動模式,gpu執行緒組織模型(不停強化),gpu儲存模型,基本的程式設計問題
cpu-gpu互動
有各自的實體記憶體空間,通過PCIE匯流排互連8GB/s~16GB/s,互動開銷很大
訪存速度,之所以有訪存速度的層次劃分是在價格上和效能上的一個折中,不得不考慮到成本問題
暫存器和共享儲存單元的速度是一個時鐘週期,非常快
local memory放在視訊記憶體晶片裡的片外記憶體和global memory 在視訊記憶體裡面的,對於整個處理器來說,慢的(不懂啊)
constant memory , texture memory, instruction memory(invisible) 都在DRAM立面
GPU的執行緒組織模型
thread->block->grid(最大)執行緒的一些組合變成WARP,WARP在block裡
執行緒組織架構說明
一個Kernel具有大量執行緒,執行緒唄劃分成執行緒塊blocks,一個執行緒塊內部的執行緒共享記憶體Shared Memory可以同步‘_syncthread'
Kernel啟動一個grid,包含若干執行緒塊(使用者設定)。執行緒和執行緒塊都有唯一的標識
SM表示流動處理器,一個SM有32個cuda核
GPU執行緒對映關係
(沒聽懂,圖也看不清)
GPU記憶體和執行緒關係
一個thread有私有的local memory(還有私有的暫存器),一個block裡所有的執行緒有shared memory
整個裝置呢,有個共有的Global Memory ,共享的
主機端儲存器可以和很多裝置儲存器互動(就是多個顯示卡同時幹活)
程式設計模型
常規意義的GPU用於處理圖形影象,操作於畫素,每個畫素的操作都類似,可以應用於SIMD
SIMD也可以認為不僅是指令面上,也可以認為是資料並行分割的,就像陣列相加向量操作
SIMT單指令多執行緒
GPU版本的SIMD,大量執行緒模型獲得高度並行,執行緒切換獲得延遲隱藏,多個執行緒執行相同指令流,GPU上大量執行緒承載執行
CUDA程式設計模式:Extended C
是擴充套件的C語言,增加了一些修飾詞,關鍵詞
__device__執行位置是device,呼叫位置是device(就是顯示卡,哈哈)
__global__執行位置是device,呼叫位置是host(主機端,cpu)它定義了個Kernel函式,是入口函式,cpu上呼叫,gpu上執行,必須返回void
__host__執行位置是host,呼叫位置是host
__device__和__host__可以同時呼叫