負(fù)荷分配不當(dāng) AMD銳龍?zhí)幚砥饔螒虮憩F(xiàn)不如英特爾

來(lái)源:網(wǎng)絡(luò) 時(shí)間:2017-03-21 14:14:16

負(fù)荷分配不當(dāng) AMD銳龍?zhí)幚砥饔螒虮憩F(xiàn)不如英特爾

騰訊數(shù)碼訊(文心)據(jù)Ars Technica網(wǎng)站報(bào)道,業(yè)內(nèi)人士對(duì)于AMD采用Zen內(nèi)核架構(gòu)的Ryzen處理器的反應(yīng)可謂參差不齊。它售價(jià)不足500美元(約合人民幣3450元),卻集成有8個(gè)內(nèi)核、支持16個(gè)線程,意味著它在運(yùn)行多種負(fù)載方面的表現(xiàn)都不含糊,例如編譯軟件、對(duì)內(nèi)核數(shù)量要求較高的視頻壓縮等計(jì)算密集型任務(wù)。AMD的定價(jià)使得Ryzen確實(shí)非常有吸引力。

但游戲性能讓用戶對(duì)Ryzen頗為不滿。AMD承諾大幅提升每周期能執(zhí)行的指令數(shù)量(以下簡(jiǎn)稱“IPC”),業(yè)內(nèi)普遍認(rèn)為,Ryzen在這方面與英特爾Broadwell內(nèi)核相當(dāng)。雖然Broadwell是數(shù)年前的技術(shù),采用它的芯片最早在2014年9月發(fā)售,這樣的比較仍然是恰當(dāng)?shù)?。英特爾集成有大量?jī)?nèi)核的處理器——集成有6、8或10個(gè)內(nèi)核的高端臺(tái)式機(jī)處理器和面向多路服務(wù)器的各種至強(qiáng)處理器,仍然采用Broadwell內(nèi)核。

實(shí)際上,沒(méi)有人預(yù)期Ryzen能成為游戲性能最高的處理器。我們已經(jīng)知道,Broadwell也不是游戲性能最高的處理器,Skylake和Kaby Lake在多款游戲中的表現(xiàn)超過(guò)Broadwell,即使Skylake和Kaby Lake處理器至多只集成有4個(gè)內(nèi)核、支持8線程。對(duì)于許多或大多數(shù)游戲,高IPC和高時(shí)鐘頻率對(duì)于高性能至關(guān)重要,而這正是Kaby Lake的特性。

雖然如此,互聯(lián)網(wǎng)上的評(píng)測(cè)文章、帖子和推文,給人的感覺(jué)是:許多人希望或期望Ryzen在某種程度上全面勝過(guò)英特爾。一種普遍看法是,Ryzen在某種意義上來(lái)說(shuō)是一款糟糕的游戲處理器。但這一觀點(diǎn)通常伴隨著一種說(shuō)法,某些“優(yōu)化”措施將提升這款處理器性能,AMD用戶只需再等上數(shù)個(gè)月,Ryzen的威力將能全部發(fā)揮出來(lái)。

這兩種觀點(diǎn)都大有瑕疵。

Ryzen其實(shí)是一款出色的游戲處理器

Ryzen的游戲性能不如英特爾處理器是事實(shí)。如果用戶只關(guān)心游戲性能,英特爾Kaby Lake i7-7700K是市場(chǎng)上最好的處理器,其價(jià)格與最廉價(jià)的Ryzen型號(hào)相當(dāng)。甚至高端的Ryzen 1800X也不是7700K對(duì)手。

但7700K是目前市場(chǎng)上速度最快的游戲處理器。不過(guò),“不像7700K那樣快”,并不意味著一款處理器“不適合”玩游戲,這只意味著其運(yùn)行速度不如有史以來(lái)最快的游戲處理器。

在大多數(shù)情況下,處理器之間的差別只是理論上的。在幾乎所有情況下,Ryzen和Kaby Lake之間的差別是,一款處理器提供的幀率略低于另外一款。如果性能測(cè)試表明英特爾處理器在運(yùn)行游戲時(shí)幀率總是高于60fps,而AMD處理器運(yùn)行游戲的幀率總是低于60fps,一個(gè)合理的結(jié)論就是,英特爾處理器能提供流暢的游戲體驗(yàn),而AMD處理器則不能。

