看cuda初級教程視頻筆記-GPU體系架構概述

GPU是一個異構的多處理器芯片,爲從圖形圖像處理優化

shader core 是個渲染器

work Distributer是個管理器

Execute shader執行單元就是一個完整的小處理器,有自己的取值譯碼單元,alu處理核心和執行上下文

CPU-style cores多了個很大數據緩存,out of order控制邏輯,分支預測,存儲器的控制單元,但是這些卻花了絕大部分的芯片面積和價錢

思路1:精簡,減肥slimming down 

Idea#1 Remove components that help single instruction stream run fast

two cores(two fragments in parallel) 這就是雙核嘛,既然兩個可以做,我們也可以做四個,十六個,同事執行十六個程序片元

16 simultaneous insturctions stream 

but many fragments should be able to share an instruction stream!指令流共享,多個程序片共享指令流

思路2:增加ALU ,SIMD ,改進的處理單元,我們就可以執行向量的操作

後來兩種合併,有128個程序片元同時執行(ALU),併發16路指令流

這樣帶來些問題,分支處理如何辦?就是ifelse語句的時候,很多語句併發執行,有true和false,所以並不是每個alu在做有效的工作

SIMD處理並不總是需要顯式的SIMD指令

stall停滯,怎麼辦,數據過來緩慢:大量的獨立片元相互切換,通過片元切換換來掩藏延遲

hiding shader stalls 分配四個任務,在一個任務停滯的時候,去幹些變得,這樣獲得較高的吞吐率,必須是獨立的工作,佔滿等待的時間

上下文存儲空間storing contexts,這個變多,變的很多,就會有好的延遲掩藏的效果

上下文切換可以軟件也可以硬件管理或者同時管理

有人就這樣設計出了這樣個處理器,有16個核,每個核有八個ALU,一共可以有128個計算單元,理論上可以同時計算128組數據

16個核就可以承載16路指令流,每一個核就有四個上下文空間,一共就可以加載64路指令流(可以調度,不是說可以同時執行)

所以整個處理器可以執行512個程序片元


NVIDIA GeForce FTX480(fermi)有兩組16SIMD的執行單元,有十五個核,分成兩組,有存儲空間

開普勒架構的GTX680

講裏面有多少核,多少cuda核什麼的,沒聽很清楚


帶寬是非常寶貴的資源,高端的gpu的計算能力非常強了已經,但是數據跟不上處理速度

gpu爲了適應這樣高的處理能力,增加了很高的帶寬,雖然對計算能力來說還是有點不足,但是比cpu高了很多

做一個簡單的矩陣運算呢,由於帶寬的限制,計算能力是低於百分之一的,但是運行時候的時間也是高於cpu的,計算是高於cpu6倍的

所以帶寬很重要,怎麼在帶寬上做工作,增加計算效率呢?

減少寬帶需求。什麼什麼的

現代gpu的儲存器層次結構,L1,L2,內存和上下文緩存(只讀)

總結下gpu是異構的衆核處理器,針對吞吐優化

高效的gpu任務具備的條件,具有成千上萬的獨立工作,儘量利用大量的ALU單元,大量的片元切換掩藏延遲。可以共享指令流,適用於SIMD處理。還有就是最好是計算密集的任務,通訊和計算開銷比例合適,不要受制於訪存帶寬






















發佈了27 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章