游戲跑分新視角:細(xì)看一秒內(nèi)幀數(shù)變化
編者按:從游戲評(píng)測(cè)出現(xiàn)至今,F(xiàn)PS(Frames per Second,每秒幀數(shù))一直都是我們衡量硬件表現(xiàn)好壞的標(biāo)準(zhǔn)。毫無(wú)疑問(wèn),在絕大多數(shù)情況下,F(xiàn)PS的確可以作為游戲性能的標(biāo)桿。但是,經(jīng)歷了長(zhǎng)久的測(cè)試歷程以及數(shù)以萬(wàn)計(jì)的幀數(shù)統(tǒng)計(jì)之后,部分玩家已經(jīng)開(kāi)始注意到,實(shí)際獲得的游戲體驗(yàn)和表面得出的FPS數(shù)據(jù)并不完全相符。
是測(cè)試數(shù)據(jù)有誤,還是我們的評(píng)定標(biāo)準(zhǔn)本身就存在缺陷?FPS真的能代表一切嗎?近日,國(guó)外同行TechReport撰文,詳細(xì)解答了我們以上的疑問(wèn),深入探究了FPS的一些弊端,并且提出了全新的游戲測(cè)試?yán)砟睢.?dāng)然,還有更多的問(wèn)題得以爆料。(以下為全文翻譯,部分內(nèi)容進(jìn)行了調(diào)整。注意,本的主要側(cè)重于新游戲測(cè)試?yán)砟畹年U述,而并非顯卡跑分PK。)
本文的初衷其實(shí)來(lái)自一個(gè)簡(jiǎn)短的談話(huà)。去年秋天,我和曜越科技(Thermaltake)公關(guān)Ramsom Koay一起共進(jìn)晚餐的時(shí)候,被問(wèn)及了一個(gè)看似簡(jiǎn)單但又不太好回答的問(wèn)題:既然一款主流顯卡就能在多數(shù)游戲中提供基本的流暢度(30 FPS以上),為什么還有那么多人還要買(mǎi)更快的顯卡?更高的FPS究竟能代表什么?誰(shuí)需要它呢?
表面上,我在這方面是專(zhuān)家。但打心底來(lái)說(shuō),問(wèn)題到來(lái)那一刻我并沒(méi)有做好準(zhǔn)備去如何回答。雖然有些突然,我還是簡(jiǎn)單思索了一下然后給出了我自認(rèn)為的非常好的答案,也無(wú)非是一些關(guān)于避免卡頓以及保持一個(gè)穩(wěn)定的游戲畫(huà)面等等。不過(guò)說(shuō)完這話(huà)之后我就意識(shí)到了不太妥當(dāng),因?yàn)樵谖覀円酝娘@卡評(píng)測(cè)中,關(guān)于這些我們并沒(méi)有給讀者一個(gè)合理的闡釋。
實(shí)話(huà)說(shuō),這個(gè)問(wèn)題一直讓我很糾結(jié)。雖然接下來(lái)的評(píng)測(cè)任務(wù)量一直不小,但是我還是抽出一些時(shí)間改變了一下測(cè)試流程,將Fraps的FrameTimes功能啟用,以此來(lái)記錄每個(gè)獨(dú)立幀渲染需要耗費(fèi)的時(shí)間。在此之后的的每一個(gè)顯卡評(píng)測(cè),我都會(huì)仔細(xì)的收集這些數(shù)據(jù)。(雖然這樣很耗時(shí),但對(duì)于這篇文章卻是至關(guān)重要的。)
到上周這一工作算是告一段落。接下來(lái)我抽了一部分時(shí)間,將這些數(shù)據(jù)進(jìn)行細(xì)化整理。最終的結(jié)果是這些數(shù)據(jù)相當(dāng)有啟發(fā)性,甚至讓人有些擔(dān)心(對(duì)于我來(lái)說(shuō)),因?yàn)樗苯宇嵏擦宋覀円酝u(píng)測(cè)的一些結(jié)論。但是,我認(rèn)為這些結(jié)果非常值得分享。實(shí)際上,它甚至可能會(huì)改變你對(duì)于游戲測(cè)試的固有理念。
毋庸置疑,幾乎所有的游戲硬件測(cè)試都采用同一種評(píng)估方法,那就是大家公認(rèn)的FPS(Frames per Second,每秒幀數(shù))。毫無(wú)疑問(wèn)的是,F(xiàn)PS是一個(gè)出色的即時(shí)性能匯總,表達(dá)準(zhǔn)確而且簡(jiǎn)單易懂。不只是游戲,F(xiàn)PS的概念還常見(jiàn)于我們所熟知電影及電視,比如電影/電視分別以每秒24/30張畫(huà)面的速度播放,也就是一秒鐘內(nèi)在屏幕上連續(xù)投射出24/30張靜止畫(huà)面,所以播放速率就是24/30FPS,游戲畫(huà)面也與之同理。(通常每秒播放24張畫(huà)面以上,根據(jù)“視覺(jué)惰性”,即視覺(jué)暫留現(xiàn)象,人眼就認(rèn)為是連續(xù)的。)
當(dāng)然,關(guān)于利用FPS進(jìn)行測(cè)試的爭(zhēng)論一直存在,尤其是我們常見(jiàn)的平均FPS更是受到很多質(zhì)疑,因?yàn)槠浜饬康奶珡V泛了。事實(shí)上我們也從這些討論中汲取了一些有用的東西并付諸實(shí)施,比如在游戲測(cè)試的時(shí)候同時(shí)獲取平均FPS和最低FPS,甚至可能的時(shí)候還提供了單位時(shí)間內(nèi)的FPS變化圖表。相比干巴巴的平均FPS,我相信這些信息更能夠幫助讀者更好的理解游戲性能表現(xiàn)。
即便如此,這種方法仍舊有一些明顯的缺點(diǎn)。因?yàn)榻?jīng)歷多次的測(cè)試之后,我們發(fā)現(xiàn)有些時(shí)候這些結(jié)果和我們的直覺(jué)體驗(yàn)并不完全一致。最根本的問(wèn)題在于,無(wú)論對(duì)于電腦時(shí)間還是人類(lèi)視覺(jué)感知來(lái)說(shuō),一秒都太長(zhǎng)了。一秒內(nèi)的平均結(jié)果可能會(huì)掩蓋一些系統(tǒng)性能突發(fā)變化,而這對(duì)于游戲體驗(yàn)來(lái)說(shuō)非常重要。
為了說(shuō)明,我們先來(lái)看兩個(gè)例子。雖然經(jīng)過(guò)加工,但這些結(jié)果卻是基于我們多年來(lái)的游戲測(cè)試真實(shí)數(shù)據(jù)。下面的圖表縱軸以毫秒(ms)為單位表示所需要的時(shí)間,而橫軸則表示一秒內(nèi)兩款不同顯卡所提供的一系列幀數(shù)。
顯而易見(jiàn),GPU1在大多數(shù)情況下跑得更快,每幀所用的時(shí)間較短(絕大多數(shù)都在25ms以下),而CPU2要慢一些,因?yàn)槊繋瑫r(shí)間一直穩(wěn)定在30ms左右。
但是,我們可以看到GPU1在運(yùn)行這個(gè)游戲的時(shí)候有一個(gè)明顯的問(wèn)題(假定說(shuō)是由于驅(qū)動(dòng)里糟糕的顯存管理引起的紋理載入毛病造成的,也可能是硬件方面的原因),那就是其中一幀所耗費(fèi)的時(shí)間出奇的長(zhǎng),幾乎達(dá)到了將近500ms,像是被卡在那兒了。如果你是這個(gè)游戲的玩家而碰巧遇到這個(gè)問(wèn)題,一瞬間肯定會(huì)卡的要死。而如果這個(gè)問(wèn)題經(jīng)常出現(xiàn),游戲也就基本不能玩了。
而這方面GPU2就要好了不少,雖然平均FPS可能要比GPU1少,每幀耗費(fèi)的時(shí)間都差不多,并且能夠提供一個(gè)持續(xù)穩(wěn)定的游戲畫(huà)面輸出。那兩款顯卡的平均FPS到底是多少呢?
可以看到,在我們統(tǒng)計(jì)的時(shí)間內(nèi),兩款GPU的平均FPS幾乎相同。如果就此而言,那么兩款顯卡的性能表現(xiàn)本質(zhì)上沒(méi)有區(qū)別。而正是我們使用了平均FPS,才使得GPU1中的一個(gè)致命缺陷被掩蓋了起來(lái)。
以上只是一小段時(shí)間內(nèi)的反映,如果說(shuō)GPU1在整個(gè)測(cè)試中的其它場(chǎng)景也時(shí)不時(shí)遇到類(lèi)似的延遲,但耗費(fèi)時(shí)間可能沒(méi)有這么大,那整體幀數(shù)可能會(huì)達(dá)到50FPS的樣子,最低幀數(shù)也有35FPS。而根據(jù)我們傳統(tǒng)的思維,這是一個(gè)看起來(lái)相當(dāng)不錯(cuò)的成績(jī),但是實(shí)際游戲體驗(yàn)的糟糕程度就可想而知了。
回歸到主題,F(xiàn)PS對(duì)于性能評(píng)估的意義雖然重大,但短板也是明顯的。而解決以上問(wèn)題最簡(jiǎn)單有效的方法就是將單位時(shí)間放大細(xì)化,就像我們剛才做的那樣,把每幀所耗費(fèi)的時(shí)間獨(dú)立呈現(xiàn)。事實(shí)上這么做并沒(méi)有什么難度,想必那些游戲開(kāi)發(fā)商們已經(jīng)研習(xí)多年。
所以,對(duì)于我們自己來(lái)說(shuō),也是時(shí)候轉(zhuǎn)化一下認(rèn)知理念了。下面表格里的數(shù)據(jù)可能會(huì)有一些幫助,詳細(xì)列舉了部分以毫秒為單位的幀時(shí)間(越低越好)所對(duì)應(yīng)的FPS速率,這里的條件是假定完整的統(tǒng)計(jì)時(shí)間為1秒。這個(gè)表已經(jīng)包含了許多閾值,比如其中16.7ms相當(dāng)于穩(wěn)定的60FPS。打個(gè)比方來(lái)說(shuō),目前大多數(shù)LCD的的刷新率就是每秒60次(60Hz),所以每次刷新的時(shí)間高于16.7ms的閾值就不能提供穩(wěn)定的畫(huà)面輸出。
|
Frame time in milliseconds |
FPS rate |
|
8.3 |
120 |
|
10 |
100 |
|
16.7 |
60 |
|
20 |
50 |
|
25 |
40 |
|
33 |
30 |
|
42 |
24 |
|
50 |
20 |
|
60 |
17 |
|
70 |
14 |
經(jīng)過(guò)以上幾點(diǎn)介紹,下面我們就來(lái)看一下實(shí)際游戲測(cè)試中的一些數(shù)據(jù),看看我們能夠從中獲得什么。
第一個(gè)實(shí)例來(lái)自我們之前的GeForce GTX 560 Ti評(píng)測(cè)。雖然測(cè)試發(fā)布較早,測(cè)試驅(qū)動(dòng)也有些老,但并不影響驗(yàn)證我們下面采用的新方法。測(cè)試游戲使用的是《戰(zhàn)地:叛逆連隊(duì)2》,畫(huà)質(zhì)設(shè)定如下圖所示。
雖然一大推數(shù)據(jù)看起來(lái)相當(dāng)繁雜,但在準(zhǔn)確的繪制每款顯卡幀數(shù)時(shí)間的時(shí)候卻并不十分困難,這個(gè)時(shí)候我們之前工作的效果就體現(xiàn)出來(lái)了。
正如你所見(jiàn),即便各項(xiàng)數(shù)據(jù)糾結(jié)到一塊兒,但異常值(耗時(shí)較高的幀數(shù))還是能一眼就看出來(lái)。另外可以看到,高端卡能夠在單位時(shí)間內(nèi)輸出更多的幀數(shù),而且每幀耗時(shí)交少,所以數(shù)據(jù)線(xiàn)也要更長(zhǎng)更低。
另外,競(jìng)爭(zhēng)對(duì)手之間的數(shù)據(jù)比拼可以在圖中非常直接的體現(xiàn)出來(lái)??偟膩?lái)說(shuō),這種方法相當(dāng)直觀(guān)而且簡(jiǎn)單易懂。比如上圖中的GTX 560 Ti在2150-2250幀數(shù)范圍之間明顯更快,在500幀左右HD 6870有一個(gè)明顯的異常值等等。接下來(lái)我們將這些數(shù)據(jù)放大,進(jìn)一步深入觀(guān)察。
這些放大數(shù)據(jù)和我們之前的數(shù)據(jù)基本對(duì)應(yīng),盡管HD 6870那個(gè)異常值看起來(lái)并沒(méi)有那么長(zhǎng)。很明顯,兩款顯卡的差別如果采用FPS是無(wú)論如何也無(wú)法體現(xiàn)出來(lái)的。
另外,我們看到在58ms異常值之后的那兩幀出現(xiàn)了突然的回落,延時(shí)非常低。之所以會(huì)出現(xiàn)這種情況,是因?yàn)轱@卡采用了三重緩沖技術(shù),也就是每三幀可以同時(shí)渲染,所以后兩幀并不需要等待前一幀的延時(shí)。雖然可以把這三幀看做一個(gè)整體,而且平均耗時(shí)也只有23ms,但是只要那個(gè)58ms延時(shí)存在,就會(huì)對(duì)實(shí)際游戲的流暢度造成一定影響。
實(shí)際上,我們并不想夸大類(lèi)似一個(gè)單獨(dú)的突發(fā)幀延時(shí)的影響,但是借助已經(jīng)在錄的眾多數(shù)據(jù),可以看看還有沒(méi)有類(lèi)似的情況發(fā)生。
我們將以上八款顯卡60秒內(nèi)超過(guò)50ms延時(shí)的幀數(shù)列舉出來(lái)。可以看到,四款A(yù)卡中除了HD 6970之外,都出現(xiàn)了4個(gè)以上的異常值。而與之相反的是四款N卡類(lèi)似的情況則沒(méi)有出現(xiàn)一次,即便是老邁的GTX 260也是如此。
比如對(duì)反應(yīng)時(shí)間要求極高的聯(lián)機(jī)游戲玩家,穩(wěn)定的幀數(shù)時(shí)間就顯得尤為重要。那么參考我們上文提供的數(shù)據(jù)圖表,將幀數(shù)時(shí)間降低到20ms以下(對(duì)應(yīng)50FPS),可以輕而易舉的選擇出合適的顯卡。
結(jié)果相當(dāng)明了,只有GTX 570和HD 6970(稍有一些)兩款顯卡幾乎沒(méi)有20ms以上的延時(shí)幀?;蛟S看完這些對(duì)比之后還是沒(méi)有一個(gè)清晰的概念,這些數(shù)字到底有什么意義呢?
回到文章開(kāi)頭我們提到的問(wèn)題,之所以許多人熱衷于高端顯卡,就是為了獲得更好的游戲體驗(yàn)。而更好的游戲體驗(yàn),就是建立在顯卡在單位時(shí)間內(nèi)提供穩(wěn)定的幀數(shù)輸出的基礎(chǔ)上,每幀占用更少的延時(shí)時(shí)間。而這遠(yuǎn)比單純的一個(gè)FPS數(shù)據(jù)更有意義,也更加客觀(guān)。
下面我們就將篩選條件進(jìn)一步提高,統(tǒng)計(jì)出每款顯卡99%的幀數(shù)中的最低耗時(shí)時(shí)間(以下圖二為例,GTX 570的99%幀數(shù)耗時(shí)都在18ms以下),并據(jù)此對(duì)比一下各款顯卡的FPS排名。
兩種測(cè)試方法下,各款顯卡的排名基本一致,差別程度也比較相仿。從某種意義上來(lái)說(shuō),這些顯卡在平衡FPS和每幀耗時(shí)之間做的不錯(cuò)。如果這樣來(lái)看,傳統(tǒng)的FPS并沒(méi)有什么問(wèn)題,高FPS顯卡能夠獲得更低的幀耗時(shí),反之亦然。那么這種新的測(cè)試方法又有什么意義呢,難道僅僅是為數(shù)據(jù)分析提供便利嗎?先別急,下文便見(jiàn)分曉。
上文中我們的新方法和傳統(tǒng)方法測(cè)試得出的結(jié)果排名基本一致,或許會(huì)有讀者質(zhì)疑這種方法的實(shí)用性。不過(guò)別忘了,到此為止我們僅僅測(cè)試了單塊顯卡,而多卡并聯(lián)系統(tǒng)還只字未提。結(jié)果又會(huì)怎樣呢?
以下多卡測(cè)試數(shù)據(jù)來(lái)自我們之前的GeForce GTX 590評(píng)測(cè)。和前面一樣,測(cè)試游戲同樣是《戰(zhàn)地:叛逆連隊(duì)2》,這一次我們采用了更加符合多卡系統(tǒng)定位的2560x1600分辨率。
測(cè)試方法與上面的單卡測(cè)試相同,具體結(jié)果如下:
可以明顯的看到,多卡的數(shù)據(jù)走向與單卡差別非常明顯,形狀也不再是一條線(xiàn),而且突發(fā)幀的數(shù)量大大增加,這究竟是怎么回事兒?同樣,我們將這些繼續(xù)將這些數(shù)據(jù)放大,更直觀(guān)地觀(guān)察。
同樣的,三款單卡看起來(lái)還比較正常,總體來(lái)說(shuō)比較問(wèn)題,而且突發(fā)幀數(shù)量并不多。
從GTX 560 Ti SLI身上就已經(jīng)開(kāi)始顯現(xiàn)出較大波動(dòng),總體上遵循一高一低的趨勢(shì),下面的多卡系統(tǒng)莫不如此。
已經(jīng)不止一次的聽(tīng)到關(guān)于多卡系統(tǒng)的Micro-stuttering(下文會(huì)具體解釋?zhuān)﹩?wèn)題了,這次算是一個(gè)集中的反映。需要清楚的是,我們這里看到的很像是多卡系統(tǒng)工作方式的一個(gè)人工還原。
不管是AMD還是NVIDIA,在CrossFire/SLI多卡系統(tǒng)中都將AFR(Alternate Frame Rendering,交替幀渲染)作為首要渲染模式。顧名思義,比如在雙卡系統(tǒng)中,AFR就是將偶數(shù)幀交給GPU1渲染,而奇數(shù)幀則安排給GPU2渲染;或者說(shuō)把第 n 幀畫(huà)面指派給 GPU1渲染,把 n+1幀指派給 GPU2 渲染,使幀數(shù)渲染交替進(jìn)行,從而充分利用多卡系統(tǒng)的并行幾何處能力。(三卡或四卡的原理一樣,渲染交替進(jìn)行。) 雖然,CrossFire/SLI同樣支持其它一些負(fù)載平衡渲染模式,比如SFR(Split Frame Rendering,分割幀渲染),但效率方面并不如AFR。
雖然這些基本原理非常簡(jiǎn)單,但要在多卡系統(tǒng)中做到負(fù)載平衡卻相當(dāng)不易。首先,每一個(gè)獨(dú)立的幀從渲染原理上來(lái)看就是一個(gè)需要高度平行的任務(wù),需要高度平行的天性使得幀與幀之間的平行也相當(dāng)拿捏,所以保持幀間的同步很是困難,更不用說(shuō)多卡之間的負(fù)載平衡了。(比如GPU1已經(jīng)完成了1幀渲染,需要進(jìn)行第3幀渲染,而此時(shí)GPU2的渲染還在進(jìn)行,那么GPU1就需要等待。當(dāng)然,實(shí)際的平衡負(fù)載問(wèn)題要復(fù)雜的多,需要平衡算法來(lái)解決。)
另外,因?yàn)椴还芏嗫ㄏ到y(tǒng)中有幾款顯卡,只有主卡才能與顯示器連接,所以其他顯卡渲染的幀只能通過(guò)傳輸?shù)街骺ㄟM(jìn)行輸出。而無(wú)論是CrossFire還是SLI接口,這種數(shù)據(jù)傳輸都會(huì)耗費(fèi)時(shí)間。除了幀數(shù)據(jù),其它的一些緩存數(shù)據(jù)也需要經(jīng)常在顯卡之間進(jìn)行傳輸,尤其是一些高級(jí)渲染技術(shù)(比如render-to-texture,渲染到紋理)使用的情況下。而這些數(shù)據(jù)通常會(huì)使用PCI-E接口,同樣會(huì)造成延遲。
上面的圖表很好的說(shuō)明了多卡系統(tǒng)之間負(fù)載平衡還遠(yuǎn)遠(yuǎn)未達(dá)到完美,需要解決的問(wèn)題還有很多。不過(guò)現(xiàn)在,我們可以先從一些多卡系統(tǒng)的天生缺陷說(shuō)起。
很明顯,繼續(xù)使用平均FPS去評(píng)估多卡系統(tǒng)的性能表現(xiàn)肯定是不靠譜的。因?yàn)閺钠骄鵉PS很難看出高延遲幀,而這些高延遲幀卻恰恰是獲得連貫游戲畫(huà)面的關(guān)鍵因素。我的感覺(jué)是,在提供連貫的游戲體驗(yàn)方面,幀延遲在20ms和50ms之間交替進(jìn)行并不如一直穩(wěn)定在50ms。
因?yàn)?,從人?lèi)的視覺(jué)系統(tǒng)特別善于捕捉不規(guī)則的場(chǎng)景,也就是說(shuō)一快一慢的畫(huà)面會(huì)讓人感覺(jué)相當(dāng)不爽。事實(shí)上嗎,這種體驗(yàn)我已遇到多次。這也就是為何很多人抱怨Micro-stuttering的原因。
當(dāng)然,這些只是冰山一角。問(wèn)題的復(fù)雜性要遠(yuǎn)比這些圖表展現(xiàn)的高的多。關(guān)于這個(gè)問(wèn)題我們接下來(lái)會(huì)進(jìn)一步闡釋?zhuān)F(xiàn)在,我還是想把這些數(shù)據(jù)繼續(xù)放大,看看還有那些問(wèn)題。
這里有一個(gè)進(jìn)一步分析這些數(shù)據(jù)的原因, 因?yàn)槲蚁嘈胚@里看到的問(wèn)題并不完全依賴(lài)于micro-stuttring。如果你看看我們之前完整的測(cè)試圖表,就會(huì)很清楚的看到這個(gè)趨勢(shì):多卡系統(tǒng)明顯要比單卡產(chǎn)生更多的延遲幀。平衡多卡之間的負(fù)載需要更多的系統(tǒng)資源消耗,以超過(guò)50ms延遲幀的數(shù)量來(lái)看,同樣型號(hào)的單卡要明顯好于多卡。
如果我們將閾值降低到20ms,這時(shí)多卡系統(tǒng)就看起來(lái)好多了,尤其是SLI。雖然我們之前也說(shuō)到了Micro-stuttering可能會(huì)引起各種各樣畫(huà)面的不連貫,但只要高延遲幀的數(shù)量不是過(guò)多,多卡系統(tǒng)依然能夠在多數(shù)情況下比單卡表現(xiàn)的好。
上面兩張圖算是對(duì)我們的新測(cè)試方法最好的回報(bào)了。在前面單卡測(cè)試中,兩種測(cè)試方法各款顯卡排名鏡像排列,而這里情況就大不一樣了。比如采用FPS標(biāo)準(zhǔn)衡量,HD 6970 CF排名第二;而到了“99%幀時(shí)間”方法中卻跌倒了第四位。另外可以看到,HD 6870 CF的FPS表現(xiàn)相當(dāng)不錯(cuò),GTX 580也屈居之后;但是在第二種方法中卻排名墊底,甚至還不如GTX 570。
現(xiàn)在還很難說(shuō)這種新方法就是衡量顯卡性能的非常好的途徑,但至少可以肯定的是,作為考量顯卡幀耗時(shí)的一個(gè)指標(biāo),它要比傳統(tǒng)的FPS更加出色。換句話(huà)說(shuō),這種方法對(duì)我們的玩家更加負(fù)責(zé)、更加中肯,即便表面看起來(lái)有些呆板。
為了更好地反映這種新方法的作用,除了“99%幀時(shí)間”,我們還非別統(tǒng)計(jì)了50%、66%、75%、80%、90%、95%、98%幾個(gè)范圍內(nèi)每組顯卡渲染幀的耗時(shí)。雖然我并不建議將來(lái)的顯卡評(píng)測(cè)都采用這種方式,但從說(shuō)明問(wèn)題方面來(lái)看,還是相當(dāng)直觀(guān)的。
從上圖中不難看出,想要對(duì)比兩組顯卡相當(dāng)簡(jiǎn)單。比如在50%的幀數(shù)范圍內(nèi),HD 6970 CF的幀延時(shí)要明顯低于GTX 590,在提高幀數(shù)比例之后,劣勢(shì)就慢慢顯現(xiàn)出來(lái)。再比如,GTX 570 50%的幀數(shù)延時(shí)大大高于HD 6870 CF,但提高到99%的幀數(shù)之后,就基本打個(gè)平手了。
當(dāng)然,僅僅靠一款游戲很難說(shuō)明問(wèn)題,接下來(lái)看看其他游戲中多卡并聯(lián)是否還是存在類(lèi)似的問(wèn)題。下面這款游戲是《子彈風(fēng)暴》,為了區(qū)別于《戰(zhàn)地:叛逆連隊(duì)2》,我們使用了不同的測(cè)試方法:不再使用固定的場(chǎng)景,而是在一分鐘的時(shí)間內(nèi),在同一關(guān)卡內(nèi)試玩5次,選取其中一次的統(tǒng)計(jì)結(jié)果。這也就意味著測(cè)試結(jié)果的變數(shù)會(huì)更大。
不管是什么樣的原因,相比單卡,多卡系統(tǒng)出現(xiàn)了幀延遲波動(dòng)問(wèn)題多多少少都會(huì)出現(xiàn)。從以上測(cè)試結(jié)果來(lái)看,除了GTX 580 SLI和HD 6970 CrossFire稍微好一些,其它幾組顯卡的波動(dòng)都不小。雖然這只是一小段測(cè)試的數(shù)據(jù),隨機(jī)性比較高,但我的感覺(jué)是即便跑完整個(gè)側(cè)這種問(wèn)題依然無(wú)法避免。
按照慣例,我們將這些數(shù)據(jù)進(jìn)行一步分析:
由于GTX 560 Ti表現(xiàn)太糟糕,50ms以上的延時(shí)幀就超過(guò)了500個(gè),所以這里就不做討論了。坦白說(shuō),大多數(shù)多卡并聯(lián)對(duì)高延時(shí)幀的抑制還算不錯(cuò),唯一的例外就是HD 6870 CF,雖然沒(méi)有GTX 560 Ti那么差勁,但50%以上幀數(shù)延時(shí)都接近35ms。其中的原因不太好說(shuō),但我們分析可能是顯存過(guò)于吃緊造成的。
有個(gè)問(wèn)題不得不說(shuō),在做類(lèi)似的統(tǒng)計(jì)的時(shí)候,一定要注意設(shè)定的閾值。比如上圖中GTX 580高于20ms的延遲幀要明顯高于GTX 570,但以50ms為閾值的話(huà),結(jié)果恰恰相反。一般來(lái)說(shuō),50ms的閾值對(duì)于日常測(cè)試應(yīng)該就足夠了,而20ms就顯得稍微有些苛刻了。
在《子彈風(fēng)暴》測(cè)試中,傳統(tǒng)的平均FPS和“99%幀時(shí)間”兩種方法獲得的顯卡排名基本上一致,但HD 6870 CF算是個(gè)例外,從第五名跌倒了第七。而我想說(shuō)的是,在“99%幀時(shí)間”中我們看到了GTX 560 Ti是多么不濟(jì)。雖然平均FPS也達(dá)到了25幀左右,但經(jīng)常出現(xiàn)80ms以上的幀數(shù),玩游戲自然不會(huì)流暢。
《星際爭(zhēng)霸2》和其它游戲有些不同。雖然同樣采用Fraps進(jìn)行幀數(shù)記錄,但測(cè)試過(guò)程中采用的是播放錄像Demo,而并不像前兩款游戲中我們親自去試玩。這里的錄像Demo為33分鐘,由于時(shí)間較長(zhǎng),所以每款顯卡也不再測(cè)試五遍。33分鐘所產(chǎn)生的幀數(shù)相當(dāng)龐大(有些顯卡達(dá)到了140,000個(gè)之多),也不能全部都統(tǒng)計(jì)在一張表內(nèi),這里每個(gè)表我們只選取了6500個(gè)。
有些意外的是,前面兩款游戲中幾款單卡的幀數(shù)耗時(shí)幾乎沒(méi)有什么波動(dòng),但這里…….
可以看到,除了GTX 570還好為好點(diǎn),無(wú)論是GTX 580還是HD 6970均是以三到四幀為跨度出現(xiàn)較大跳躍,尤其是GTX 580波動(dòng)的周期相當(dāng)有規(guī)律。HD 6970雖然沒(méi)有那么規(guī)則,但情況也比較類(lèi)似。我反復(fù)猜疑其中的原因到底是什么,有可能是三重緩沖的影響,也可能是游戲引擎以周期工作,或者是這兩方面的綜合。這里也充分說(shuō)明了一個(gè)道理,要獲得一個(gè)穩(wěn)定的幀數(shù)延遲,單單靠SLI或者CrossFire的優(yōu)化還是遠(yuǎn)遠(yuǎn)不夠的。
多卡系統(tǒng)中,SLI并沒(méi)有像NVIDIA單卡中波動(dòng)那么明顯,反而趨于緩和;而CrossFire的情況與單卡很是類(lèi)似,按照3-4個(gè)幀周期交替進(jìn)行。雖然這里我非常想說(shuō)明以上問(wèn)題到底為何,但目前還很難給出一個(gè)合理的解釋。
單從《星際爭(zhēng)霸2》這款游戲來(lái)看,相同級(jí)別下,N卡在避免高延時(shí)幀方面顯然做的更好。但在6500個(gè)統(tǒng)計(jì)幀數(shù)之內(nèi),還是有相當(dāng)多的幀延時(shí)超過(guò)50ms,即便是GTX 580 SLI也是如此。這里可能與CPU或者其它系統(tǒng)配置的限制有很大關(guān)系,可以肯定的是相對(duì)較少的高延遲幀能夠幫助我們獲得更好的游戲體驗(yàn)。
事實(shí)上,文章一開(kāi)始并沒(méi)有打算深入探討多卡并聯(lián)系統(tǒng)的Micro-stuttering(幀延時(shí)波動(dòng),實(shí)在找不到一個(gè)合適的詞翻譯…)。新測(cè)試方法幫助我們發(fā)現(xiàn)許多有意思的問(wèn)題,也說(shuō)明我們的方向沒(méi)有錯(cuò)。但是,這個(gè)Micro-stuttering卻使得我們的任務(wù)復(fù)雜了不少。

