主要內容: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__可以同時調用