但通常而言,情況并非如此。即使差距相當(dāng)大,例如《古墓麗影:崛起》(Rise of the Tomb Raider),在Kaby Lake i7-7700K和Broadwell-E i7-6900K(8核/16線程)上運(yùn)行時(shí)幀率都能達(dá)到135fps,而在1800X上運(yùn)行幀率則可以達(dá)到110fps,這樣的幀率對(duì)于玩游戲來(lái)說(shuō)還是相當(dāng)不錯(cuò)的。Tech Report發(fā)現(xiàn)了更極端的差距,那就是在OpenGL模式下運(yùn)行《毀滅戰(zhàn)士》(Doom)時(shí),7700K幀率達(dá)到170fps,而1800X僅為123fps。Tech Report沒(méi)有對(duì)6900K進(jìn)行測(cè)試,但6950K(10核/20線程)幀率達(dá)到156fps。1800X能提供的幀率確實(shí)略低,但可玩性仍然是相當(dāng)高的。換用更新的Vulkan API而非OpenGL后,它們?cè)趲手g的差距就不復(fù)存在了,7700K和1800X的平均幀率都達(dá)到了165fps。6950X稍微遜色一些,幀率為161fps。

這是我們認(rèn)為1800X是Broadwell-E 6900X“優(yōu)秀備胎”的原因——它以不到一半的價(jià)格提供了與后者相當(dāng)?shù)男阅?。即使?duì)于游戲而言,1800X也是有力的競(jìng)爭(zhēng)者:Ryzen“足夠出色,用戶可能樂(lè)意在運(yùn)行一些軟件時(shí)承受略低的性能,以在運(yùn)行其他軟件時(shí)享受性能的大幅提升”。

目前,1800X非常適合玩游戲,那么未來(lái)呢?隨著游戲?qū)μ幚砟芰σ蟛粩嗵嵘?,可能有一?700K正好處于“可接受的幀率”臨界點(diǎn)上,而1800X則無(wú)法提供“可接受的幀率”,這會(huì)使1800X成為一款不劃算的處理器嗎?

對(duì)未來(lái)進(jìn)行預(yù)測(cè)是一門(mén)不確切的科學(xué),要確定未來(lái)的游戲什么樣是不可能的。在承認(rèn)Ryzen有一些使它顯得不同尋常特性的同時(shí),我們可以做一些合理的推測(cè)。

最常見(jiàn)的觀點(diǎn)是:目前的軟件沒(méi)有針對(duì)Ryzen進(jìn)行優(yōu)化,不過(guò)這種觀點(diǎn)是不正確的。不是軟件沒(méi)有針對(duì)Ryzen進(jìn)行優(yōu)化,而是它采用的軟件優(yōu)化模式與實(shí)際軟件不符。游戲確實(shí)沒(méi)有針對(duì)Ryzen進(jìn)行優(yōu)化,不過(guò)它們也沒(méi)有針對(duì)Broadwell、Skylake或Kaby Lake進(jìn)行優(yōu)化。它們只是進(jìn)行了一般的優(yōu)化,以提升在所有平臺(tái)上的運(yùn)行速度。

缺省設(shè)置影響性能

當(dāng)讓媒體對(duì)Ryzen處理器進(jìn)行測(cè)試和評(píng)測(cè)時(shí),AMD提供了一些令人頗感意外的說(shuō)明:其一,Windows電源設(shè)置選項(xiàng)應(yīng)當(dāng)設(shè)置為“高性能”模式,這一設(shè)置使處理器處于火力全開(kāi)的P0狀態(tài)。在P0狀態(tài),處理器時(shí)鐘頻率最高。在“平衡”模式中,處理器只有在負(fù)荷高的情況下才處于P0狀態(tài)。在負(fù)荷較輕的情況下,處理器處于P1、P2等狀態(tài),這些狀態(tài)下處理器時(shí)鐘頻率會(huì)降低,因此能耗也會(huì)大幅度下降。

但這一技術(shù)也存在缺點(diǎn):在P1(或速度更低的狀態(tài))和P0之間切換,會(huì)帶來(lái)一些性能開(kāi)銷。與在P0狀態(tài)中和完全由處理器內(nèi)部完成小幅度時(shí)鐘頻率調(diào)節(jié)不同的是,各種P狀態(tài)之間的切換要求操作系統(tǒng)介入,需要以毫秒計(jì)的時(shí)間。另外,如果Windows阻塞一個(gè)內(nèi)核,使之處于休眠狀態(tài),把它喚醒、恢復(fù)運(yùn)行也需要時(shí)間。這些操作的影響甚至在性能測(cè)試中也能顯現(xiàn)出來(lái),只是原因尚不清楚。

