● Compute Shader與Texture Compression
GPU是圖形處理器,以往的GPU通用計算需要程序員先將資料偽裝成GPU可識別的圖像,再將GPU輸出的圖像轉換為想要的結果,而通過DX11中的Compute Shader通用計算,任意類型的數據(即使是非圖形數據)都可以直接進行計算,而且不受圖形渲染流程的束縛,可以隨時寫入寫出,GPU通用計算的效能提高了很多。
由于GPU的浮點運算能力非常強大,支持GPU進行通用計算的技術發展勢頭很快,NVIDIA和AMD分別有CUDA和Stream技術,以前兩家是各自為戰,如今微軟也看到了GPU通用計算的曙光,在DX11中加入了Compute Shader這一技術,意在統一當前的通用計算技術。你可以認為Compute Shader標準就是微軟提出的OPEN CL。
Compute Shader技術是微軟DirectX 11 API新加入的特性,在Compute Shader的幫助下,程序員可直接將GPU作為并行處理器加以利用,GPU將不僅具有3D渲染能力,也具有其他的運算能力,也就是我們說的GPGPU的概念和物理加速運算。多線程處理技術使游戲更好地利用系統的多個核心。

Compute Shader圖形流水線
Compute Shader主要特性包括線程間數據通信、一整套隨機訪問和流式I/O操作基本單元等,能加快和簡化圖像和后期處理效果等已有技術,也為DX11級硬件的新技術做好了準備,對于游戲和應用程序開發有著很重大的意義。
在DirectX 11以及CS的幫助下,游戲開發者便可以越過復雜的數據結構,并在這些數據結構中運行更多的通用算法。與其他完整的可編程的DX10和DX11管線階段一樣,CS將會共享一套物質資源(也就是著色處理器)。
在硬件支持Compute Shader之后,相應的硬件必須要比當代硬件更加靈活,因為在運行CS代碼的時候,硬件必須支持隨機讀寫、不規則列陣(而不是簡單的流體或者固定大小的2D列陣)、多重輸出、可根據程序員的需要直接調用個別或多個線程、32k大小的共享寄存空間和線程組管理系統、粒數據指令集、同步建構以及可執行無序IO運算的能力。
Compute Shader可發揮的地方很多,游戲中可以使用GPU進行光線追蹤、A-Buffer采樣抗鋸齒、物理特效、人工智能AI等游戲特效運算。在游戲之外,程序員也可以利用CS架構進行圖像處理、后期處理(Post Process)等。
Texture Compression(紋理壓縮)是一種和虛擬紋理類似的紋理管理方法,在很多情況下具有6倍以上壓縮比例的紋理壓縮都可以極其有效地減小紋理本身的大小,從而避免紋理傳輸和管理方面的瓶頸,并且可以獲得更加精細的畫面,由此看來其效率比虛擬紋理要高。
DirectX 11加入了兩種新的壓縮算法——BC6和BC7。其中,BC6是專門針對HDR圖像設計的壓縮算法,壓縮比為6:1;而BC7是專門為LDR(低動態范圍)圖像設計的壓縮算法,壓縮比為3:1。

上圖則是BC7針對LDR紋理的壓縮與傳統的BC3紋理壓縮對比。可以看出傳統的BC3紋理壓縮損失了大量的紋理細節,壓縮之后的效果也很不好。而采用BC7算法壓縮后的紋理,丟失的細節很少,效果也非常好,這就是改進紋理壓縮的魅力。

