多核心玩遊戲反而更慢?談CPU與遊戲優化


隨著AMD Ryzen的橫空出世,電腦CPU進入了多核震懾的時代。

同一系列的產品,核心翻倍已經司空見慣,有爆料顯示Intel下一代CPU的i3將會配備4核8執行緒,這樣的CPU,三年前它的名字叫i7。

而在高端系列中,核戰更是令人心驚膽戰,在售的AMD Ryzen 3900X的12核24執行緒已經足以令人倒吸一口涼氣,而即將上市的3950X更是配備了16核24執行緒,數框框愛好者們紛紛表示把持不住,高呼yes根本停不下來。

然而多核CPU打遊戲一定會更快嗎?不一定。排除頻率、架構IPC的差異,某些情況下多核CPU打遊戲甚至會更慢,例如在某些情況下,AMD的12核新品3900X,某些遊戲中要比8核的3700X更慢。

多核打游戏反而更慢?谈CPU和游戏优化那点事

有測試顯示,核心更多、頻率更高的3900X在某些情況遊戲表現不如3700X

要知道從規格來看,3900X全面壓倒3700X,且不說核心多了四個,連頻率也更高(3.8/4.6GHz vs 3.6/4.4GHz),3級緩存也翻了倍(64MBvs32MB),那為什麼會出現多核玩遊戲更慢的情況?

今天就從這個現象出發,談談CPU和遊戲優化的那點事吧。

遊戲的多核優化有多難?

我們就先從遊戲對多核心的優化談起吧。談遊戲的優化,就繞不開對多核的支持。什麼遊戲對多核優化好、什麼遊戲只能一核有難、多核圍觀,一直是玩家們津津樂道的話題。

為什麼遊戲在對多核心的優化上會出問題,而視訊壓縮等應用就能充分利用多核心?這和遊戲的運行機制有關。

為何遊戲喜歡用單核心?

視訊壓縮這類任務可以輕易做到平行計算,例如一個執行緒壓縮某個片段,另一個執行緒壓縮另一個片段,多核一起運作,最後壓縮完成所有片段,完整視頻也就壓縮完成了。

而遊戲的運行一般都是線性的,某一步的運算往往會和上一步息息相關,很難充分利用多個執行緒。

例如在FPS遊戲中,某個玩家被擊中產生傷害,那麼這個傷害結果和子彈運行軌跡有關,需要先計算出子彈軌跡然後才能計算出傷害,這只能在一條執行緒中先後完成,無法通過多執行緒同時計算子彈軌跡和傷害。

遊戲想要充分利用多核,需要巧妙地將計算任務拆分成為多執行緒,例如不同的執行緒負責物理碰撞、AI行為等,技術門檻比較高,也得下更多功夫。基於此,目前仍有大量遊戲未能充分利用CPU的所有核心。

支持多核心一定優化好嗎?

隨著時代的發展,越來越多遊戲願意在多執行緒優化上做出努力。

但儘管如此,仍會出現12核3900X表現不如8核3700X的情況,這又是為何?

出現這種情況,主要在於CPU核心調度不合理。銳龍的架構比較特殊,每4個核心封裝成為一個CCX,每兩個CCX封裝為一個CCD,核心和核心之間的通訊,可以跨CCX,乃至跨CCD,而無論是CCX還是CCD之間通信,都存在延遲。

換言之,如果一個程式能夠調用多個核心,會出現以下幾種情況。

1、調用的多核心處於同一CCX內,延遲最小;

2、調用的多核心跨CCX,但處於同一CCD內,有所延遲;

3、調用的多核心跨CCX、跨CCD,延遲最大

例如一個遊戲可以調用4個核心,最理想的情況自然是調用同一CCX內的4核,這樣能獲得最好的性能。

但實際上,代碼對多核心的調用不一定這麼智慧,很有可能不能辨認出哪些核心位於同一CCX上。於是,遊戲可能會調用位於不同CCX、CCD的多個核心,產生的額外延遲導致性能有所損失。

知道了這些,就可以解釋為什麼有時候3900X的遊戲表現有時候還要低於3700X了。3900X封裝了兩個CCD,每個CCD內有兩個CCX,每個CCX有4核心,原生共4x2x2=16核心,遮罩了4核心後得12核。

而3700X則只有一個CCD,內含兩個CCX,共4×2=8核。可見,3900X比3700X多了一個CCD,多了一種可能產生額外延遲的情況,如果遊戲不能發揮出3900X的多核心優勢,那麼3900X表現略遜於3700X也就在情理之中了。

多核打游戏反而更慢?谈CPU和游戏优化那点事

因此,即使遊戲對多核進行了優化,但在核心調度方面,也需要另外下更多功夫,才能取得最佳性能。