這是讓人感到意外的,因?yàn)槿藗冾A(yù)計(jì),合理的處理器性能測(cè)試軟件,應(yīng)當(dāng)使處理器始終處于P0狀態(tài)。但游戲并不均衡地使用多個(gè)內(nèi)核和多個(gè)線程,它會(huì)讓部分內(nèi)核處于空閑狀態(tài),Windows會(huì)使這些內(nèi)核進(jìn)入休眠狀態(tài),在以后需要時(shí)再喚醒它們。

AMD表示,測(cè)試者應(yīng)當(dāng)關(guān)閉主板的“高精度事件定時(shí)器”(以下簡(jiǎn)稱“HPET”),稱它會(huì)削弱系統(tǒng)性能。HPET是Windows能用來(lái)設(shè)置內(nèi)部警報(bào)和事件的數(shù)個(gè)定時(shí)器之一。HPET導(dǎo)致性能開(kāi)銷并非沒(méi)有先例,過(guò)去,糟糕的實(shí)現(xiàn)被認(rèn)為能造成性能問(wèn)題,尤其對(duì)于音頻應(yīng)用。

Ryzen的高速緩存層次結(jié)構(gòu)也有些與眾不同。Ryzen和即將發(fā)布的Naples服務(wù)器處理器的基礎(chǔ)構(gòu)件是AMD稱之為“Core Complex”(簡(jiǎn)稱為“CCX”)的模塊,CCX集成有4個(gè)內(nèi)核,每個(gè)內(nèi)核集成有2MB的Level 3緩存。緩存在CCX內(nèi)部是可以共享的,每個(gè)內(nèi)核能訪問(wèn)其他內(nèi)核緩存中的數(shù)據(jù),但訪問(wèn)時(shí)間并不一致,內(nèi)核訪問(wèn)自己緩存的速度要快于訪問(wèn)另外3個(gè)內(nèi)核的緩存。

一個(gè)Ryzen處理器集成有2個(gè)CCX和Infinity Fabric。一個(gè)CCX模塊中的內(nèi)核能訪問(wèn)其他CCX中的Level 3緩存,但比訪問(wèn)同一CCX模塊中的緩存速度慢:一個(gè)CCX模塊中的Level 3緩存帶寬為逾170GB/s。AMD曾表示Infinity Fabric帶寬僅為22GB/s。因此,跨CCX訪問(wèn)緩存的時(shí)間開(kāi)銷更大。對(duì)于主存中的數(shù)據(jù),這一差距是不存在的。內(nèi)存控制器不屬于任一CCX,而屬于北橋,也與Infinity Fabric相連。

在某種程度上,Ryzen運(yùn)行方式與帶有前端總線的傳統(tǒng)SMP系統(tǒng)相似,只是Infinity Fabric代替了總線。在這類系統(tǒng)中,處理器通過(guò)總線與其他處理器和內(nèi)存控制器通信。如果一個(gè)處理器訪問(wèn)的內(nèi)存數(shù)據(jù)能由其他處理器通過(guò)緩存提供,其他處理器會(huì)直接發(fā)送數(shù)據(jù)。否則,內(nèi)存讀取操作必須由內(nèi)存控制器處理。兩個(gè)處理器對(duì)內(nèi)存控制器有相同的訪問(wèn)權(quán)限。

通常情況下,一個(gè)線程被允許一直在同一個(gè)內(nèi)核上運(yùn)行時(shí),系統(tǒng)性能最高,這種情況下緩存存儲(chǔ)有線程所需數(shù)據(jù)的可能性最大。否則,Windows應(yīng)當(dāng)優(yōu)先使線程在同一CCX的內(nèi)核上運(yùn)行,最后才會(huì)把線程切換到另外的CCX上。我們知道,在選擇運(yùn)行線程的內(nèi)核時(shí),Windows會(huì)考慮超線程和內(nèi)存位置,目前尚不清楚Windows是否考慮緩存安排。Ryzen應(yīng)當(dāng)會(huì)考慮緩存安排,因?yàn)樵贑CX間遷移線程是有開(kāi)銷的。

電源管理問(wèn)題也可能會(huì)影響性能。Level 3緩存的運(yùn)行速度與CCX中最快的內(nèi)核相當(dāng),如果CCX運(yùn)行速度因所有內(nèi)核處于空閑狀態(tài)而放慢,其他CCX中線程訪問(wèn)其緩存的速度甚至?xí)陀谡K?。在“高性能”模式下,即使處于空閑狀態(tài)的CCX緩存也始終全速運(yùn)行。

