NVIDIA新武器“Fermi”DX11架構解析
第1頁:略顯神秘的NVIDIA“原子彈”Fermi
現在看來,公元2009年在計算機硬件發(fā)展史上注定不會是平凡的一年,特別是在圖形處理器方面,AMD在今年9月推出了新一代支持Directx 11技術的代號為“Cypress”的圖形處理器,而NVIDIA也不甘人后,同樣在近期向我們揭開了Fermi架構的神秘面紗。
NVIDIA于11月中旬首度展示"Fermi"實物
如果你從Fermi發(fā)布伊始就開始關注它的話,那么你就會發(fā)現NVIDIA并沒有真正地談及過Fermi的具體性能參數和晶體管數量。而我們本文的目的就是一探究竟,參考的信息主要是官方白皮書和從NVIDIA工程師口風中獲得。
“為什么NVIDIA只介紹Fermi的計算性能?”這個問題相信很多人都會問。也許大家已經注意到了,NVIDIA公司最近幾年都是有意在向非圖形應用方向發(fā)展。比如G80的推出,同步現身的還有CUDA,這意味著那些希望通過GPU處理非圖形應用的人們終于有了一個平臺。該圖形處理器功能非常強大,同時CUDA也為高級圖形渲染編程帶來了新的途徑。
Fermi核心架構圖
作為在GPU架構計算上的一次嘗試,我們已經看到了NVIDIA的CUDA與AMD的Stream技術展開了激烈的競爭,而OpenCL現在也開始允許開發(fā)者在不影響GPU性能的情況下實現跨平臺開發(fā),同時微軟現在也有了DirectCompute,一種可以在更多非圖形的模式下充分利用設備的技術。還有我們不能忽視的就是Intel對Rapidmind的成功收購。
GPU計算如今正在成為一個大產業(yè),NVIDIA公司和其它公司一樣正在努力地進入到這個擁有極大增長潛力的新興產業(yè)中去。我們已經看到了GPU計算的市場份額正在不斷增長。
在GPU技術峰會上,NVIDIA選擇了對Fermi的圖形晶體管數量持保密態(tài)度。當然這樣做也是為了保留競爭力。簡單得說就是“為什么要把我們產品的競爭力提前透露給AMD呢?”,當然,也許還有另一種可能就是目前Fermi還無法進行真實硬件平臺的性能評測。
NVIDIA針對高性能計算市場推出的GPU通用計算產品Tesla
Fermi將會是NVIDIA首次將注重點放在了硬件計算領域上的一款產品。超級計算機以及其它大型計算設備將會因為Fermi在通用計算上的優(yōu)勢而受益。因此在圖形處理方面被“間接”地放置在一個次要的位置上。不過可以肯定的是,Fermi依然是GPU,依然會堅地維護在圖形處理領域上的優(yōu)勢。#p#page_title#e#
在我們開始細節(jié)討論之前,先對Fermi架構整體進行一下了解還是很有必要的:首先我們看到的是Fermi的基本架構圖,NVIDIA之前的D3D10級產品在每個簇(TPC)里均配備有多個shader multiprocessors (SM),一般是2-3個,這主要取決于架構的演變。G80及其系列產品均為2個SM,每個SM擁有8個標量單元組成。
基于G80的產品包括有GeForce 8800 GTX 和GTS,配備有8個TPC。一些衍生產品則屏蔽掉了其中的一個TPC(以及ROP)。NVIDIA在17個月之前推出了GT200,屬于高端產品。該產品對TPC進行擴展,包括有3個SM單元,每個SM單元均配備有單個雙精度浮點運算單元。通過這個雙精度浮點運算單元的支持,可以讓開發(fā)商及時獲得相關的功能。
Fermi配備有單個SM單元,每個SM相當于2個16路向量模塊。因此子塊配置將會是Fermi架構配置的關鍵。在nVIDIA的官方白皮書中看到GF100配備了2個不同的子塊,每個子塊配備有16個SM單元。
每個子塊均配備有SFU單元,可進行特別硬件訪問以及矢量單元插值,實現一個線程組或warp的8個時鐘周期。此后NVIDIA指出TPC擁有獨立的載入/存儲單元,同時每個SM擁有64KB分段共享內存和L1緩存。緩存可以被配置成16/48 或48/16 KB。每個子塊由于執(zhí)行相同的warp,因此均可以相互間共享互訪。
該芯片使用L2緩存滿足所有內存控制器I/O的需求,同時任意來自TPC的對L2緩存的寫入對于芯片上其它TPC都是可見的。該緩存的設計與當前nVIDIA架構的設計存在明顯的不同,這也是其以計算性能為主的一個關鍵。圖形處理對于內存子系統(tǒng)管理來說是件高度本地化的任務,因此GPU緩存一直以來都比較小,因為本地化操作意味著你不需要將所有的數據讀入緩存以滿足所有的內存讀取的需求。同樣的,非圖形計算能夠引進非本地存儲器存儲空間以及隨機存取模式,因此配備更大統(tǒng)一的L2緩存可以實現加速。同時芯片上所有的內存從寄存器到DRAM都可以受到ECC保護。
至于智能調節(jié)方面,這里有全局調度器和每個Fermi芯片前的邏輯芯片,能夠為每個SM線程調度器實現初步調度。每個SM均配備了一些核心和狀態(tài)跟蹤的邏輯芯片、緩存以及傳輸芯片。由于Fermi芯片的每個SM均可以運行不同類型的線程,因此前端必須每個SM的指令流。
雖然SM能夠在每個時鐘周期運行2條指令,由于調度器的問題,會存在解碼指令的單獨緩沖隊列。NVIDIA沒有透露隊列的深度,不過可以確定的是隊列和解碼器均可以保護芯片達到最高速度。
新的SM調度器,可以在一個塊里讓2個warp獨立的并發(fā)運行。NVIDIA表示這里有2個調度器,但是可信度不高。warp的延遲需求是老的D3D10設計的一半,需要2倍數據的warp去消除相同內存存取的延遲。
雙warp可以實現SM的混合指令執(zhí)行,同時由于warp的線程在數字和執(zhí)行指令上是獨立的,同時由于是子塊管理,因此指令的混合是靈活的。32-bit IMUL可以在一個子塊使用一個半warp執(zhí)行。
在Fermi之前,芯片的主要部分主要為計算內核。硬件可以一次運行一個核心,并且是連續(xù)的,不過需要在CUDA runtime 的幫助下。而現在計算核心可以屬于SM層??偟膩碚f,Fermi的運行與G80是一樣的。這是一個梯級架構,每個矢量管線都專門應用于單個物體計算,數據并行應用以及將數據附屬問題降至最低。#p#page_title#e#
Fermi的分歧是在warp層產生,因此為32個對像調度。硬件方面現在可以預測幾乎所有的指令。而Fermi與Cypress(RV870)相比的話,我們就可以看出AMD的傾向性。談到Cypress時,AMD的工程師們會告訴你這款產品擁有1600個shader單元,這個是憑借其采用的獨立架構而產生的。
對于RV770來說,Cypress的紋理資源則提升了一倍。ROPs數量增倍,光柵單元也是增倍,顯存也在容量和有效帶寬上獲得了倍增。至于shader硬件,5個ALU中只有4個就可以實現IEEE754-2008 FP32 FMAs,同時T-unit也擁有其獨有的特性。這些加起來就帶來了不小的提升,從渲染到紋理取樣以及像素輸出,直至內存帶寬。在核心芯片使用TSMC 40nm工藝情況下,核心面積為334mm2,配備有21.5億個晶體管。
RV870基本上就是RV770硬件參數的翻倍,只有內存接口帶寬仍然為256bits。這看上去感覺會有些不平衡,但是除此以外,這款產品可以視作是一款怪獸級圖形處理器,它可以讓游戲比以往任何時候運行的都要更快,配備有世界級的輸出引擎,出色的物理效果,當然價格也是相當“吸引”人。而在另一方面,NVIDIA則只有依靠GT200來撐場面,而AMD的產品也只有在計算方面要落后一些。因此這也是NVIDIA為什么如此重視計算方面性能的原因,這點在我們看過GF100的配置之后就更加清楚了。#p#page_title#e#
GF100基于的正是Ferm架構。屬于D3D11產品,由16個TPC組成,每個TPC包含有一對矢量SIMD處理器,一個獨立的內存池和寄存器;dual-issue, dual-warp調度器,并且可以通過內置內存控制器訪問芯片的ROP和DRAM。
它的子塊可以實現雙精度計算。這是一個16位寬DP矢量單元,每個時鐘循支持單個FAM 16線程。由于操作預測限制,當DB子塊運行時,SM無法運行第二子塊。另外對于DP FMA而言,FPU可以在一個時鐘周期內運行DP MUL和ADD。ALU還有一個很有趣的功能,就是可以在一個時鐘周期處一個32-bit MUL或ADD。
其它的子塊則是16位寬,負責另一半的線程warp單精度矢量計算。每個時鐘周期可以運行一個單精度FMA或者MUL、ADD。對于子塊來說新的FMA功能是很重要的。這樣可以讓nVIDIA的D3D10級硬件能夠在單個計算級上擁有比老產品更高的計算精度。在圖形模式下,由于運行在GT200相同的數字精確性,因此Fermi架構的芯片(例如GF100),MADD的速率將只有一半,因為運行的是老的MUL和ADD,需要2個時鐘周期。自動提升FMA將會由驅動來自動完成。
計算的精度是由Fermi所支持的IEEE754-2008所決定的,其中包括例處處理以及實現更快的浮點性能包括有NaN, +ve以及-ve等。
每個子塊同樣配備有SFU(special function unit)。SFU執(zhí)行矢量插值,同時為硬件提供特殊的指令比如SIN, COS, LOG等。DP子塊SFU在雙精度下不運行指令。
子塊和SFU能夠運行大量其它指令以及特殊計算,比如轉移、分支指令、ops對比以及交叉ALU計數器等。完整的指令混合以及輸出過程目前仍不清楚,NVIDIA聲稱調度器只受到操作數收集和發(fā)送的影響。如果所有的數據依賴都是令人滿意的,同時擁有足夠的接口滿足 register pool的服務請求,這樣可以想像SM將會運行所有的指令混合。通過256個接口可以提供足夠的操作數取以滿足SGEMM峰值速率的要求,同時也可以滿足HPC的需求。 GF100的SM最大線程數量為1536,相比GT200提升了50%。
這個方面唯一值得討論的限制就是子塊雙精度運行。由于DP操作的數盡可能需要達到2倍,這樣操作將會消耗所有可能獲取的register file接口,這樣其它子塊的其它指令將無法運行。在內存同步方面,我們注意到所有的Fermi SM包括有64KB L1緩存與共享memory pool,如果需要的也可以支持ECC。線程可以同時訪問shared memory和L1緩存。另外就是每個SM的register file為28KB。
GF100的L2緩存為768KB,這樣每個SM可以分配到48KB,不過需要記住它是完全一致的。首先顯存類型為GDDR5,但是內存控制器仍然支持GDDR3,NVIDIA將會把后者在6GiB Tesla配置上應用。
與當前已經上市的產品相比,Fermi的設計比如GF100同樣也支持改進的原子操作性能。warp中的原子操作是通過L2緩存的使用實現的,NVIDIA的白皮書表示額外的原子單元會影響到影響是不準確的,原子操作是通過L2實現操作而非通過DRAM完成。
GF100聲稱能夠同時支持16個計算kernel,每個SM分配一個。較早支持CUDA的架構只能夠同時支持一個kernel,并且是在降序模式下連續(xù)執(zhí)行。不過GF100則沒有這樣的限制。Kernel依然會像以前那樣通過驅動按隊列執(zhí)行,不過當TPC空閑下來可以運行另一個kernel時,它就可以自由得調度并且運行。至于DRAM,GF100可以通過6個64bit通道支持GDDR5顯存,同時顯存的頻率可以達到4200MHz。隨了新的內存以外,還包括有獨特的內存控制器。在紋理單元方面,GF100看起來應該是支持與GT200相同的,同時其處理峰值速率為相同頻率下GT200的1.6倍。紋理可以支持D3D11所需的全部要求,當然還包括有FP32過濾器。雖然內存總線縮減為384bits,但是GF100的ROP數量最高可以達到48個。
NVIDIA很有可能會選擇通過參數的變化來推出衍生產品,比如可以簡單將DP子塊替換成功能更簡單的塊。其它仍然保持不變,包括配備相同的調度器、register file甚至操作數電路。這樣將可以推出非DP衍生品,當然也會丟失一些整數處理的速率,但是這對于衍生產品來說則不會有影響,因為其面對的是不同的市場。雙精度浮點基本是GPU獨有的非圖形特性,至少在這點上將其從衍生產品上取消還是相當有用,這樣可以推出更小、更便宜的產品。