這張圖可以比較直觀(guān)的反映Micro-stuttering(X軸以ns為單位,Y軸以幀數(shù)為單位),多卡系統(tǒng)單位時(shí)間內(nèi)幀延時(shí)會(huì)上下波動(dòng)。
很自然,我們已經(jīng)聯(lián)系了主要的顯卡芯片廠(chǎng)商,看看他們對(duì)這個(gè)問(wèn)題的解釋。但是令我們意外的是,不管是AMD還是NVIDIA都直接而且坦率地承認(rèn)多卡系統(tǒng)的Micro-stuttering確實(shí)存在,而且是一個(gè)亟待解決的問(wèn)題,他們也已研究多時(shí)。但有趣是,對(duì)于以上的多核心產(chǎn)品(比如HD 6990、GTX 590)或者多卡解決方案(SLI、CrossFire),AMD和NVIDIA都沒(méi)有明確告知消費(fèi)者這個(gè)問(wèn)題的存在。相當(dāng)諷刺,不是嗎?
AMD的David Nalasco在評(píng)估多顯卡派遣幀任務(wù)的時(shí)候就發(fā)現(xiàn)了Micro-stuttering,他注意到幀數(shù)延時(shí)的波動(dòng)隨著游戲的反復(fù)進(jìn)行,因?yàn)閹c幀之間的相對(duì)時(shí)間是可變的。而且他聲稱(chēng)這個(gè)問(wèn)題并沒(méi)有普遍性。
根據(jù)有限但還算公平的測(cè)試,我們對(duì)于這個(gè)說(shuō)法基本認(rèn)同。首先,盡管幀延時(shí)波動(dòng)隨著時(shí)間一直存在,但它更傾向于既定的而且反復(fù)進(jìn)行的測(cè)試場(chǎng)景。其次,波動(dòng)似乎在有相對(duì)性能有限的平臺(tái)里程度更深。例如,我們?cè)谙嗤O(shè)置下測(cè)試相同的游戲,中端的HD 6870 CF所體現(xiàn)出來(lái)的幀間波動(dòng)就要比更高端的HD 6970 CF更加明顯。同理,GTX 560 SLI和GTX 580 SLI的情況也是如此。如果這一狀況是多卡系統(tǒng)的一大特性,那顯然是負(fù)面的。第三,在我們的測(cè)試數(shù)據(jù)中,CrossFire在抑制幀延時(shí)波動(dòng)方面明顯沒(méi)有SLI好。雖然我們還不能說(shuō)以上三點(diǎn)具有普適性,但知道從我們的測(cè)試中得到的結(jié)果就是如此。
Nalasco告訴我們一定程度上抑制幀延時(shí)波動(dòng)有許多方法。你或許已經(jīng)猜到了,那就是“垂直同步”?!按怪蓖健眴⒂弥螅梢宰柚巩?dāng)前幀渲染完畢后GPU跳轉(zhuǎn)到不同的資源緩沖區(qū)(已完成新的幀渲染),而幀緩沖區(qū)跳轉(zhuǎn)被推遲到下一次屏幕刷新。不過(guò)Nalasco也指出開(kāi)啟“垂直同步”也只能在“某些時(shí)候”有效果,換句話(huà)說(shuō)也就是不一定完全有效。所以,我們認(rèn)為關(guān)于“垂直同步”對(duì)于Micro-stuttering的精確影響還很難預(yù)測(cè)。
Ps.如果選擇“等待垂直同步信號(hào)”(也就是“打開(kāi)垂直同步”),顯卡繪制圖形前會(huì)等待信號(hào);性能強(qiáng)勁的顯卡則會(huì)提前完成繪制,并在下個(gè)信號(hào)到達(dá)之前等待。此時(shí),游戲的fps值會(huì)受顯示器刷新率的制約。對(duì)于高端顯卡而言,這限制了其性能的發(fā)揮。而如果選擇“不等待垂直同步信號(hào)”(也就是“關(guān)閉垂直同步”),那么顯卡繪制完一屏畫(huà)面,不等待垂直同步信號(hào),就開(kāi)始下一屏畫(huà)面的繪制,自然可以完全發(fā)揮顯卡的實(shí)力。但是,不要忘記,正是因?yàn)榇怪蓖降拇嬖?,才能使得游戲進(jìn)程和顯示器刷新率同步,使得畫(huà)面平滑,使得畫(huà)面穩(wěn)定。取消了垂直同步信號(hào),固然可以換來(lái)更快的速度,但是在圖像的連續(xù)性上,性能勢(shì)必打折扣。這也正是很多朋友抱怨關(guān)閉垂直后發(fā)現(xiàn)畫(huà)面不連續(xù)的理論原因。
有意思的是Nalasco提到的另一中可能:一種“更加聰明”的“垂直同步”,可以通過(guò)人的視覺(jué)感知來(lái)控制幀的跳轉(zhuǎn)。聽(tīng)起來(lái)很不錯(cuò),這種方法也有潛在的可行性。但Nalasco只是說(shuō)了一些未來(lái)的構(gòu)想,對(duì)于現(xiàn)實(shí)技術(shù)只字未提,他也承認(rèn)AMD到現(xiàn)在也沒(méi)有一個(gè)十全十美的解決方案。
另外,他還透露,未來(lái)AMD會(huì)在這方面投入更多精力,因?yàn)閷?lái)多卡系統(tǒng)肯定和LInao APU有很大關(guān)聯(lián),而且是不對(duì)稱(chēng)的結(jié)構(gòu),相比目前的多卡系統(tǒng)產(chǎn)生Micro-stuttering的幾率更大。
而NVIDIA的Tom Petersen也進(jìn)行了如下的圖文闡述,幫助我們更好的理解。