Ryzen還是AMD首款提供細(xì)粒度同步多線程(SMT,與英特爾超線程技術(shù)相似)的處理器。雖然AMD上一代架構(gòu)Bulldozer,可以在邏輯內(nèi)核之間共享資源,每個(gè)邏輯內(nèi)核有自己完整的整數(shù)單元,至少對(duì)于整數(shù)負(fù)載來(lái)說(shuō),它們可以被近似認(rèn)為是“完整”的物理內(nèi)核。在Ryzen中——如同在英特爾處理器中那樣,資源共享的程度要大得多。這也會(huì)影響到緩存使用——同一物理內(nèi)核上的兩個(gè)線程共享Level 1和Level 2緩存,以及能提供最優(yōu)性能的線程數(shù)量。

在同一內(nèi)核上運(yùn)行兩個(gè)計(jì)算密集型線程,它們會(huì)競(jìng)爭(zhēng)相同的共享執(zhí)行資源,影響彼此的性能。線程通常應(yīng)當(dāng)分布在不同內(nèi)核上。這要求操作系統(tǒng)對(duì)邏輯和物理內(nèi)核間的資源共享有更好理解。

Ars Technica表示,綜合考慮上述因素,意味著系統(tǒng)可能不能以最優(yōu)方式利用Ryzen處理器。

關(guān)閉HPET的效果似乎是微不足道的。德國(guó)網(wǎng)站ComputerBase發(fā)現(xiàn),關(guān)閉HPET能使系統(tǒng)性能提升0.5%,與“高性能”模式相比,“平衡”模式降低幅度為0(使每個(gè)內(nèi)核始終處于P0狀態(tài)的游戲)-15%(不能使每個(gè)內(nèi)核始終處于P0狀態(tài)的游戲)。

新系統(tǒng)建議關(guān)閉HPET讓人略感意外,通過(guò)驅(qū)動(dòng)程序或固件更新包解決這些小問(wèn)題是可行的。對(duì)Ryzen的測(cè)試清楚地表明一點(diǎn):系統(tǒng)固件剛發(fā)布不久。事實(shí)上,它發(fā)布時(shí)間確實(shí)很短,主板廠商都在抱怨Ryzen上市銷售過(guò)急,沒(méi)有進(jìn)行正常水準(zhǔn)的測(cè)試工作。

電源管理問(wèn)題略有些棘手,它也似乎是Windows 7和Windows 10表現(xiàn)差距大的原因。Windows 7喜歡交替阻塞線程,在每個(gè)內(nèi)核上保留一個(gè)沒(méi)有阻塞的線程;Windows 10則采取“恰當(dāng)?shù)拇胧?,同時(shí)阻塞一個(gè)空閑內(nèi)核上的兩個(gè)線程,而非只阻塞一個(gè)。這意味著Windows 10有助于延長(zhǎng)系統(tǒng)電池續(xù)航時(shí)間,但也意味著喚醒一個(gè)內(nèi)核時(shí)增加系統(tǒng)開(kāi)銷的可能性更高。

對(duì)于英特爾處理器來(lái)說(shuō),休眠和喚醒內(nèi)核也不是免費(fèi)的。在P狀態(tài)間切換時(shí)英特爾芯片同樣需要操作系統(tǒng)干預(yù),因此導(dǎo)致的“電源管理”問(wèn)題并非是Ryzen特有的。

除非微軟修改Windows設(shè)計(jì),使之不積極地讓內(nèi)核轉(zhuǎn)入休眠狀態(tài),這仍然會(huì)是個(gè)小問(wèn)題。AMD曾表示,4月份發(fā)布的更新包將“優(yōu)化‘平衡’模式下的電源管理策略參數(shù),提升正常使用狀態(tài)下臺(tái)式機(jī)的性能”。想必這意味著不再快速阻塞處理器。

人們希望無(wú)論什么樣的改變都不會(huì)影響移動(dòng)芯片和服務(wù)器版Ryzen的節(jié)能表現(xiàn)。移動(dòng)芯片受到更大的能耗限制,服務(wù)器處理器的總體能耗可能大于臺(tái)式機(jī)處理器,但每個(gè)內(nèi)核的能耗要小得多。在臺(tái)式機(jī)系統(tǒng)上正確的設(shè)置,在其他類型計(jì)算設(shè)備上就可能是錯(cuò)誤的。

