徐昌宇
3DMark是大家耳熟能詳的顯卡和系統游戲性能基準測試軟件,一直以來其主要測試內容都偏向圖形性能。不過近期3DMark推出了全新的CPU Profile測試模塊,專門用于考察CPU性能。這個測試包含哪些內容?它是如何反映CPU性能的?又和CPU日常應用的性能有多少相關性呢?今天本文就和你一起來了解這些內容。
2014年,獨立產品安全認證機構Underwriters Laboratories(下簡稱為UL)收購了Futuremark。在收購之后,U L宣布將加大在產品性能和測試領域的投入。隨后我們看到了3DMark、PCMark家族不但衍生出Android、iOS等不同版本,還擴展到A I推理、照片編輯、視頻編輯、VR測試等大量不同類型的測試領域。而這次我們關注的目標是新近推出的CPU Pr ofil e,它是3D M a rk家族中首次出現的專門針對CPU性能的測試模塊,它的一些算法和測試內容非常有趣,值得探究。
價值29.99美元的測試模塊
目前3DMark已成為一個龐大的測試模塊的組合,UL宣稱其為“適合所有硬件的基準測試”。3DMark現有3個版本,其中免費版本只包含Tim eSpy、Night Raid和Fire Strike三個測試模塊,內容非常有限。如果要體驗最新推出的CPU Profile,用戶需要花費29.99美元購買進階版3D Mark,該版本除了有前面提到的三個加上P o r tRoyal、Wild Life共五個圖形相關的測試模塊外,還包含一個壓力測試模塊以及5個獨立測試功能區域的功能測試組合,再就是CPU Profile了。第三個版本是面向商業用戶的,費用較高,本文在這里就不贅述了。
用戶在購買了進階版的3DMark后,完成安裝并運行它,就可在主界面點擊“更多測試”來選擇想要運行的項目,其中就包含了本文的主角CPU Profile。但用戶還需要點擊下載并安裝這個測試模塊,才可以進行相關測試。
3DMark CPU Profile:怎么測?
在CPU Profile的頁面可以看到一些簡單的說明,比如其提到“每個CPU Profile測試都是物理計算和自定義模擬的組合。為了避免測試受到渲染性能的限制,我們測量每幀的平均模擬時間,而不是幀率。這個指標會被轉換為每個測試的分數”。由此可知,CPU Profile和3DMark中的GPU測試有所不同。GPU測試一般是考察GPU每一秒鐘能夠輸出多少幀畫面,而CPU Profile則是考察CPU計算每一幀需要花費多少時間。這個時間會通過算法轉換成統一的分數。
在測試方式上,CPU Profile一共包含了6個測試項目,其內容都是一樣的,差別在于每次測試啟用的CPU線程數量不同。它們所支持的C P U線程數量分別是當前處理器支持的“最多線程”、16線程、8線程、4線程、2線程和1線程。其中,“最多線程”考察的是處理器的最強性能,如果是8核心16線程的CPU,那么這個測試的成績就和16線程測試的成績基本相同。從實際測試情況來看,由于測試內容都是固定的,所以CPU所擁有的核心數量以及線程數量越多,測試速度就越快,測試分數就越高。最慢的則是單線程測試,用一個CPU線程來渲染所有的測試畫面,需要等待較長時間才能完成。
接下來看看CPU Profile的核心測試內容和算法本質。它的測試包含了150幀畫面,都是來自現實的游戲場景,但是完全不采用任何GPU渲染,而是全部通過CPU渲染。由于CPU相對G P U較小的計算規模和較低的計算能力,因此畫面分辨率被大幅度降低。CPU Profile主要涉及的是一個名為“Boids”,也就是類鳥群體的計算框架,這個框架很容易被并行化計算,因此較為適合考察單線程到多線程的性能變化情況。
在計算機科學中,Boi ds類鳥群模擬是一個經典算法,它主要模擬大量物體的運動,且包含一定規則。一般來說,B oid s模擬中的每個個體必須遵循三個規則:首先是個體不能離開群體超過一定距離(不分離);其次是個體的運動模式相對群體中的其他單位是基本相近的(對齊);第三則是個體能夠充分顯示向群體移動的平均位置移動的期望(凝聚)。三個規則有些拗口,簡而言之,就是我們經常在天空中看到的群鳥,呈現多變而有一定規律的運動,單個鳥兒并不會輕易離開鳥群,并且鳥群的整體移動方向呈現隨機性。
Boids在實際的物理模擬中非常有用,除了鳥群外,魚群也基本遵循這一運動規律,因此它也常被游戲用來模擬魚群運動。如果對Boids模擬的數學參數中針對分離、對齊和凝聚的一些參數進行調整的話,它還可以準確地調整整個群體的運動狀態,這也是其受歡迎的重要原因之一。
從模擬計算的角度來說,Boids模擬中的每個個體實際上都是獨立的,因此它可以和其他個體進行并行計算。但是每個個體都需要了解周圍的環境以及其他個體的方向和位置,才能準確地給出自己的下一步運行方向。這意味著如果Boids模擬中個體數量越多,那么它們需要找到影響自己下一步運動方向和趨勢的其他個體也就越多。計算量會變得更大,并且這些數據也比較復雜,包含了不同個體之間的數據、運動的趨勢等,需要從緩存、內存的多個存儲區域多次輪詢,并且幾乎是隨機的,這相當考驗整個系統的計算能力。
由于Boids模擬的獨特性,它應用的場合很多,這也使得其源代碼有多個版本。不過目前絕大部分Boids模擬都不采用CPU計算,因為G PU對這種并行計算擁有先天優勢,一些面向個人的Boids模擬GPU算法最大可以擴展至65000個單位。在CPU Profile的Boids模擬中,一半個體采用了SSE3優化的指令,另一半個體采用了AVX2優化的指令。如果CPU不支持AVX2的話,那么會全部使用SSE3。
最后再來看看測試成績。由于所有測試都只模擬150幀,因此3DMark CPU Profile的總分算法是:總分=35000/平均幀時間。最終的成績報告和前文描述的6個測試一樣,CPUProfile將提供6個成績數據,覆蓋不同線程的情況。
測試結果:數據全面還帶“激勵”
在運行完相關測試后,CPU有多個版本。不過目前絕大部分Boids模擬都不采用CPU計算,因為G PU對這種并行計算擁有先天優勢,一些面向個人的Boids模擬GPU算法最大可以擴展至65000個單位。在CPU Profile的Boids模擬中,一半個體采用了SSE3優化的指令,另一半個體采用了AVX2優化的指令。如果CPU不支持AVX2的話,那么會全部使用SSE3。
Profile會展示最終的性能結果頁面。頁面頂端分為三個部分,左側是處理器型號,用戶可以在線比較自己的CPU和同樣使用該型號CPU的其他用戶所測得的性能。中間的6個數據則是6個不同測試的成績。右側則標明了測試軟件名稱和版本號。下方還有溫度、CPU頻率、系統信息等內容。
測試成績部分非常有趣。每個測試成績除了分數外,還顯示一個灰色、綠色的數據條。這個數據條的綠色部分是當前處理器的成績,黑色的標記豎線表示所有同型號處理器的中位數成績,灰色的部分表示用戶可以通過超頻獲得的性能預期,可以看作“激勵”部分。
分數中的常數“35000”是怎么來的?根據3DMark的說明,“35000”是“時間常數70ms”乘以“分數常數5000”。如果幀時間為70ms,那么最終結果可以得到5000分,實際上整個測試分數就是CPU實際完成的時間相對70ms的倍數值,再和5000這個常數相乘的結果。其次,對游戲來說,應該參考2線程、4線程或者8線程的性能(根據官方的描述),這樣復雜的機制增加了一般用戶考察處理器性能的難度:用戶究竟如何在這些數據中快速選擇自己想要的數據來考察最終的游戲性能呢?如果不是詳細閱讀本文的話,可能一般用戶都沒法看懂這個測試結果。
其他方面,3DMark CPU Profile還是做得不錯的,包括提供了CPU溫度、頻率和不同測試的細節信息等,便于用戶比較和參考。
對3DMark CPU Profile的一些疑問:真的能反映游戲性能?
在了解了測試內容、相關算法和測試結果后,本文對CPU Profile還有一些疑問:這個測試真的能反應CPU在游戲中的性能嗎?
從3D Mar k的說明來看,CPUProfile測試中不同的線程指代不同的應用場景。比如1線程是原始的C P U性能考察;2線程和4線程適合《DOTA 2》《CS:GO》等DirectX9游戲;8線程則適合考察CPU在DiretcX12游戲中的性能情況,這一點和3D Mark TimeSpy相關聯;16線程和更多的線程(如果有)考察的是計算性能,和游戲無關了。
從上述描述來看,CPU Profile似乎和游戲性能是相關的,正如3DMark中其他的圖形測試項目一樣,比如TimeSpy或者Fire Strike測試模塊。不過關鍵問題在于,TimeSpy、Fire Strike的確是模擬現實世界游戲運行方式的測試模塊,它們的技術應用和性能呈現都和最終游戲性能高度相關。但在CPU Profile上,這一點卻存在疑問。
CPU Profile中的CPU測試算法也就是Boids模擬實際上更傾向底層工作負載模擬而不是游戲工作負載模擬。在計算負載方面,一般來說,對Boids模擬這種計算,至少需要2000個未經優化的個體才能使得CPU的一個線程飽和,那么針對目前比較高端的8核心16線程處理器而言,如果需要使用Boids模擬來填充CPU算力的話,在算法盡可能優化的情況下,則需要模擬50000~100000個個體。在實際的CPU Profile測試中,3DMark沒有給出模擬的個體數量,但是目測應該在300個左右,這個數量顯然是不能充分填充CPU計算負荷的。另外,目前絕大部分游戲也不太使用Boids模擬來構建游戲世界。即使使用了類似的模擬,一般也不會和人物角色進行互動。如果有互動的話,不會使用這么多個體,這也從側面證明了CPU Profile在很大程度上不太能反映游戲中CPU的計算情況。
另外在測試方式的選擇上,CPUProfile選擇了150幀畫面進行測試,無論CPU有多少線程,都是150幀畫面。這里存在另一個問題,那就是如果CPU線程很多,并且支持類似頻率Boost的技術,那么對多核心多線程的CPU而言,CPU Profile很難穩定地反映一個處理器的性能。因為對這類多核心處理器而言,150幀畫面可能幾秒鐘就完成了,這意味著CPU可以在非常短的時間窗口內完成所有測試—這個時間窗口可以充分提高CPU頻率,甚至由于時間太短,CPU溫度還沒提升起來。但是在實際的游戲運行中,C P U長期處于高負載、高溫度的狀態下,CPU頻率應該會穩定在一個較低且比較小的范圍內,而不是較高的Boost頻率下。這意味著不同的測試條件、散熱溫度、測試時機都會影響到CPU Profile最后的性能呈現,這使得CPU Profile的測試成績可重復性降低了。
3DMark官方也對這個問題進行了回復。他們認為設計CPU Profil e的目的是降低測試流程的長度,他們希望CPU Profile中8個線程的測試結果和Time Spy Extreme相關,并且固定150幀的畫面意味著計算量是一致的。如果采用目前比較常見的固定測試時間來考察系統的計算數量的話(CPU Profile是固定計算數量考察計算完成時間),3DMark認為可能性能較差的系統的計算量過少。但是這其實也說不通,對于測試而言,只要多次重復穩定且可以取得平均值計算的話,計算固定時間自然也是沒問題的。對于為什么只設置150幀,3DMark認為他們在這個范圍內可以保證工作負載能夠均衡地布置在所有的CPU線程上,如果超過的話可能會影響結果一致性。但實際上在游戲中,計算負載是不可能均衡地被放置在所有線程上的,這也是CPU Profil e的一個問題。
所以,3DMark CPU Profile和游戲性能的相關性是存疑的。如果以更合理的角度來判斷,CPU Profile是3DMark建立的一個可以用于游戲性能評價的模擬機制,而不是一個識別CPU在游戲中性能呈現情況的測試工具。畢竟從“模擬機制”到“測試工具”,還有很長的道路要走。
總的來說,3DMark CPU Profile的現有版本在CPU性能測試方面給出了不錯的模擬機制,但是其采用的算法和測試方法,和它想要反映出的CPU游戲性能可能還存在差距,并且分數結構設計也讓人難以直接地了解到CPU的游戲性能。希望UL公司和3DMark開發團隊能在未來的時間中注意到這些問題,并予以有針對性的改進。