此外,HDR(高動態范圍渲染)方面,由于DirectX 10硬件支持RGBE,所以HDR紋理不再需要特別解碼處理也能實現,HDRAA也得以輕松實現。另外DX10還支持兩種全新的HDR模式,一款是 R 11G 11B10 ,采用 11-Bit 紅色和綠色、 10Bit 藍色,另一款是采用 5Bit 共享加每種顏色以 9Bit 作尾數運算,以上兩款HDR模式在HDR品質上和標準的FP16幾乎沒有差別,但卻能有效減少資源損耗及顯存帶寬占用率,從而消除了以往HDR的瓶頸。另一方面, DirectX 10 還支持更高精度的FP32 HDR(每通道32bit,所以也有人美其名曰:128bit HDR),隨時為玩家提供更高質量的 HDR 效果做好準備。
三、G80,純正的GPGPU血統!
從R300到NV40,再到現在最新的G80,每一代旗艦GPU的晶體管都大大超過了同期的頂級CPU,也在挑戰其同時代半導體工藝的極限。隨著GPU性能的提升,近年來GPU用于通用計算(General Purpose GPU)及其相關方面的問題成為一個十分熱門的話題。GPGPU指的是利用圖形卡來進行一般意義上的計算,而不是單純的繪制。以NV40為代表的可編程GPU發布后,GPGPU進入了一個高速發展的全新時代。相比固定的流水線,目前硬件的可編程頂點和片段單元不管是運算精度,支持的指令數還是寄存器個數都有了很大提高,更重要的是基于Shader Model 3.0版本頂點和片段著色器版本的硬件開始支持動態流控制的循環和分支還有子函數操作。比如,現在的片段著色程序最多允許同時訪問16個獨立的紋理,支持長度不受限制的指令數,寄存器個數也大大提高。而且提供了32位浮點精度的運算和存儲格式,對于通用計算來說,這就很容易做出更為復雜的運算。盡管GPGPU前途一片光明,但挑戰與機遇永遠是并存的,目前GPGPU所面臨的問題也非常的多。
首先是當前的圖形硬件還存在很大的局限性。GPU畢竟是為了圖形渲染而生,其通用性離真正的通用處理器還有很大一段距離。比如,在DX9硬件上,Vetxe Shader和Pixel Shader總共的指令數被制在1024(512+512)條指令,(片段著色器)Pixel Shader最多只能同時訪問16個紋理,進行分支和循環操作的開銷也比大。此外,片段著色程序雖然支持R16F的浮點類型數據格式,但缺乏其他類型的支持,限制了通用運算的多樣性,而且R16F這種單精度的IEEE格式對于通常所用的工程計算而言精度還是低了點。由于每個shader程序最多帶32個Temp寄存器,指令數也受到限制,所以在很多通用計算程序的編寫中不得不采用multi-pass來完成一些復雜的運算,這樣就降低了性能。由于整個GPU只能通過頂點紋理來讀取數據,通過渲染到紋理來寫入數據,對于顯存沒有任何間接寫指令,輸出地址只能由光柵化引擎決定,不能由程序改變,無法進行任意的讀寫操作,因此必須將計算的中間結果保存以避免多次讀寫,這又無形中降低了GPU的通用運算性能。另外在硬件上如果采用浮點運算,則不能利用硬件本身的顏色混合操作,也不能進行mipmap的自動運算,這些也妨礙了GPU在通用計算上的應用。不過,支持DirectX 10的G8X系統的的出現,將讓這些問題迎刃而解。
NVIDIA方面,新一代G8X圖形核心采用了先進的統一渲染架構,擁有多達128個流處理器,引入幾何著色器功能……這一切簡直就是專為GPGPU運算而生!為了最大程度的發揮幾何著色器的威力,G80還專門設置了一個名為流輸出層(Stream Output State)的部件來配合它使用。這個層的功能是將Vertex Shader和Pixel Shader處理完成的數據輸出給用戶,由用戶進行處理后再反饋給流水線繼續處理。它可以直接讀寫本地顯存。我們可以通過Stream Out把GPU拆成兩段,只利用前面的一段幾何運算單元。對某些科學研究,也可以通過stream out來利用GPU的數學運算能力,等于在CPU之外又平白多得了一個數學協處理器。我們可以這樣理解G80圖形核心的幾何著色器和Stream Out單元:GS提供了改變圖形數量的能力,Stream out提供了硬件Multi-pass的支持。可以預見,今后圍繞這些全新的功能,又會有一批新的GPU通用計算程序出臺。
基于當前的G8X架構,NVIDIA現在已經有了一個針對GPGPU的解決方案,被稱作Compute Unified Device Architecture,簡稱CUDA。CUDA是一個完整的解決方案,包含了API、C編譯器等,能夠利用G80的片內L1 Cache共享數據,使數據不必經過內存-顯存的反復傳輸,shader之間甚至可以互相通信。對數據的存儲也不再約束于以往GPGPU的紋理方式,存取更加靈活,可以充分利用stream out特性。以上幾點都將大大提高GPGPU應用的效率。例如,在游戲中我們可以使用CUDA來讓GPU承擔整個物理計算,而玩家將會獲得另他們感到驚奇的性能和視覺效果。另外,用于產品開發和巨量數據分析的商業軟件也可以通過它來使用一臺工作站或者服務器完成以前需要大規模的計算系統才能完成的工作。這一技術突破使得客戶可以任何地方進行實時分析與決策。同時,一些以前需要很先進的計算技術來達到的強大計算能力的科學應用程序,也不再受限在計算密度上;使用CUDA的計算可以在現有的空間里為平臺提供更強大的計算性能。
在正式發布了基于G80核心的Quadro專業3D顯卡之后,目前NVIDIA正在醞釀一款全新的流處理加速卡,主攻圖像加速、科學計算等GPGPU運算領域……
(新聞稿 2007-04-21)