至于調(diào)度程序,AMD表示,它研究了Windows 10調(diào)度程序行為,發(fā)現(xiàn)它運(yùn)行正常,因此Windows似乎沒(méi)有在CCX間不必要地遷移線程,并恰當(dāng)?shù)乩昧送蕉嗑€程技術(shù)。

這一難題的另一個(gè)元素是游戲本身。AMD表示,它已經(jīng)發(fā)現(xiàn)“部分能提升游戲?qū)Α甖en’內(nèi)核/緩存拓?fù)浣Y(jié)構(gòu)理解的修改”,不過(guò)它不會(huì)披露相關(guān)細(xì)節(jié)。操作系統(tǒng)可能運(yùn)行正常,但它不會(huì)審視每個(gè)線程的負(fù)載,因此它仍然可能犯錯(cuò)。

例如,如果兩個(gè)線程在相同的共享數(shù)據(jù)集上運(yùn)行,它們應(yīng)當(dāng)分配到同一個(gè)CCX,避免它們通過(guò)相對(duì)較慢的連接傳輸數(shù)據(jù)。Windows不容易發(fā)現(xiàn)共享的數(shù)據(jù),不會(huì)發(fā)現(xiàn)兩個(gè)線程花過(guò)長(zhǎng)時(shí)間等待內(nèi)存數(shù)據(jù)。如果存在足夠多的計(jì)算密集型線程,Windows必須在兩個(gè)CCX上調(diào)度線程,兩個(gè)線程可能被分開(kāi),一個(gè)CCX上有一個(gè)線程。但是,應(yīng)用開(kāi)發(fā)者可以采取措施,把兩個(gè)線程分配到一個(gè)CCX或另外一個(gè)CCX上,確保它們始終位于Infinity Fabric連接的同一端。

更為復(fù)雜的是,根據(jù)應(yīng)用類型,正確的策略可能多種多樣。需求更多帶寬的軟件可能最好將部分線程分配在一個(gè)CCX上,部分線程分配在另一個(gè)CCX上,使得兩套線程能利用Level 3緩存的全部帶寬。但是,對(duì)延遲高度敏感的軟件,可能最好將所有線程分配在一個(gè)CCX上,對(duì)另外一個(gè)CCX“視而不見(jiàn)”。采取正確的措施,將要求對(duì)軟件、緩存使用方式、線程和內(nèi)存進(jìn)行仔細(xì)的檢查。

同理,雖然Windows無(wú)疑理解SMT,在調(diào)度線程時(shí)不會(huì)使忙碌的線程在同一個(gè)物理內(nèi)核上運(yùn)行,但游戲的表現(xiàn)在某種程度上則參差不齊。雖然許多游戲在開(kāi)啟和關(guān)閉SMT情況下的表現(xiàn)幾乎沒(méi)有差別,數(shù)款游戲在開(kāi)啟SMT的情況下表現(xiàn)有所提升,少數(shù)幾款游戲的表現(xiàn)則有相當(dāng)大程度的惡化。出現(xiàn)這種情況的一個(gè)可能原因是,游戲能檢驗(yàn)硬件,“看到”16個(gè)內(nèi)核,并創(chuàng)建16個(gè)計(jì)算密集型線程。這會(huì)迫使線程競(jìng)爭(zhēng)資源。對(duì)游戲進(jìn)行更新,使它能知道SMT處于開(kāi)啟狀態(tài),并因此少創(chuàng)建一些線程,可能能夠解決這個(gè)問(wèn)題。

即使游戲開(kāi)發(fā)者根據(jù)AMD的建議針對(duì)Ryzen設(shè)計(jì)對(duì)游戲進(jìn)行優(yōu)化,也不要預(yù)期游戲性能會(huì)有大幅度提升。雖然未來(lái)驅(qū)動(dòng)程序可能會(huì)有小的改進(jìn),但根據(jù)以往的經(jīng)驗(yàn)判斷,Ryzen未來(lái)運(yùn)行游戲的表現(xiàn)將與目前基本相當(dāng)。

ComputerBase過(guò)去的數(shù)據(jù)提供了一些線索。它以非常低的分辨率對(duì)游戲進(jìn)行測(cè)試,使處理器的負(fù)載達(dá)到最大,使對(duì)顯卡的影響最小化。

2012年,當(dāng)時(shí)剛發(fā)布的FX 8350處理器(采用AMD的Piledriver內(nèi)核),性能相當(dāng)于英特爾Sandy Bridge i5-2500K的85%,與兩款處理器搭檔的是GTX 680顯卡。2015年,通過(guò)利用速度快得多的顯卡——集成有6GB顯存的GTX Titan,兩者的性能差距有所收窄,但幅度非常?。?350性能相當(dāng)于i5-2500K的87%。