很高興的是,微軟已經意識到了相關問題,在Windows 10 1903中做出了優化,系統會優先調度處於同一CCX內的核心,避免跨CCX造成的延遲。

如果你想要更好地發揮AMD Ryzen處理器的性能,升級到Windows 10 1903還是很有必要的。

2CPU單核性能真的在擠牙膏?CPU單核性能真的在擠牙膏?有人認為,目前CPU已經很難從頻率上做性能突破,架構亦難以進一步提升效率,堆核是性能進步的唯一之道。

有的朋友從Intel的“擠牙膏”中論證這一觀點,認為CPU的同頻性能已經多年止步不前,而AMD的Zen2架構儘管效率相對於前代大幅提升,但也只是追上競爭對手的水準而已。

用數年前的4核CPU和現在的4核CPU玩遊戲,體驗似乎並沒有什麼不同,也是一個有力的佐證。但事實是否如此?

實際上,這種觀點是片面的。之所以數年前的CPU在某些測試、某些遊戲中表現尚可,是因為這些測試、遊戲並沒有針對新CPU的指令集作出優化。

近年來,新款CPU的一大價值在於增加了AVX、AVX2、TSX等指令集。

如果代碼調用了相應指令集,能更高效地利用FMA這樣的浮點加乘混合單元,減少CPU流水線的閒置,性能表現可以獲得可觀的提升。

多核打游戏反而更慢?谈CPU和游戏优化那点事

這些都可是近十年間陸續增加的指令集,不是說沒有堆核就是擠牙膏

以著名的渲染軟體Cinebench為例,這是DIY玩家都相當熟悉的CPU測試工具。

最新版的Cinebench R20對比舊版的Cinebench R15,一大改進就是加入了AVX指令集的支援。

在CPU對AVX指令集有較好支援的情況下,同樣的渲染項目,在Cinebench R20中跑,速度甚至要比Cinebench R15快一倍以上!新型指令集對性能的提升之巨,由此可見一斑。

 

多核打游戏反而更慢?谈CPU和游戏优化那点事

Zen2的單核性能進步如此大,很大程度上是因為AVX2性能大幅提高

支援AVX或更新的指令集已經在渲染、視訊壓縮、科學計算等專業領域中漸漸成為常態,著名的Linux發行版本Fedora 32甚至計畫不支援沒有AVX指令集的CPU。

然而,仍有大量遊戲未跟進AVX等新指令集,只支援老的SSE,新CPU跑這些遊戲自然和舊款CPU沒有太大區別。在指令集支援方面,遊戲對CPU仍缺乏應有的優化。

著名的遊戲性能測試元件3DMark已經意識到了這點。在新的Time Spy Extreme測試專案當中,加入了AVX、AVX2乃至AVX512指令集支援,調用AVX512指令集跑分,成績對比SSE3跑出來的分數高了一倍有餘。

AVX等新指令集在實際遊戲中意義也變得越來越重大,例如《刺客信條:奧德賽》甚至不支援沒有AVX指令集的CPU(因為太激進,後來不得不重新相容老CPU)。

又例如某些使用了D加密的遊戲需要FMA3指令集才能正確解密運行,早年的“神U”E1230 v2只能幹瞪眼;如果你是PS3模擬器玩家,也有切身體會過TSX指令集下性能的飛躍。

多核打游戏反而更慢?谈CPU和游戏优化那点事

總體而言,大部分遊戲在指令集方面的優化做得依然不夠,在缺乏指令集優化的情況下,舊CPU和新CPU的遊戲表現拉不出太大差距。

但支援新指令集是遊戲對CPU優化中無法規避的環節,活用新指令集才能彰顯新款CPU應有的價值,希望有更多遊戲對新的CPU指令集作出優化吧。

總結

無論是增加CPU核心多執行緒,還是使用新型指令集提升SIMD性能,都可以大大增強CPU的性能。

就消費市場而言,AMD似乎更多地走了多核路線,而Intel則致力於推行新指令集。但無論是哪種發展方向,都需要相應的軟體對此作出優化,才能發揮出CPU應有的性能。

現在早已經不是不改一行代碼就能發揮出新CPU的全部性能的時代,多核心和先進指令集,限於匱乏遊戲支持的現狀,都不得不淪為“戰未來”。

CPU並沒有在“擠牙膏”,遊戲對CPU的優化也遠未到盡頭,希望未來我們能看到更多能發揮出CPU真正功力的遊戲吧。

消息來源

多核心玩遊戲反而更慢?談CPU與遊戲優化” 有 1 則迴響

  1. 這樣設計是CPU外在多核各自獨立解決多樣思維,而非多核內部集中解決問題。這是牽扯到設計多核的思維,是屬於外部多核,而不是內部多核導致

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.