在看完 NVIDIA 難得的滑鐵盧與 ATI 最輝煌的兩年 (2002 – 2003) 之後,接下來我們要看的是 2004 年的 GPU 發展。
Table of Contents
2004:DirectX 9.0 後期
2004 年的個人電腦 3D 圖形並沒有帶來太大的發展,一方面微軟此時正在為了 Longhorn (也就是後來的 Windows Vista) 焦頭爛額所以沒有心力再去給 Windows XP 發展新功能 (主要著眼於後來的 DirectX 10.0),另一方面則是 Shader Model 進入第二代之後確實已經為後來的個人電腦 3D 圖形提供了穩定且充分的基礎,當下也並沒有迫切改變架構的需要,最終導致的結果是 DirectX 9.0 將繼續陪伴我們直到 2006 年 Windows Vista 完工為止。
DirectX 9.0c
發佈時間:2004 年 08 月
如同上一篇談過的,受到 Windows XP 的接班人 Windows Vista 難產的影響,DirectX 9.0 可以說是歷來最為長壽的一代,微軟先後曾經推出數個版本的小幅改版,而 DirectX 9.0c 是第四個也是最後一個改版,不同於 DirectX 9.0a 與 9.0b 僅針對性能優化與小部分參數微調,DirectX 9.0c 是有帶來新東西的。
DirectX 9.0c 帶來的最大改進是 Shader Model 3.0,雖然版本號碼跳了一級但實際上 SM 3.0 並沒有像 SM 2.0 那樣帶來翻天覆地的改變,基本上是以 SM 2.0 為基礎下去延伸而成,這些改進雖然並沒有對架構造成重大影響,但仍然是一次很重要的改進,而且最重要的是終結了 SM 2.0 時代 NVIDIA (SM 2.0a) 與 ATI (SM 2.0b) 各自「延伸 SM 2.0」標準導致規格不一致的問題。
主要的差異有以下這些:
- Vertex Shader 支援的指令槽從最多 256 個一舉提高為「至少」512 個。
- Vertex Shader 的暫存器 (Register) 由 13 個增加到 32 個。
- 新的頂點紋理擷取技術 (Vertex Texture Fetch, VTF)。
- Pixel Shader 的指令槽從最多 512 個一舉提高為「至少」512 個。
- Pixel Shader 可執行的指令數提高到 65,536 個 (原先為 32 個材質指令與 64 個計算指令)。
- Pixel Shader 支援動態流程控制。
- Pixel Shader 的浮點數支援由 FP24 改為 FP32。
可以注意到主要的差異都出現在「數量」上,這代表著遊戲開發者可以讓 Shader 進行更複雜、更多變的操作了,這使得遊戲軟體的畫質又有了飛躍性的提升,以下面這張 NVIDIA 發佈的比較圖為例,可以見到冰川的真實度明顯提升了許多。
NVIDIA GeForce 6 Series (NV40/NV41/NV42/NV43/NV44/NV45/NV48)
發佈時間:2004 年 04 月
API 支援:Direct3D 9.0c、OpenGL 2.0
Shader Model 版本:Vertex Shader 3.0, Pixel Shader 3.0
像素渲染器 (PS):16 組/頂點渲染器 (VS):6 組/材質對應單元 (TMUs):16 組/著色輸出單元 (ROUs):16 組 (NV40 完整版/NV45 完整版/NV48)
像素渲染器 (PS):12 組/頂點渲染器 (VS):5 組/材質對應單元 (TMUs):12 組/著色輸出單元 (ROUs):12 組 (NV40 閹割版/NV42/NV45 閹割版)
像素渲染器 (PS):8 組/頂點渲染器 (VS):4 組/材質對應單元 (TMUs):8 組/著色輸出單元 (ROUs):8 組 (NV40 入門版/NV41)
像素渲染器 (PS):8 組/頂點渲染器 (VS):3 組/材質對應單元 (TMUs):8 組/著色輸出單元 (ROUs):4 組 (NV43)
像素渲染器 (PS):4 組/頂點渲染器 (VS):3 組/材質對應單元 (TMUs):4 組/著色輸出單元 (ROUs):4 組 (NV43 閹割版)
像素渲染器 (PS):4 組/頂點渲染器 (VS):3 組/材質對應單元 (TMUs):4 組/著色輸出單元 (ROUs):2 組 (NV44)
像素渲染器 (PS):2 組/頂點渲染器 (VS):1 組/材質對應單元 (TMUs):2 組/著色輸出單元 (ROUs):2 組 (NV44 閹割版)
上次我們看完了 NVIDIA 永遠的黑歷史-GeForce FX 系列 (NVIDIA 後來連舉辦 NVIDIA 歷年 GPU 展覽都不願意把 FX 5800 拿出來展示) 之後,接下來理所當然就是準備上演絕地反攻的劇情了,前面提過 NVIDIA 在面對 NV30 的問題時的其中一個策略是趕緊投入下一代晶片的研發,而實際上除了小改版 NV35 之外,NVIDIA 內部也同時開始了次世代 GPU 的研發,最後的成果就是我們接下來要看的 NV40。
在開始看 NV40 之前,先讓我們回顧一下 NV3x 系列 (GeForce FX) 有哪些缺點:
- 不成熟的 DDR2 記憶體導致高熱與高延遲。
- 錯估 DirectX 9.0 的規範而針對 FP32 浮點運算設計,在最終規範採用的 FP24 浮點運算中表現反而遠差於 ATI Radeon R300。
- 高溫導致需要使用龐大的散熱器,得一次占用兩個擴充卡槽。
- 架構過於複雜,有些部分實際上在 DirectX 9.0 世代當中根本用不到卻佔用大量面積。
- 低精度模式下性能仍然不佳,畫質更是糟糕。
- 記憶體頻寬明顯不足,GeForce 2 時期的噩夢重演。
- 搶先使用新製程,卻因為製程不成熟良率拉不起來而屢次延期,最後反而被 ATI 搶得先機。
作為 NVIDIA 絕地反攻、收復失土的主力武器,上面這堆問題當然是必須解決的難題,首先看到製程的部分,NVIDIA 在這次並沒有選擇急著採用當時還不成熟的 110 奈米製造工藝,而是選擇與 IBM 合作繼續使用先前已經在 NV36 投入使用並獲得成功的 130 奈米製造工藝,雖然最後成品的晶片大了不少 (是前作 NV35 的 1.5 倍,高達 300mm2) 使得生產成本較為偏高,但卻不必擔心產能與良率的問題,而且畢竟 NV40 是高階產品,生產成本高一些也是無可厚非的。
接下來要處理的則是記憶體的問題,與 NV35 的改進類似,NVIDIA 在 NV40 上使用了 256-bit 寬度的記憶體通道來提供充足的記憶體頻寬,而且不再使用當年曾經在 NV30 上造成過熱與延遲過長問題的 DDR2 記憶體,而是使用最新改良的 GDDR3 記憶體取而代之 (GDDR3 是基於 DDR2 改良而來,儘管仍然有延遲較高的問題,但卻可以透過更高的運作時脈與硬體清除功能來改善這些不足,製程方面的改進也使得工作溫度降低了,是專為顯示卡設計的特種 DDR2 記憶體),於是記憶體的問題也解決了 (在較低階的 NV4x 產品也有使用 DDR 和 GDDR2 記憶體的版本,但都比使用 DDR2 理想)。
接下來看到的是架構的部分,從架構圖來看可以發現 NV4x 與 NV3x 的架構規劃其實很不一樣,的確雖然 NV4x 承接了很多來自 NV3x 的技術特性,但在架構上幾乎是所有部分都重新翻修了一遍,有著不一樣的管線配置、不一樣的運算單元規劃、不一樣的記憶體控制器、不一樣的像素處理流程,大翻修帶來的第一個好處就是把那些本來用不太到的部分大幅簡化了,因此晶片的面積與電晶體可以真正耗費在決定新遊戲性能的 DirectX 9.0 像素管線上,於是又解決了一個問題,這點也讓 NVIDIA 得以在晶片當中塞入更多組的像素管線,讓性能得以有飛躍性的成長 (而且又加上剛剛提到的成熟製程,最終 NV40 得以塞進高達 16 組像素渲染器與 6 組頂點渲染器,分別是前作的四倍與二倍之多)。