對(duì)于沒(méi)有更新或更新幅度很小的游戲,這并不讓人感到太意外。這些游戲絕不會(huì)針對(duì)Ryzen進(jìn)行“優(yōu)化”,雖然顯卡驅(qū)動(dòng)程序或AMD 神秘的“內(nèi)核/緩存拓?fù)浣Y(jié)構(gòu)”建議可能略微提升性能,它們不足以大幅降低游戲?qū)τ?jì)算能力的需求。嚴(yán)重依賴1或2個(gè)計(jì)算密集型線程的游戲,絕不可能很好地支持Ryzen的8個(gè)內(nèi)核和16個(gè)線程。把負(fù)載分配到這些內(nèi)核上,要求重寫(xiě)部分游戲代碼,以充分利用Ryzen的能力。開(kāi)發(fā)者對(duì)已經(jīng)發(fā)布的一款游戲“大動(dòng)干戈”很罕見(jiàn)。

對(duì)于未來(lái)的游戲,或極少數(shù)發(fā)布后得到大幅升級(jí)的游戲,Ryzen的未來(lái)似乎更光明。但對(duì)于AMD來(lái)說(shuō)令人遺憾的是,Broadwell-E,甚至是英特爾尚未發(fā)布的Skylake-E,前景也很光明。

Ars Technica與數(shù)家游戲開(kāi)發(fā)商就優(yōu)化游戲和Ryzen的未來(lái)進(jìn)行了溝通。一些話題很清楚:高性能游戲基本上是利用C++語(yǔ)言開(kāi)發(fā)的,微軟Visual C++是應(yīng)用最廣泛的開(kāi)發(fā)工具。開(kāi)發(fā)者似乎對(duì)手工利用匯編語(yǔ)言開(kāi)發(fā)針對(duì)具體處理器的代碼缺乏興趣。

這也帶來(lái)了一些后果。與任何優(yōu)秀的C++編譯器一樣,Visual C++會(huì)努力優(yōu)化它生成的代碼。例如英特爾處理器能一次譯碼4條指令:3條“簡(jiǎn)單”指令和第四條“復(fù)雜”指令,譯碼后的部分指令能“融合”在一起,這意味著它們能在一個(gè)運(yùn)算單元上執(zhí)行,而非必須使用多個(gè)運(yùn)算單元。

如果編譯器生成兩條緊挨的“復(fù)雜”指令,它們都將競(jìng)爭(zhēng)復(fù)雜譯碼器,其中一個(gè)就必須進(jìn)入等待狀態(tài)。如果編譯器生成連續(xù)的復(fù)雜-簡(jiǎn)單-簡(jiǎn)單-簡(jiǎn)單、復(fù)雜-簡(jiǎn)單-簡(jiǎn)單-簡(jiǎn)單指令序列,所有譯碼器可以得到同時(shí)利用。同樣,如果譯碼器嘗試優(yōu)先生成能融合的指令,這會(huì)釋放更多運(yùn)算單元——它們可以被用來(lái)執(zhí)行更多指令。

過(guò)去,Visual C++的優(yōu)化選項(xiàng)包括針對(duì)具體微架構(gòu)優(yōu)化代碼的能力。這意味著,除遵循最優(yōu)指令譯碼的一般規(guī)則外,偏好某些特定指令序列。例如,當(dāng)為奔騰4處理器編譯代碼時(shí),編譯器可能會(huì)嘗試避開(kāi)“分支”指令——原因在于奔騰4較長(zhǎng)的管道、預(yù)測(cè)錯(cuò)誤后頗高的開(kāi)銷,而使用“條件轉(zhuǎn)移”指令——它根據(jù)第三個(gè)寄存器的結(jié)果,把一個(gè)值由一個(gè)寄存器賦予另外一個(gè)寄存器,不要求使用分支操作。

但是,當(dāng)前版本的Visual C++編譯器不提供針對(duì)特定架構(gòu)生成代碼的能力。其他編譯器——例如gcc,還保留著這一能力。但Visual C++旨在生成通用代碼。鑒于過(guò)去10年英特爾和AMD處理器相似的約束條件,這是合理的,但也產(chǎn)生了一個(gè)后果:如果Ryzen在指令調(diào)度方面有任何特定要求,這些要求可能都無(wú)法滿足。開(kāi)發(fā)者相信他們的編譯器是明智的,他們不會(huì)以手工方式利用匯編語(yǔ)言開(kāi)發(fā)游戲引擎,以充分發(fā)揮編譯器無(wú)法利用的處理器性能。

