2020年都快過完了,想不到ZEN3架構的銳龍再次遇到負最佳化,而原因竟然和9年前的推土機架構有關。剛剛入手Cyberpunk 2077的AMD玩家一定要看!
過去AMD處理器遭遇負最佳化都跟使用英特爾ICC編譯器有關(英特爾顯然沒有義務給AMD做最佳化),但這次有所不同,AMD在Cyberpunk 2077中CPU使用率上不去、效能發揮不出來的原因跟GPUOpen SDK有關,程式會檢查CPU的品牌和架構,並分配不同的執行緒數以充分利用CPU計算效能。
不用很豐富的程式設計經驗,大家很容易看出上面這段程式碼的邏輯和其中的BUG。第一重IF-ELSE結構判斷CPU的品牌,如果是非AMD品牌(英特爾)則直接返回邏輯核心數。第二重IF-ELSE是在AMD品牌下判斷其是否屬於推土機架構,如果是則使用全部邏輯核心,否則將只使用物理核心數量的執行緒。這個BUG太過明顯,似乎是寫反了。
銳龍並不屬於老舊的推土機架構,按照上面的程式碼邏輯,6核心12執行緒的Ryzen 5 5600X屬於AMD處理器,但不是推土機架構,所以只按物理核心數量分配執行緒,也就是遊戲只使用6個執行緒。這樣一來,Ryzen 5 5600X的CPU使用率就上不去,效能得不到充分發揮。
好在民間大神已經發現問題並提供了一個手動補丁,即透過十六進位制編輯器開啟Cyberpunk2077.exe可執行檔案,搜尋"75 30 33 C9 B8 01 00 00 00 0F A2 8B C8 C1 F9 08",並將其替換成"EB 30 33 C9 B8 01 00 00 00 0F A2 8B C8 C1 F9 08",最後儲存檔案。
這將繞過帶有BUG的邏輯檢查,使AMD銳龍得以利用全部執行緒執行Cyberpunk2077:
不過Tom's Hardware的測試指出,這個民間補丁似乎只對8核心及以下的AMD銳龍有較好的提速效果。對於Ryzen 9 5950X,打完補丁後效能反而會有所下降,這可能跟跨CCD後延遲增加有關,如果猜想不錯的話,Ryzen 9 5900X也會有類似問題。
有了這個補丁,Ryzen 5 5600X遊戲離遊戲神U又近一步,打過補丁後它的效能反超英特爾Core i9-10900K,價效比凸顯。