上面的示意圖表明了幀產(chǎn)生的流程,從游戲引擎到顯示輸出,非常有助于上下文的討論。
其中,游戲引擎包含了一系列的內(nèi)部變量,物理模擬、圖形處理以及用戶(hù)交互等等。當(dāng)一個(gè)幀開(kāi)始渲染,圖形引擎首先將其交給DirectX API。據(jù)Petersen的說(shuō)法,F(xiàn)raps就是在這個(gè)時(shí)候開(kāi)始時(shí)間信息記錄。接下來(lái),DirectX將調(diào)用高級(jí)API和Shader程序?qū)⑵滢D(zhuǎn)換成更基地的指令,然后交由顯卡驅(qū)動(dòng)處理。進(jìn)而,顯卡驅(qū)動(dòng)將這些DirectX低級(jí)指令轉(zhuǎn)化成機(jī)器語(yǔ)言交付給GPU進(jìn)行渲染,最終輸出到顯示設(shè)備。
為了更好的闡述關(guān)鍵問(wèn)題,Petersen定義了許多變量。比如,”Stutter”就表示游戲時(shí)間(T_game)和輸出顯示時(shí)間(T_display)之間差的絕對(duì)值、”Lag”表示”T_game”和”T_dispaly”之間的耗時(shí)、”Slide show”表示每幀渲染時(shí)間的總共耗時(shí)。按照Petersen的觀(guān)點(diǎn),在這三個(gè)變量中,玩家在游戲中感知最為明顯的就是”Stutter”。
在Petersen透露的諸多細(xì)節(jié)中,最讓人印象深刻的莫過(guò)于“NVIDIA在旗下的GPU中安置了許多硬件單元用來(lái)固定多卡系統(tǒng)的幀延時(shí)波動(dòng)”。主要原理是基于一種名為“Frame metering(幀測(cè)量)”的技術(shù),可以在幀間進(jìn)行動(dòng)態(tài)追蹤。一些“表現(xiàn)較快”的幀會(huì)被適當(dāng)延遲,換句話(huà)說(shuō),就是GPU不會(huì)直接跳轉(zhuǎn)到新的緩沖區(qū),從而保證渲染后的畫(huà)面能夠均勻地進(jìn)行顯示輸出。而這些延遲會(huì)根據(jù)幀率的快慢在特性的時(shí)間進(jìn)行調(diào)整。據(jù)稱(chēng),這種“Frame metering(幀測(cè)量)”技術(shù)至少在NVIDIA G80時(shí)代就已經(jīng)開(kāi)始運(yùn)用了。
現(xiàn)在,注意一下其中的含義。因?yàn)檫@種延遲測(cè)量是大概是在T_render和T_display之間進(jìn)行的,所以Fraps根本不會(huì)進(jìn)行記錄。這也就意味著我們之前的SLI測(cè)試數(shù)據(jù)沒(méi)有將這一過(guò)程展現(xiàn)給讀者。呈現(xiàn)在他們面前的是表面看起來(lái)波動(dòng)不大,而非一高一低交替進(jìn)行的幀數(shù)流。
雖然“Frame metering(幀測(cè)量)”看起來(lái)相當(dāng)不錯(cuò),但也包含了一些折中。為了平衡波動(dòng),NVIDIA大大提升了介于幀渲染完成到顯示輸出的延遲時(shí)間(lag)。雖然這回造成一部分的性能損失嗎,不過(guò)在大部分情況下,當(dāng)我們以毫秒為單位進(jìn)行討論的時(shí)候,這些延遲并不容易察覺(jué)。所以,在沒(méi)有一個(gè)相對(duì)完美的解決方案的前提下,這種方法還是能夠起到減輕波動(dòng)的效果的。
當(dāng)然,這種技術(shù)同樣存在不少問(wèn)題,而關(guān)鍵在于它非常依賴(lài)于游戲引擎。如果游戲引擎處理每幀的時(shí)間都完全一樣,“Frame metering(幀測(cè)量)”就能起到非常不錯(cuò)的效果;反之,就只能斷斷續(xù)續(xù)地解決暫時(shí)問(wèn)題,甚至可能會(huì)起到反作用。舉個(gè)例子來(lái)說(shuō),比如我們的攝像機(jī)以奇數(shù)順序12-34-56-78進(jìn)行幀數(shù)抓取,而投影儀卻已1-2-3-4-5-6-7-8的方式進(jìn)行播放,那看起來(lái)會(huì)是什么效果?
這些問(wèn)題我們也咨詢(xún)了Petersen,他也非常坦白的表明了” Frame metering”在面對(duì)不同游戲引擎的時(shí)候?qū)⒚媾R挑戰(zhàn)。但當(dāng)問(wèn)及具體哪些游戲引擎能夠和” Frame metering”完美搭配,他也未能給出詳細(xì)的例子。在承認(rèn)還有很多工作要做的同時(shí),Petersent還說(shuō)道:”如果我們能將所有幀都能統(tǒng)一(不再有波動(dòng)),那絕大多數(shù)游戲就非常完美了”。言外之意,就像Nalasco說(shuō)的那樣,這在業(yè)界依然是一個(gè)值得研究的課題。
好吧,我先承認(rèn)下面的文字算不上全文的總結(jié)。
經(jīng)歷了一大推測(cè)試數(shù)據(jù)以及和Nalasco以及Petersen的交談之后,我們有以下幾點(diǎn)值得闡述。最重要的一條:保證游戲中的幀率平滑將會(huì)是未來(lái)GPU性能評(píng)定的一個(gè)新途徑,而不再是僅僅衡量單純的渲染速度。就目前來(lái)看,多卡并聯(lián)系統(tǒng)依然面臨著很大挑戰(zhàn),而單卡也遠(yuǎn)遠(yuǎn)稱(chēng)不上完美。可以肯定的是,未來(lái)新技術(shù)以及新算法亟待應(yīng)用,而GPU與游戲廠(chǎng)商同樣任務(wù)不輕。只有這樣,才能為用戶(hù)提供更加出色的游戲體驗(yàn)。
另外,擺在我們(評(píng)測(cè)人員)的是,如何測(cè)試才能夠準(zhǔn)確衡量幀率波動(dòng)給顯卡性能帶的影響。Petersen已經(jīng)告訴我們NVIDIA正在考慮做一個(gè)API,允許Fraps此類(lèi)第三方程序能夠從GPU內(nèi)部渲染開(kāi)始讀取時(shí)間。當(dāng)然希望他們能夠這么做,我們也會(huì)盡量說(shuō)服AMD在驅(qū)動(dòng)程序中提供類(lèi)似的功能。除此之外,或許高速攝像相機(jī)在測(cè)試屏幕變化精度方面會(huì)大有裨益。(開(kāi)個(gè)玩笑,這可是出錢(qián)還要出力啊。)
最后,不管何種顯卡評(píng)估或者測(cè)試,讀者的體驗(yàn)才是王道。比如,我們要對(duì)一些基本問(wèn)題有深刻的理解:Mciro-stuttring的問(wèn)題影響到底有多嚴(yán)重?(我想回答成畫(huà)面間斷不連續(xù)更為精確,而并非“高延遲幀的潛在可能性”云云。)答案很大程度上依賴(lài)讀者的觀(guān)點(diǎn),而讀者的觀(guān)點(diǎn)往往又依賴(lài)于讀者本身以及對(duì)問(wèn)題的認(rèn)知程度等等。
與此同時(shí),我們對(duì)Mciro-stuttring問(wèn)題的讀者反饋很感興趣。如果你正在使用多卡系統(tǒng),你曾遇到過(guò)Micro-stuttering問(wèn)題嗎?如果遇到過(guò),多久才能看到一次,感覺(jué)如何呢?在下面的評(píng)論中發(fā)揮吧。
講了一大推,最后還是說(shuō)說(shuō)我們的新測(cè)試方法。盡管遇到這樣或那樣的問(wèn)題,但我們還是比較謹(jǐn)慎樂(lè)觀(guān)地和大家分享??陀^(guān)來(lái)講,我們的新方法提供了以往傳統(tǒng)測(cè)試方法無(wú)法獲得的顯卡性能真實(shí)表現(xiàn),并使之大白于天下。無(wú)論是數(shù)據(jù)分析還是顯卡對(duì)比,都相當(dāng)直觀(guān)而且淺顯易懂。甚至,用到CPU測(cè)試中也未嘗不可。在未來(lái)的測(cè)試中,我們很可能付之于實(shí)施。也歡迎各位讀者積極反饋??傊?,我們的感覺(jué)是,一旦你走進(jìn)微觀(guān)世界,就很難再用宏觀(guān)的眼光去看它了。■<
關(guān)注我們