上圖展示的是圖像通過BC6壓縮模式進行壓縮的前后效果對比圖。其中左邊的圖像為原始圖像,中間的是在壓縮過程中損失的一些細節,而右邊的就是壓縮后的圖像。可以看出,從畫質上來看幾乎沒有損失(肉眼看不出),但是卻可以大幅度降低顯存的占用。
● 著色器模型變化歷程與總結
在圖形渲染中,GPU中的可編程計算單元被稱為著色器(Shader),著色器的性能由DirectX中規定的Shader Model來區分。GPU中最主要的可編程單元式頂點著色器和像素著色器。
為了實現更細膩逼真的畫質,GPU的體系架構從最早的固定單元流水線到可編程流水線,到DirectX 8初步具備可編程性,再到DirectX 10時代的以通用的可編程計算單元為主、圖形固定單元為輔的形式,最新的DirectX 11更是明確提出通用計算API Direct Compute概念,鼓勵開發人員和用戶更好地將GPU作為并行處理器使用。在這一過程中,著色器的可編程性也隨著架構的發展不斷提高,下表給出的是每代模型的大概特點。
表:Shader Model版本演化與特點
Shader Model
|
GPU代表
|
顯卡時代
|
特點
|
|
1999年第一代NV Geforce256
|
DirectX 7
1999~2001
|
GPU可以處理頂點的矩陣變換和進行光照計算(T&L),操作固定,功能單一,不具備可編程性
|
SM 1.0
|
2001年第二代NV Geforce3
|
DirectX 8
|
將圖形硬件流水線作為流處理器來解釋,頂點部分出現可編程性,像素部分可編程性有限(訪問紋理的方式和格式受限,不支持浮點)
|
SM 2.0
|
2003 年
ATI R300
和第三代NV Geforce FX
|
DirectX 9.0b
|
頂點和像素可編程性更通用化,像素部分支持FP16/24/32浮點,可包含上千條指令,處理紋理更加靈活:可用索引進行查找,也不再限制[0,1]范圍,從而可用作任意數組(這一點對通用計算很重要)
|
SM 3.0
|
2004年
第四代NV Geforce 6
和 ATI X1000
|
DirectX 9.0c
|
頂點程序可以訪問紋理VTF,支持動態分支操作,像素程序開始支持分支操作(包括循環、if/else等),支持函數調用,64位浮點紋理濾波和融合,多個繪制目標
|
SM 4.0
|
2007年
第五代NV G80和ATI R600
|
DirectX 10
2007~2009
|
統一渲染架構,支持IEEE754浮點標準,引入Geometry Shader(可批量進行幾何處理),指令數從1K提升至64K,寄存器從32個增加到4096個,紋理規模從16+4個提升到128個,材質Texture格式變為硬件支持的RGBE格式,最高紋理分辨率從2048*2048提升至8192*8192
|
SM 5.0
|
2009年
ATI RV870
和2010年NV GF100
|
DirectX 11
2009~
|
明確提出通用計算API Direct Compute概念和Open CL分庭抗衡,以更小的性能衰減支持IEEE754的64位雙精度浮點標準,硬件Tessellation單元,更好地利用多線程資源加速多個GPU
|
傳統的分離架構中,兩種著色器的比例往往是固定的。在GPU核心設計完成時,各種著色器的數量便確定下來,比如著名的“黃金比例”——頂點著色器與像素著色器的數量比例為1:3。但不同的游戲對頂點資源和像素資源的計算能力要求是不同的。如果場景中有大量的小三角形,則頂點著色器必須滿負荷工作,而像素著色器則會被閑置;如果場景中有少量的大三角形,又會發生相反的情況。因此,固定比例的設計無法完全發揮GPU中所有計算單元的性能。
頂點著色單元(Vertex Shader,VS)和像素著色單元(Pixel Shader,PS)兩種著色器的架構既有相同之處,又有一些不同。兩者處理的都是四元組數據(頂點著色器處理用于表示坐標的w、x、y、z,但像素著色器處理用于表示顏色的a、r、g、b),頂點渲染需要比較高的計算精度;而像素渲染則可以使用較低的精度,從而可以增加在單位面積上的計算單元數量。在Shader Model 4.0之前,兩種著色器的精度都在不斷提高,但同期頂點著色器的精度要高于像素著色器。
Shader Model 4.0統一了兩種著色器,所以頂頂點和像素著色器的規格要求完全相同,都支持32位浮點數。這是GPU發展的一個分水嶺;過去只能處理頂點和只能處理像素的專門處理單元被統一之后,更加適應通用計算的需求。
DirectX 11提出的Shader Model 5.0版本繼續強化了通用計算的地位,微軟提出的全新API——Direct Compute將把GPU通用計算推向新的巔峰。同時Shader Model 5.0是完全針對流處理器而設定的,所有類型的著色器,如:像素、頂點、幾何、計算、Hull和Domaim(位于Tessellator前后)都將從新指令集中獲益。

GPU執行FFT性能將在未來迅速提升
如圖,快速傅里葉變換(Fast Fourier Transform,FFT)有廣泛的應用,如數字信號處理、計算大整數乘法、求解偏微分方程等等。SIGGRAPH2008峰會認為未來隨著Compute Shader和新硬件、新算法的加入,GPU執行FFT操作的性能將得到快速提升。
如果使用DirectX 11中的Computer Shader技術,API將能借助GPU充裕的浮點計算能力進行加速計算,則能輕易完成大量的FFT(傅里葉變換)。在圖形渲染中,這項技術的運用極大地提高了波浪生成速度,而且畫面質量也更好。
以往受限于浮點運算性能,目前CPU進行FFT變換只能局限在非常小的區域內,比如64x64,高端CPU最多能達到128x128,而GTX 280則能實現每幀512x512的傅里葉變換,所用時間不過2ms,效能非常高。
DirectX11最為強調的圖形特性就是Tessellation(曲面細分)。Tessellation技術利用GPU硬件加速,將現有3D模型的三角形拆分得更細小、更細致,也就是大大增加三角形數量,使得渲染對象的表面和邊緣更平滑、更精細。
● Tesslation測試-Stone Giant
《Stone Giant》是一個針對DirectX 11 Tessellation效能十分依賴的Demo,本次筆者將用其作為檢驗產品Tessellation性能的工具。
以下對比圖左側為Geforce GTX480,右側為Radeon HD 5870。
● NO Tessellation + NO Wireframe

● NO Tessellation + Wireframe

