天 一
賣場(chǎng)中,一位裝機(jī)技術(shù)員侃侃而談:“NVIDIA最新的GTX275顯卡核心只有240個(gè)流處理器,ATI的HD4890顯卡核心卻有800個(gè)流處理器,你要最高性能的顯卡,當(dāng)然要選HD4890顯卡。”Tommy一臉迷惑,心下懷疑:“真的是這樣嗎?為什么有人說GTX275比HD4890性能好呢?”
AMD-ATI顯卡(以下簡(jiǎn)稱A卡)和NVIDIA顯卡(以下簡(jiǎn)稱N卡)在流處理器數(shù)量上的巨大差異給Tomy造成的困惑相信許多讀者也會(huì)有。其實(shí),這個(gè)情況和不同廠商、相近性能的cPu的二級(jí)緩存數(shù)量存在差異的情況相類似(詳見本刊2009年1月刊菜鳥訓(xùn)練營(yíng)欄目文章),簡(jiǎn)單來說就是“不同架構(gòu)的GPU,流處理器的作用不盡相同,不能直接比較數(shù)量。”深入的解釋請(qǐng)看下文說明。
什么是流處理器
早在微軟推出的Directx 7當(dāng)中就曾經(jīng)提出過一個(gè)概念——T&L(中文名稱是坐標(biāo)轉(zhuǎn)換和光源),它可以看作是流處理器的鼻祖。隨著顯卡核心芯片技術(shù)的發(fā)展,在DlrectX8中由微軟首次提出了shader的概念,并且將shader分為VerteXshader(頂點(diǎn)著色器,又稱VS單元)和Pixel shader(像素著色器,又稱Ps單元)。
一幅游戲畫面是怎樣顯示的呢?其中,3D物體的幾何形狀、光亮和陰影的控制是由VerteX shader來實(shí)現(xiàn)的,而Pixel shader是對(duì)像素資料進(jìn)行操作運(yùn)算的指令程序,其中包括了像素的色彩,深度坐標(biāo)等資料。在GeForce8之前,Pixel Shader和Vertex shader這兩個(gè)參數(shù)非常重要,這兩個(gè)部分的多少完全決定了顯卡的性能表現(xiàn),N卡和A卡雙方都為了提升Pixel shader和Vertex shader的數(shù)量而想盡一切辦法。
但是,在Directx 10這一代顯卡中,業(yè)界提出了一個(gè)新的概念——統(tǒng)一渲染架構(gòu),就是把原有的VS單元和PS單元統(tǒng)一起來,統(tǒng)稱為shader運(yùn)算單元,這也就是我們所說的流處理器(stream Processor)。因此,上述任務(wù)就由流處理器統(tǒng)一執(zhí)行了。既然流處理器是來自于VS單元和PS單元的統(tǒng)一渲染架構(gòu),那么,流處理器的作用與VS單元+PS單元的合作用就是基本相同的,只是添加了全新的處理單元——Geometry shader(幾何渲染器,又稱Gs單元)。
名稱的玄機(jī)
同一架構(gòu)的顯卡,流處理器的個(gè)數(shù)自然是越多越好,相信讀者也在各大網(wǎng)站了解到這樣的信息——“同價(jià)位的產(chǎn)品中,N卡的流處理器數(shù)量要少于A卡”。比如本文開頭的裝機(jī)技術(shù)員提到ATI Radeon HD4890顯卡比NvlDlA GeForce GTX275顯卡的流處理器數(shù)量多,這是正確的,但是性能卻是前者稍遜于后者。這是為什么呢?
其實(shí),在“流處理器”的名稱上,A卡和N卡存在細(xì)微的差別,N卡的流處理器全稱為:stream Proces—sin-g,而A卡的流處理器全稱為Stream Processing Units。一詞之差卻讓兩者的性能差距有著天壤之別。而且因?yàn)锳卡和N卡的GDU架構(gòu)存在根本性的差異,所以流處理器的工作方式和用途也有所差異,故不能直接比較流處理器的數(shù)量。這就可以解決本文開頭的顧客Tommy的疑問了,A卡的GPU流處理器數(shù)量多很多,但性能不一定就好。下面我們來分析A卡和N卡的GPU架構(gòu)及流處理器的工作方式,看看有什么不同。
在DireccX 9時(shí)代末期,AT噫識(shí)到像素渲染的重要性,就通過1:3的架構(gòu),提高了像素著色器的數(shù)量。到了Dlrectx 10時(shí)代,ATI還是通過這種方式來提高重要的像素渲染性能。從Rv770的核心架構(gòu)圖中可以看出,現(xiàn)在在ATI的GPU中,流處理器(Stream Processing)和流處理單元(stream Processing Units)的比例就是1:5,也就是說,ATI的每個(gè)“Stream Processing”都包含有5個(gè)“streamProcessing units”。RV770的流處理且群擴(kuò)充至10組,因此數(shù)量也有了2.5倍的增長(zhǎng),達(dá)到160個(gè)(160×5=800個(gè)流處理單元)。所以A卡所稱的“流處理器”實(shí)際上一般是指流處理單元。
NVlDlA方面,GeForce GTx 200核心架構(gòu)分為四個(gè)層。最上面一層包括幾何著色器(Geometry shader),頂點(diǎn)著色器(Vertex Shader)和像素著色器(Pixel Shader)。中間一層包括了10組TPcs(計(jì)算處理器群集),每組TPc里面又包含了3組sMs(流處理器組),每組sM里面就包含了8個(gè)流處理器單元或計(jì)算單元。這樣一來,GeForce GTX 200顯卡就一共包含了240個(gè)流處理器單元或計(jì)算單元。
兩種架構(gòu),優(yōu)劣各異
在進(jìn)入統(tǒng)一渲染架構(gòu)時(shí)代后,提高shader運(yùn)行頻率與效率是NVIDIA主導(dǎo)的設(shè)計(jì)思路,而AMD則維持龐大的流處理器數(shù)量。兩種思路各有優(yōu)劣。
1N的優(yōu)勢(shì)和A的劣勢(shì)
N卡的GPu中每個(gè)流處理器都具有完整的ALU功能,在發(fā)出一條操作指令時(shí)每個(gè)流處理器都能充分工作。而A卡的GDU中每個(gè)流處理器的5個(gè)流處理單元都是固定的,不能拆開重組,如果在處理純4D指令的時(shí)候,每個(gè)流處理器只能處理一條4D指令,有一個(gè)流處理器單元閑置,但卻無(wú)法加入其他組合來共同工作。
簡(jiǎn)單地說,一個(gè)指令任務(wù)派發(fā)下來的時(shí)候,N卡的GDu只需要1個(gè)“人”獨(dú)立工作即可完成,而A卡的GPU則需要5個(gè)“人”結(jié)組工作才能完成。ATI的人數(shù)雖然多,但這5個(gè)“人”中有可能會(huì)有4個(gè)“人”閑置,因?yàn)檫@4個(gè)“人”不具有獨(dú)立完整的ALU功能,不能執(zhí)行函數(shù)運(yùn)算,浮點(diǎn)運(yùn)算和Multipy運(yùn)算。
2N的劣勢(shì)和A的優(yōu)勢(shì)
ATI的設(shè)計(jì)也有其顯著的特點(diǎn)——浮點(diǎn)運(yùn)算能力強(qiáng)大。也就是說,如果單純比拼顯示核心在浮點(diǎn)運(yùn)算上的能力的話,ATI更強(qiáng)。要知道在目前GPGPU項(xiàng)目應(yīng)用比較多的科學(xué)計(jì)算方面,理論上ATI的顯示核心會(huì)更強(qiáng)大,未來更能適應(yīng)GPU和CPU融合的趨勢(shì)。