這會(huì)對(duì)性能產(chǎn)生重大影響:AMD K8處理器中分支預(yù)測(cè)器的不足,要求不同尋常的解決方案,以達(dá)到最高性能。如果Ryzen存在相似的問(wèn)題,無(wú)法生成針對(duì)Ryzen優(yōu)化的代碼,會(huì)影響到系統(tǒng)性能。

但開(kāi)發(fā)者在更高層次上考慮他們針對(duì)的處理器的能力。由Oxide Games和Stardock Entertainment開(kāi)發(fā)的《奇點(diǎn)灰燼》(Ashes of the Singularity),被微軟和AMD作為利用先進(jìn)技術(shù)的游戲范例。這款游戲是DirectX 12的早期采用者,經(jīng)常被用來(lái)展示DirectX 12使游戲引擎可以把負(fù)載更高效地分配到多個(gè)內(nèi)核,從而降低處理器開(kāi)銷和提供最高性能的能力。

很自然,Oxide對(duì)Ryzen有興趣。該公司開(kāi)發(fā)人員向Ars Technica表示,通過(guò)把大型軟件任務(wù)分拆成能并行處理的更小部分,Nitrous引擎能分布到多個(gè)內(nèi)核上運(yùn)行。對(duì)于給定的3D場(chǎng)景,系統(tǒng)集成的內(nèi)核越多,每個(gè)任務(wù)的規(guī)模就越小。Nitrous引擎能自動(dòng)把更大任務(wù)分拆成更小任務(wù)。

未來(lái)

Ars Technica稱,未來(lái),影響游戲性能的一大因素,可能是游戲引擎智能地將負(fù)荷分配在大量?jī)?nèi)核上的能力。Stardock首席執(zhí)行官布拉德·瓦德?tīng)?Brad Wardell)向Ars Technica表示,Nitrous游戲引擎開(kāi)發(fā)者就面臨選擇:致力于提高在更少內(nèi)核上運(yùn)行的速度還是將負(fù)荷分解成能并行運(yùn)行的模塊。由于擁有更多內(nèi)核,Ryzen有助于推動(dòng)游戲引擎的開(kāi)發(fā)走向后一個(gè)方向。其他游戲開(kāi)發(fā)公司可能會(huì)跟風(fēng)。

Oxide的蒂姆·基普(Tim Kipp)也向Ars Technica表示,在運(yùn)行不能并行運(yùn)行的引擎方面,內(nèi)核多的系統(tǒng)表現(xiàn)更好,解決這些問(wèn)題“對(duì)內(nèi)核數(shù)量少的系統(tǒng)也有好處”。

Oxide喜歡能廣泛提升系統(tǒng)性能的算法優(yōu)化。大多數(shù)C++代碼相對(duì)地獨(dú)立于處理器特性,對(duì)一種系統(tǒng)有幫助的技術(shù)——例如對(duì)數(shù)據(jù)打包使之能更好地存儲(chǔ)在緩存中,也對(duì)其他系統(tǒng)有幫助,當(dāng)Oxide提出新技術(shù)時(shí),新技術(shù)將面向更廣泛的系統(tǒng)。

至于使軟件在某種處理器上性能高于其他處理器的技術(shù),想都別想。Oxide高管蒂姆·基普(Tim Kipp)向Ars Technica表示,他們努力避免手工編寫(xiě)匯編語(yǔ)言代碼,因?yàn)榫S護(hù)成本太高。至于像SSE2和AVX這樣的矢量指令——Nitrous廣泛使用了這類指令,基普更愿意使用編譯器內(nèi)聯(lián)函數(shù)。由于內(nèi)聯(lián)函數(shù)能自由地與普通C或C++代碼混用,使用它們比使用匯編語(yǔ)言編寫(xiě)的代碼要容易得多,又能提供匯編語(yǔ)言代碼的大部分性能。

游戲引擎也提供了一些使用Ryzen特性的途徑。瓦德?tīng)柡突障駻rs Technica表示,他們尚沒(méi)有機(jī)會(huì)充分了解Nitrous在Ryzen上運(yùn)行的性能,不過(guò)他們表示,Nitrous有自己的內(nèi)存管理器和向內(nèi)核分配負(fù)荷的調(diào)度程序。大體上,它們會(huì)避免跨CCX內(nèi)存共享,有利于發(fā)揮Ryzen的優(yōu)勢(shì)。