● Tessellation + NO Wireframe

● Tessellation + Wireframe



● Direct X11 SDK Test:Sub D11
Direct X11 SDK Test:Sub D11是集成在微軟的DirectX SDK開發包中的測試組件之一,它主要測試GPU的Tessellation性能。這個測試一共包含31個層級,從第一級的輕度曲面細分到31級重度曲目細分,對顯卡的幾何處理能力考驗不斷升級。
我們為了對NVIDIA和AMD公平起見,選擇了Factor=1/16/31,這三個級別的測試曲面數量很有可能在未來作為圖形開發者的重要參考標準。




我們能夠看到一個很明顯的性能變化,在曲面細分壓力不大的情況下,HD5870有接近于Fermi架構GTX480的表現,HD5970則能夠超越GTX480。而在曲面細分壓力變大之后,A卡出現了非常嚴重的性能下降,畢竟R800架構的一個曲面細分單元無法對抗NVIDIA在Fermi架構中給每個SM單元分配一個曲面細分單元。
● DX11 SDK Test:PN Triangle
PN Triangle和上一個Sub D11測試有異曲同工之處,它們都著重測試GPU的曲面細分性能。這個SDK測試程序是在微軟發布DirectX 11初期由AMD提供的。

因為它同樣也有曲面層級設置,所以我們選取了負載較輕的5和負載較重的19進行測試。結果如下:


PN Triangle的測試結果和Sub D11非常相似,畢竟兩者的測試目的相同。但是我們需要清楚知道的一點是我們所作的都是理論性能測試,而且是有很強側重性的。
在圖形運算中不可能有完全純凈的Tessellation環境和極大的Tessellation負載。所以我們不可能看到在DirectX 11游戲中出現A卡因為開啟了DirectX 11支持的Tessellation功能之后性能大幅度下降。
● DX11 SDK Test:Detail Tessellation (1)
Detail Tessellation是集成在DirectX 11 SDK開發包中的重要基準測試程序,它提供了Bump Mapping、Parallax Occlusion Mapping和Tessellation三種主渲染模式,同時使用者可以在這3種模式之上添加其他附加效果,以達到較為復雜的Shader效果。

這個測試中只要涉及置換位移貼圖和傳統的凹凸類貼圖,都會有大量的VS指令,而VS指令天生就是4D指令,因此R800的4D+1D組織SIMD結構流處理器會表現出較強的性能。而NVIDIA顯卡的主要看點則在曲面細分性能上。越復雜的Shader效果對著色器性能要求越高。



Detail Tessellation雖然同樣側重曲面細分能力,但是它添加了大量其他貼圖效果,像我們熟知的置換位移貼圖和傳統的凹凸類貼圖都會在這項測試中找到。這項測試已經逐漸接近真實使用環境,同時大量的VS指令也讓4D+1D組織SIMD結構流處理器找到了爆發理論值的用武之地。
● DX11 SDK Test:Detail Tessellation (2)
Detail Tessellation是集成在DirectX 11 SDK開發包中的重要基準測試程序,它提供了Bump Mapping、Parallax Occlusion Mapping和Tessellation三種主渲染模式,同時使用者可以在這3種模式之上添加其他附加效果,以達到較為復雜的Shader效果。

Adaptive Tessellation技術一樣會通過調節VS來細化曲面結構,跟單純的設置頂點碎多邊形的Tessellation技術來說不一樣。我們發現這方面AMD顯卡表現較為優秀,比起單純的Tessellation技術來說性能衰減要小很多。
而Tessellation Ultra對曲面細分單元較為缺乏的A卡來說,性能下降非常迅速,畢竟Fermi架構的GF100完整版擁有16個曲面細分單元,而AMD的R800架構只是在UTDP指令分配器中裝配了一個曲面細分單元以達到微軟DirectX 11的硬件要求,所以性能較弱理所應當。



鑒于這項測試對單卡雙芯HD5970顯卡沒有提供良好支持,我們在Detail Tessellation測試中忽略了這款顯卡的成績。我們可以從測試中看到,在Shader效果較為簡單的前幾項測試中,AMD和NVIDAI的最新架構顯卡并沒有太大分別,而在越來越復雜的Shader效果中,全新設計的Fermi架構顯卡體現出了比較強勁的運算能力。
在4月下旬,中關村在線顯卡頻道已經對DirectX 11現有的大部分游戲進行了橫向評測,而今天這篇文章的目的,就是讓大家更加深入地了解DirectX 11這套全新的API將如何從圖形圖像的渲染方面改變我們的“視界”。
目前Fermi架構的Geforce GTX400系列顯卡剛上市不久,整個DirectX 11周邊配合程序還沒有完善,用戶方便執行的、可用于單項性能測試的也只有屈指可數的Techdemo和SDK開發包內的程序,而且它們的測試方向幾乎都指向了Tessellation技術。相信在未來的一段時間內,我們可以運用更好的軟件來了解DirectX 11顯卡的各項技術特性。