Re: [請益] Shader 是抽象層?

作者: holymars   2015-03-05 12:53:42
※ 引述《lovesnake (LoyalDog)》之銘言:
: 標題: [請益] Shader 是抽象層?
: 時間: Wed Mar 4 23:35:35 2015
:
: 看了一堆文章頭昏腦脹決定直接問了!
:
: 看Nvidia的CUDA架構……
: 每顆SP都是一樣的東西,哪來分什麼shader
: 但之前的Unified Shader又強調硬體上將
: Shader整合
: 然後看著Graphics Pipeline……
:
: 那些究竟是抽象的東西,還是硬體上真的這樣做呢?
看年代
基本上GPU硬體的發展過程,就是一個特化結構朝向通用結構發展的過程
最早最早的顯示卡(當時叫3D加速卡)
就是把整套rasterize-based graphics pipeline
用硬體整個實作出來
今天我們把這種完全固定功能,只能由API作一些參數改動的稱為fixed-pipeline
但是fixed-pipeline的功能太受限,無法應付日新月異的演算法
就把fixed-pipeline中特別需要靈活性的兩個stage->Vertex Pixel拆出來
在裡面加入類似於CPU的設計,有一組相對簡單的指令集,可以作有限編程
進入programmable pipeline的年代,開始有vertex shader和pixel shader
而這些指令集需要一種程式語言來描述,這就是所謂的shader language
早期的vertex shader和pixel shader是兩種不同的硬體
發展到後期發現同樣的運算單元在兩個地方都出現是很不經濟的
開始有硬體商思考要讓vertex shader和pixel shader共用硬體
最早是ATI用在遊戲主機上,這就是stream processer的開始
從這個年代硬體就朝向General-purpose GPU (GPGPU)的方向發展
所以也有了CUDA之類的東西出現
簡單的說 fixed -> programmable -> general purpose這是一個歷史進程
但是回到硬體層設計說,有些東西是沒辦法programmable的
越靈活的運算單位,所需要的電晶體就越高
一顆CPU核心和一顆SP核心,die size可能差個幾十倍
因為CPU裡面有很深的pipeline(不是graphics pipeline的那個pipiline)
有branch-prediction,有很大塊的register和cache
相對的來說就是編程靈活度和異核協調性是完全不同的
總而言之GPU設計就是一個在靈活和效率中間找尋新的平衡點的過程
: 呃…
: 換個問法…… 像是resterizer,他是硬體直接做還是透過GPU General 的 IS拼出來的呢
: ?
目前的resterizer都是硬體實作
類似的情況還有texel unit / blending unit
這些都是作成fixed比作成programmable有更小的die size
靈活度某種程度上是必要犧牲
當然隨著年代推進,programmable blending也越來越重要
所以下一代的硬體也都有這功能了
: 我的抽象層是指這個……
:
: 其他像是VS FS GS TS 等等,是有專門的硬體實作他們個別的功能。 還是也是都相同的
: 硬體,透過不同的IS去拼出來的呢?
programmable pipeline的年代,VS / PS是不同硬體
GPGPU的年代 VS / PS=FS / GS=TS是同一個硬體
:
: 謝謝
:
: 話說計組人腦也很好理解啊XDD
: ※ 編輯: lovesnake (140.121.221.204), 03/05/2015 00:38:12
: 推 cowbaying: 這個問題首先要看driver寫到哪邊 03/05 08:39
: → cowbaying: 記得是04還是05年開始 顯卡硬體改為stream processor 03/05 08:41
: → cowbaying: 這個部份要細看一下CHIP的diagram 03/05 08:46
: 推 cowbaying: 記得沒錯 除了繪圖卡有硬體著色器外 一般的卡都是由 03/05 08:47
: 推 cowbaying: 驅動程是轉譯成SP能辨識的資料 03/05 08:48
作者: chchwy (mat)   2015-03-05 12:59:00
推 說得很清楚
作者: lovesnake (LoyalDog)   2015-03-05 13:11:00
超清楚的T_T 謝謝!! 另外請問 TS = GS 是指?
作者: holymars   2015-03-05 13:19:00
Tessellation shader和geometry shader是同一個東西pixel shader和fragment shader指的也是同一個東西
作者: cjcat2266 (CJ Cat)   2015-03-05 13:31:00
TS和GS是不同東西吧
作者: holymars   2015-03-05 13:33:00
要講古的話最早的GS概念 = TCS+TCS+GS 包山包海都作..那時有人叫這東西GS也有人叫TS,後來再細分stage是另外的事了會有這麼多名詞差異指來指去,都是openGL和D3D害的=3=
作者: lovesnake (LoyalDog)   2015-03-05 13:36:00
原來如此,受教!
作者: holymars   2015-03-05 13:37:00
FS<->PS TCS<->HS TES<->DS...為什麼大家都愛自創名詞
作者: a27417332 (等號卡比)   2015-03-05 13:57:00
3GS雖然可以小幅細分曲面,但速度比不上Tessellation吧為啥前面冒出一個3 QQ
作者: dreamnook (亞龍)   2015-03-05 14:15:00
自創名詞顯得很潮呀 把事情弄的越複雜越好騙人XD
作者: doomleika (iSuck)   2015-03-07 15:36:00

Links booklink

Contact Us: admin [ a t ] ucptt.com