《奇點(diǎn)灰燼》和EA DICE的《戰(zhàn)地1》(Battlefield 1)等游戲,已經(jīng)能高效地利用大量?jī)?nèi)核,把負(fù)載均衡地分配在多個(gè)內(nèi)核上。其他游戲——例如《古墓麗影:崛起》,只能使1或2個(gè)內(nèi)核高負(fù)荷地運(yùn)行,不能高效地利用Ryzen和Broadwell-E提供的多個(gè)內(nèi)核。

未來(lái)數(shù)年,Ars Technica預(yù)計(jì)高性能游戲不能充分利用多個(gè)內(nèi)核的尷尬將成為歷史。雖然它們只能利用2或4個(gè)線程,支持多線程的一個(gè)合理方法,是創(chuàng)建數(shù)個(gè)不同的、定義明確的任務(wù),使每個(gè)任務(wù)在各自的線程中運(yùn)行,例如,一個(gè)線程用于渲染畫(huà)面,一個(gè)線程用于處理音效,一個(gè)線程用于處理人工智能……。但是,隨著開(kāi)發(fā)者需要考慮同時(shí)利用的線程增加到數(shù)十個(gè),這種方法就無(wú)能為力了,像Nitrous中那樣的系統(tǒng)——把畫(huà)面渲染負(fù)載分配到所有內(nèi)核的任務(wù)由游戲引擎本身完成,就至關(guān)重要了。游戲沒(méi)有16個(gè)相互平衡、定義明確的任務(wù)需要完成。它需要分解負(fù)載,充分利用系統(tǒng)能提供的內(nèi)核。

《模擬城市(2013)》(2013 SimCity)的基本限制之一是,核心的模擬引擎只能在一個(gè)線程上運(yùn)行,圖像和音效引擎則能利用多個(gè)線程。但是,由于模擬引擎只能在一個(gè)內(nèi)核上運(yùn)行,這款游戲很快遭遇性能障礙。

較新的游戲也沒(méi)有能擺脫這一問(wèn)題:《文明VI》在Kaby Lake系統(tǒng)上運(yùn)行的性能遠(yuǎn)高于Broadwell-E或Ryzen。線程負(fù)載不均衡,部分內(nèi)核很忙,部分則比較空閑。

把負(fù)載分配在多個(gè)線程上很困難,因?yàn)槊總€(gè)決策——人工智能攻擊這個(gè)還是那個(gè)單元、游戲角色應(yīng)該完成這件還是那件工作,都取決于它之前的所有決策,如果在各自線程上運(yùn)行的兩個(gè)游戲角色選擇同時(shí)完成相同的任務(wù),《模擬城市》就亂套了。雖然可以利用鎖機(jī)制確保只有一個(gè)游戲角色完成任務(wù),由此引發(fā)的開(kāi)銷可能抵消多進(jìn)程帶來(lái)的潛在好處。

在有些游戲中,一定程度上不遵守這一要求是可能的,但《文明VI》這類游戲,要求人工智能控制的角色具有確定性:在地圖和單元相同的情況下,人工智能應(yīng)當(dāng)每次都做出相同的決策。這對(duì)于網(wǎng)游更是必不可少的:所有游戲玩家都需要人工智能游戲角色一視同仁,否則每個(gè)游戲玩家的游戲玩法將互不相同。

集成有大量?jī)?nèi)核的系統(tǒng)未來(lái)更光明。Ars Technica預(yù)計(jì),在新游戲引擎設(shè)計(jì)、DirectX 12和Vulkan普及推動(dòng)下,未來(lái)2年將出現(xiàn)能高效在4個(gè)內(nèi)核、8個(gè)線程上運(yùn)行、畫(huà)面精美的游戲,這無(wú)疑對(duì)Ryzen有利。未來(lái),Windows,甚至游戲本身,將會(huì)改版,以與Ryzen略不同尋常的緩存結(jié)構(gòu)和諧的方式運(yùn)行。但是,部分多線程癥結(jié)將依舊存在,這對(duì)于AMD和英特爾處理器來(lái)說(shuō)可能會(huì)繼續(xù)是個(gè)問(wèn)題。

來(lái)源:Ars Technica

繼續(xù)閱讀與本文標(biāo)簽相同的文章

分享至:

你可能感興趣 換一換

分享到微信朋友圈 ×
打開(kāi)微信,
使用“掃一掃”即可將網(wǎng)頁(yè)分享至朋友圈。