国产免费人成视频在线观看,国产极品粉嫩馒头一线天AV,国产精品欧美一区二区三区,亚洲 古典 另类 欧美 在线

首頁 > 文章 > 經(jīng)濟(jì) > 產(chǎn)業(yè)研究

外媒分析龍芯3A6000:中國最有前途的CPU

鐵君 · 2024-03-20 · 來源:鐵君公眾號
收藏( 評論() 字體: / /

  本文原文是“Chips and Cheese”網(wǎng)站上的《Loongson 3A6000: A Star among Chinese CPUs》,作者是Cheese。此處是對原文的翻譯,翻譯方式為機(jī)器翻譯后再人工校譯。這是一篇專業(yè)性相對較強(qiáng)的CPU微架構(gòu)分析類文章,不過作者基于一些測試軟件分析和推測得到的CPU微結(jié)構(gòu)數(shù)據(jù)可能與實際情況不能完全吻合。

  另:原文作者測試龍芯CPU時是使用的兩根DDR4-2666內(nèi)存,但測試其它CPU時使用的內(nèi)存配置不同。3A5000和3A6000均能支持雙通道DDR4-3200內(nèi)存,當(dāng)使用兩根DDR4-3200內(nèi)存時,3A5000和3A6000的內(nèi)存帶寬和大多數(shù)應(yīng)用軟件的運(yùn)行速度都會有所提升。

  以下是翻譯的原文內(nèi)容:

  計算能力已成為世界各國經(jīng)濟(jì)發(fā)展的重要資源,中國也不例外。該國在CPU領(lǐng)域投入了大量的資源,龍芯處于這一領(lǐng)域的最前沿。我們之前報道了該公司的3A5000 CPU,這是一款四核處理器,每時鐘周期的性能合理,但時鐘頻率太低,不具備競爭力。

  現(xiàn)在,我們來看看龍芯新推出的3A6000 CPU。3A6000也是四核2.5 GHz的規(guī)格,但使用了新設(shè)計的LA664核心。與3A5000的LA464核心相比,LA664的進(jìn)步當(dāng)刮目相看。雖然龍芯LA664延續(xù)了與LA464的指令集和微架構(gòu)設(shè)計,但LA664具有更寬的流水線和更多的執(zhí)行單元。為了讓CPU效率更高,LA664增加了SMT(超線程)支持。如果對超線程的的實現(xiàn)得當(dāng),SMT可以用最小的芯片面積開銷提高多線程性能,但把SMT做好非常困難。

一、評估3A6000(Sizing Up 3A6000)

  7-Zip是一個文件壓縮工具,它能達(dá)到很高的壓縮效率,但相對其它壓縮工具,它可能對CPU性能的要求也更高。它幾乎只使用標(biāo)量整數(shù)指令,所以SIMD擴(kuò)展不起作用。在這里,我們通過壓縮一個很大的ETL文件來測試3A6000的性能,評估指標(biāo)是壓縮速度,每秒壓縮的數(shù)據(jù)越多越好。

  與前代相比,3A6000在不使用SMT(超線程)時,運(yùn)行7-Zip的性能就已經(jīng)獲得了38%的巨大提升。如果加上SMT支持,這一提升還會增加。當(dāng)每個CPU核心只使用一個線程時,四個LA664核心在7-Zip測試中大致相當(dāng)于四個頻率更高的Zen1核心。因此,LA664的每個時鐘周期的性能非常高(譯者注:在相同的頻率下,LA664的性能接近于Intel Raptor Lake核心和AMD Zen 4代核心 )。但因為它只在2.5 GHz下運(yùn)行,由于頻率較低,使它的性能無法與AMD的新款CPU相比。

  使用8個線程(4個物理核心)后,SMT(超線程)使3A6000運(yùn)行7-Zip時的性能再提高了20%,但AMD的Zen 1和Zen 2運(yùn)行7-Zip時能通過SMT獲得40%以上的收益。SMT的作用是為核心提供更明確的并行性,減少平均的運(yùn)行延遲并使流水線保持更加飽和的工作狀態(tài)。一方面,較高的SMT增益表明CPU核心的SMT實現(xiàn)經(jīng)過了很好的調(diào)整。另一方面,這意味著CPU核心在運(yùn)行單個線程時沒有很好地降低延遲。

  (譯者注:7-Zip的性能測試只涵蓋了通用CPU性能評估的一小部分,有的CPU運(yùn)行7-Zip的效率很好,但運(yùn)行其它程序效率可能極差。比如在相同頻率下,10代酷睿一個核心的7-Zip測試成績不到Pentium4的3倍,但對于通用性能綜合測試,10代酷睿的單核同頻性能是Pentium4的5倍左右。)

  與7-Zip不同,libx264視頻編碼大量使用SIMD指令。在x86 CPU上,編碼器將使用SSE、AVX、AVX2,甚至AVX-512(如果可用)。在龍芯上,libx264將利用LSX(128bit)和LASX(256bit) SIMD擴(kuò)展。在這里,我轉(zhuǎn)碼了一個《守望先鋒》的游戲剪輯4K視頻,所有CPU都只使用4個物理核心,評估指標(biāo)是每秒轉(zhuǎn)碼的幀數(shù),幀率越高越好。

  在視頻轉(zhuǎn)碼測試中,當(dāng)啟用的核心數(shù)量相同時,2.5GHz的3A6000性能可以與最高頻率超過4.0GHz的AMD 1800X相提并論。在使用SMT線程以及將任務(wù)限制為每個核心一個線程時,它們的轉(zhuǎn)碼速度互有勝負(fù)。1800X使用Zen 1核心有較的高SMT增益,但可能受到其較弱的AVX2(256bit)實現(xiàn)的限制。3950X的Zen 2核心和3A6000都獲得了30%以上的SMT收益。憑借全面改進(jìn)的架構(gòu)和穩(wěn)固的AVX-512(512bit)實現(xiàn),AMD最新的7950X3D中使用的Zen 4核心脫穎而出。與之前一樣,3A6000僅憑借2.5 GHz的頻率,性能上的表現(xiàn)就相當(dāng)出色。

  核心對核心,LA664把龍芯CPU從低性能的行列中帶了出來,使3A6000能與AMD和Intel以往的高性能產(chǎn)品競爭。Zen 1與Haswell大致相當(dāng),即使在今天,這兩種微結(jié)構(gòu)的CPU仍然可用。現(xiàn)在,讓我們來看看讓龍芯能與那些更高級的產(chǎn)品競爭的核心微架構(gòu)。

二、核心架構(gòu)(Core Architecture)

  LA664是一個6發(fā)射的支持亂序執(zhí)行的CPU核心,具有大量的執(zhí)行資源和深度的指令重排序能力。在這些方面,它具有與最新的英特爾和AMD核心競爭的能力。

  LA664是LA464演進(jìn)的結(jié)果。龍芯3A5000中的LA464核心是一個4發(fā)射的支持亂序執(zhí)行的核心,在各個方面的規(guī)格都比較適中。LA464是一個全面而實用的核心,幾乎沒有明顯的弱點,為龍的進(jìn)步奠定了堅實的基礎(chǔ)。毫無疑問,LA664繼承了LA464的微架構(gòu)設(shè)計。

  當(dāng)然,框圖并不能說明全部情況。分支預(yù)測、執(zhí)行延遲和內(nèi)存訪問性能等因素都會產(chǎn)生巨大影響。

三、龍芯3A6000的前端(The Loongson 3A6000’s Frontend)

  分支預(yù)測(Branch Prediction):

  CPU分支預(yù)測器負(fù)責(zé)預(yù)判程序最可能執(zhí)行的分支,并把跳轉(zhuǎn)的方向告訴前端,這一點非常重要。因為如果分支預(yù)測的方向錯誤,CPU的后端在錯誤的分支上運(yùn)行會浪費(fèi)大量的性能、電能和時間,并要再消耗一些時間才能回到正確的分支上。

  3A6000的分支預(yù)測器具有令人印象深刻的模式識別能力,是迄今為止我們所見過的中國CPU中最好的。它與我們在3A5000中看到的不同,3A5000與最新的Intel和AMD CPU相距甚遠(yuǎn)。然而,由于AMD一直在分支預(yù)測功能上大力投入,它們的Zen 3架構(gòu)仍然領(lǐng)先一步。

  Zen 3通過一個覆蓋預(yù)測器(overriding predictor)來實現(xiàn)這一點。大多數(shù)分支具有簡單的行為,并且可以由第一級快速處理,能力更強(qiáng)但速度較慢的第二級只需介入一些跨度較長的分支即可。有了這個方案,Zen 3的分支預(yù)測器能夠在保持高速的同時跟蹤很長的分支。

  即使3A6000不能與AMD最新的核心相媲美,龍芯也取得了值得稱贊的進(jìn)步。3A5000的分支預(yù)測器看起來更適合從00年代中期到10年代初的高性能內(nèi)核,而不是最近這十年的東西。龍芯在這一領(lǐng)域的投入無疑是3A6000效率提升的一個重要因素。

  分支預(yù)測器速度(Branch Predictor Speed):

  分支預(yù)測器必須既快速又準(zhǔn)確,以避免核心空載浪費(fèi)時間。分支目標(biāo)緩沖區(qū)(Branch Target Buffers,BTB)用來緩存分支目標(biāo),使預(yù)測器跟隨指令流,而無需等待實際的分支指令出現(xiàn)。LA664有一個64條目的L1 BTB,能夠快速處理連續(xù)預(yù)測,在AMD的術(shù)語中稱為“零氣泡(zero bubble)”。BTB未命中的時候,很可能是通過簡單地等待指令字節(jié)從64KB的指令緩存到達(dá),然后通過分支地址計算器來計算目的地來處理的,這實際上看起來像是綁定到指令緩存的1K-4K條目的L2 BTB。

  相比之下,AMD和Intel最新的微架構(gòu)使用了與指令緩存解耦的大型L2甚至L3 BTB。從另一個BTB級別獲取地址可能比等待指令字節(jié)到達(dá)更快,AMD的Zen 4利用這一點,只要BTB包含了這個分支,就可以實現(xiàn)延遲非常低的分支處理。

  此外,將BTB與指令緩存解耦有助于在代碼塊超出L1i容量時保持高IPC,因為預(yù)測器與L1i未命中時產(chǎn)生的延遲隔離。但龍芯不是唯一一種放棄龐大的、解耦的BTB設(shè)計的CPU,Tachyum-Prodigy同樣認(rèn)為這種方法過于昂貴,因為他們很難用標(biāo)準(zhǔn)的單元庫達(dá)到頻率目標(biāo)。與Tachyum的Prodigy一樣,3A6000通過使用64KB的大指令緩存來補(bǔ)償這一點。如果預(yù)測器必須處理較少的L1i未命中延遲,那么這一些弱點就無關(guān)緊要了。

  3A6000似乎還具有更積極的線性指令預(yù)取功能。上面的測試只是讓分支跳到下一個16字節(jié)對齊的塊,所以線性指令預(yù)取器可以很好地處理。相比之下,AMD的預(yù)取似乎完全由分支預(yù)測器驅(qū)動。一旦我們超過了BTB容量,我們基本上都會看到L2延遲。

  間接分支預(yù)測(Indirect Branch Prediction):

  間接分支比直接分支更難預(yù)測。間接分支要跳轉(zhuǎn)到的目標(biāo)不是直接編碼到程序中,而是跳轉(zhuǎn)到寄存器中的地址,3A6000在間接分支預(yù)測方面做得很好。

  3A6000總共可以跟蹤1024個間接目標(biāo),是3A5000的兩倍。3A5000只能跟蹤大約24個獨(dú)立的間接分支,而3A6000可以跟蹤128個以上獨(dú)立的間接分支。相比之下,Zen 2也可以跟蹤1024個間接目標(biāo),因此3A6000與最新的x86 CPU非常一致。

  “返回”預(yù)測(Return Prediction):

  “返回(Return)”操作是一種特殊的間接分支,通常與子程序調(diào)用(Call)成對出現(xiàn)。對于許多計算機(jī)處理器來說,使用堆棧來保存要返回的地址是很常見的。當(dāng)分支預(yù)測器發(fā)現(xiàn)調(diào)用(Call)指令時,它會將當(dāng)前地址推入該堆棧。當(dāng)它遇到返回(Return)指令時,它會從堆棧中彈出一個地址。奇怪的是,3A6000最終將返回堆棧從3A5000中的32個條目減少到只有16個條目。如果兩個核心的SMT線程都處于活動狀態(tài),則有效容量可能會進(jìn)一步下降到8個條目。

  將返回堆棧容量降至16個條目在一定程度上是合理的,因為即使是較小的返回堆棧也可以捕獲大多數(shù)調(diào)用/返回情況。龍芯CPU可能是用間接分支預(yù)測器來處理超出條目數(shù)量的情況,因為超過返回堆棧能容納的數(shù)量時,3A6000只會出現(xiàn)適度的性能下降。英特爾也采用了同樣的策略,在這種情況下,返回堆棧可以被視為對功率和性能優(yōu)化,而不是性能的關(guān)鍵。

  分支預(yù)測精度(Branch Prediction Accuracy):

  7-Zip和其它壓縮工作負(fù)載通常給CPU分支預(yù)測帶來巨大挑戰(zhàn)。3A6000的分支預(yù)測器處理能力令人欽佩,對每條指令的預(yù)測失誤方面與Zen 1不相上下,在準(zhǔn)確性方面,3A6000與Zen 2平分秋色,在這種情況下,準(zhǔn)確性是一個更好的指標(biāo),因為3A6000完成工作執(zhí)行指令的更少。

  因為Loongson的指令流中有更大比例的指令由分支組成,所以每條指令的預(yù)測失誤率更高。AMD最新的Zen 4架構(gòu)仍然領(lǐng)先一步,但龍芯在其分支預(yù)測器方面取得了值得稱贊的進(jìn)展,3A6000令3A5000望塵莫及。

  libx264具有更少的且更容易預(yù)測的分支,但我們?nèi)匀豢梢钥吹綔y試的CPU之間的差異。在這個測試中,ISA(指令集)差異對龍芯有效。3A6000每條指令很少出現(xiàn)預(yù)測失誤,但這是因為它執(zhí)行了更多的指令來完成工作。當(dāng)有更多的非分支指令需要處理時,預(yù)測失誤的比例就會降低。

  (譯者注:libx264的熱點代碼對龍芯LoongArch指令集的匯編優(yōu)化有所不足,通過編譯器直接產(chǎn)生的二進(jìn)制代碼通常會比優(yōu)秀程序員手寫的匯編代碼冗長一些。)

  3A6000分支預(yù)測器的性能與AMD的Zen 2旗鼓相當(dāng)。龍芯再次表明,在設(shè)計準(zhǔn)確的預(yù)測器方面,他們可以和巨人一起玩。

  指令獲取(Instruction Fetch):

  一旦分支預(yù)測器決定了代碼的前進(jìn)方向,目標(biāo)代碼就會被加載到指令緩存中,并保留數(shù)據(jù)便于CPU核訪問代碼。和3A5000差不多,3A6000有一個64KB的4路L1i(一級指令緩存),與只有32KB L1i的英特爾和AMD CPU相比,這是一個不錯的L1i。64KB的L1i以及6個解碼器,使3A6000的前端比上一代產(chǎn)品加寬了50%。

  AMD和英特爾的高性能CPU使用微操作緩存,這可以避免指令解碼成本,同時提供更高的吞吐量。自Zen以來,AMD的微操作緩存理論上每個周期可以提供8個微操作,但核心的吞吐量受到下游重命名階段的限制。

  龍芯3A6000在代碼塊大小超出L1i容量仍時保持了良好的吞吐量。3A5000在從L2運(yùn)行代碼時會莫名其妙地遭遇指令帶寬降低的問題,龍芯在3A6000中解決了這一問題。當(dāng)代碼在L2中時,3A6000可以輕松地每周期執(zhí)行3條指令。

  不幸的是,當(dāng)代碼在L3中時的情況并不樂觀,看起來3A6000似乎沒有改進(jìn)從L3獲取指令的能力。這是一個遺憾,因為Golden Cove和Zen 3每個周期都可以獲得3個4字節(jié)的指令,而龍芯CPU每個周期獲得4字節(jié)指令的數(shù)量低于2個。

四、重命名和分配(Rename and Allocate)

  一旦指令被解碼為微操作,核心就必須分配后端跟蹤資源(譯者注:一般為指令重排序緩沖區(qū)和內(nèi)存重排序緩沖區(qū))。這些資源將會跟蹤指令狀態(tài),并讓核心在輸入的數(shù)據(jù)準(zhǔn)備好后立即執(zhí)行指令,同時仍然確保正確的程序行為和異常處理。這個階段還通過寄存器重命名消除了依賴關(guān)系,并且是實現(xiàn)動態(tài)調(diào)度以及使用各種技巧為指令執(zhí)行增加額外并行性的重要環(huán)節(jié)。

  LA664的重命名器對寄存器清零有一種特殊的方式,x86 CPU總是通過XOR操作把寄存器清零,LA664不使用此類操作,這意味著清零操作不會消耗運(yùn)算單元的資源。

  龍芯的重命名器還對寄存器到寄存器的移動進(jìn)行了一些優(yōu)化。每個周期能執(zhí)行兩個move r,r指令,因此LA664有時可以在寄存器別名表中進(jìn)行指針操作,以打破這種依賴關(guān)系。然而,它不能以全速率進(jìn)行,并且寄存器到寄存器的移動仍然需要ALU(算術(shù)邏輯運(yùn)算器)參與。

  英特爾和AMD都開發(fā)了更先進(jìn)的重命名器,能夠完全消除寄存器到寄存器的移動,而不考慮依賴性。Intel的Golden Cove還可以在重命名階段通過較小的即時性添加來消除添加,進(jìn)一步減少執(zhí)行單元的負(fù)載。

五、亂序執(zhí)行(Out of Order Execution)

  為了實現(xiàn)亂序執(zhí)行,在重命名和分配階段必須在必要的隊列和緩沖區(qū)中找到條目來跟蹤指令狀態(tài)。更大的緩存區(qū)可以讓核心在指令流中回溯更遠(yuǎn),從而更好地發(fā)現(xiàn)可以并行的指令。龍芯3A6000有一個規(guī)模較大的亂序引擎,比3A5000有了很大的進(jìn)步。

  與3A5000相比,寄存器堆和內(nèi)存重排序隊列等主要結(jié)構(gòu)的大小至少增加了25%。LA464的分支順序緩沖區(qū)過小,LA664對此進(jìn)行了改進(jìn)。LA664最終具有與AMD的Zen 3相當(dāng)?shù)闹匦屡判蚰芰ΑEc英特爾的Golden Cove相比,Zen 3和LA664仍然很小,后者擁有巨大的512個條件的ROB和其它更大的結(jié)構(gòu)。

六、超線程實施(SMT Implementation)

  更大的亂序緩沖區(qū)對于提高單線程性能至關(guān)重要,但增大緩沖區(qū)的回報會很快減少。SMT通過向操作系統(tǒng)提供多個邏輯核心并在線程之間劃分資源來抵消這些遞減的回報。因此,啟用SMT的CPU可以保持最大的單線程性能,同時在多個硬件線程空閑時能像幾個較小的核心一樣工作。AMD、Intel和龍芯都是每個核心暴露兩個SMT線程。

  雖然SMT的好處顯而易見,但實施起來卻很困難。當(dāng)操作系統(tǒng)在多個硬件線程上調(diào)度工作時,核心必須實時重新配置自己。工程師必須決定如何在兩個線程的模式下管理各種核心資源。也就是說,SMT的結(jié)構(gòu)可以是:

  雙倍資源:每個線程都擁有資源的一個副本。在一線程模式下,第二個副本只是未使用。這會浪費(fèi)芯片的面積,但可能更容易調(diào)整和驗證。不必?fù)?dān)心資源會被一個線程耗盡,當(dāng)?shù)诙€線程也處于活動狀態(tài)時就無法獲得可用的資源。

  靜態(tài)分配:每個線程獲得一半的資源。當(dāng)一個線程處于停止?fàn)顟B(tài)時,另一個線程可以使用所有條目,因此這種方法能更有效利用芯片面積。但這很難驗證,因為當(dāng)兩個線程都工作時,資源將不得不被耗盡并重新配置。但調(diào)整仍然不太難,因為將資源分成兩半可以確保線程之間的某種程度的公平性。

  動態(tài)調(diào)整:在雙線程模式下,一個線程消耗的資源條目可以超過一半。這有更大的靈活性和更潛在的性能,但調(diào)優(yōu)更難。更高的資源分配可以提高一個線程的性能,但對另一個線程會產(chǎn)生不成比例的影響(使其缺乏關(guān)鍵資源)。

  競爭性共享:所有線程都是自由使用所有資源。即使一個線程處于活動狀態(tài),另一個線程也可以使用所有條目,靈活性和潛在性能最大化。例如,如果一個線程正在運(yùn)行浮點代碼,而另一個線程在運(yùn)行純整數(shù)代碼,那么競爭性地共享調(diào)度器將使兩個線程都能滿足資源需求。但調(diào)整和驗證變得更加困難,缺少資源是一種更常見的可能性,工程師們必須小心避免這種情況。

  龍芯選擇了一種保守的SMT實現(xiàn)方式,其中大多數(shù)資源都是靜態(tài)分配的。包括ROB、寄存器文件和加載/存儲隊列。

  3A6000上的部分資源是動態(tài)調(diào)整,整數(shù)運(yùn)算調(diào)度器最高似乎能使用30個條目左右,因此即使SMT同級線程處于活動狀態(tài),運(yùn)行在3A6000上的線程也可以與在3A5000上運(yùn)行時使用幾乎一樣多的調(diào)度器條目。

  AMD的Zen 2靜態(tài)地劃分重排序緩沖區(qū),并對浮點運(yùn)算調(diào)度器和非調(diào)度隊列使用某種動態(tài)分配方案。但除此之外,AMD選擇了一種非常激進(jìn)的SMT實現(xiàn)方式。寄存器文件、加載隊列和整數(shù)調(diào)度器是競爭性共享的。這可以部分解釋Zen 2令人印象深刻的SMT提升。

  對于龍芯來說,采取一種不那么激進(jìn)、更容易驗證的方法可能是合理的。3A6000是他們的第一款支持SMT的CPU,過于雄心勃勃反而是容易失敗的路線。

七、整數(shù)運(yùn)行(Integer Execution)

  3A6000的整數(shù)執(zhí)行部件與前代相比變化最小,但增加的50%的調(diào)度條目應(yīng)該會提高ALU(算術(shù)邏輯單元)利用率。與3A5000一樣,3A6000有四個ALU部件,能夠執(zhí)行最常見的操作。兩個端口可以處理分支,兩個端口可用于整數(shù)乘法,這樣的設(shè)計與Zen 2大致相當(dāng)。但與Zen 2相比,龍芯有兩個整數(shù)乘法部件。Zen 2具有更大的總調(diào)度能力,但將Zen 2的分布式調(diào)度器與龍芯的統(tǒng)一調(diào)度器進(jìn)行比較并不簡單。Zen 2可能會遇到16個入口隊列中的其中一個在其他隊列之前填滿的情況,這將導(dǎo)致重命名器處的資源停滯。

  龍芯將整數(shù)除法吞吐量從3A5000的0.11指令/周期提高到了0.25指令/周期,把延遲從9周期降低到了4周期。這種改進(jìn)是一個奇怪的選擇,因為大多數(shù)代碼避免使用除法指令,因為它們從以前到現(xiàn)在都非常慢。也許是因為龍芯必須從頭開始構(gòu)建他們的軟件生態(tài)系統(tǒng),所以增加晶體管的數(shù)量提高運(yùn)算單元的速度是值得的。

八、矢量和浮點運(yùn)行(Vector and Floating Point Execution)

  龍芯的3A5000具有LASX擴(kuò)展的256位矢量功能,但采用了僅兩個256位單元的保守實現(xiàn)。3A6000對FPU進(jìn)行很大的修改,它現(xiàn)在有四個執(zhí)行單元。所有四個單元都可以處理封裝為256位的浮點加法運(yùn)算,使3A6000具有非常強(qiáng)的浮點加法性能。競爭對手的x86 CPU每個周期只能進(jìn)行兩次封裝為256位的浮點加法運(yùn)算。龍芯對封裝為256位的浮點乘法和基本整數(shù)運(yùn)算的性能與Zen 2相似。

  奇怪的是,標(biāo)量浮點運(yùn)算并沒有得到同樣的增強(qiáng),只有兩個部件可以處理標(biāo)量浮點運(yùn)算。更奇怪的是,標(biāo)量浮點乘法似乎使用了與矢量乘法不同的單元。

  盡管龍芯增加了額外的浮點單元,使整體的浮點性能有所提升,但峰值融合乘加(FMA)吞吐量沒有改變。LA464和LA664每個周期都可以執(zhí)行一次FMA操作,使其FMA吞吐量達(dá)到AMD的Zen 2或Intel Skylake的一半。

  除了提高吞吐量,龍芯還降低了執(zhí)行延遲,浮點加法的延遲為3個周期,與Zen 3一樣。然而,AMD的Zen 3和英特爾的Golden Cove總體上仍然具有更低的浮點執(zhí)行延遲。尤其英特爾可以在2個周期延遲的情況下完成浮點加法,并且在更高的時鐘頻率下也可以做到。

  與整數(shù)功能一樣,浮點調(diào)度程序條目也增加了50%,達(dá)到48個條目。這本身可能比額外的執(zhí)行單元提供了更多的浮點性能提升,兩者共同使3A6000在矢量和浮點工作負(fù)載方面成為一款強(qiáng)大的CPU。

  AMD的Zen 2也有四個FPU(浮點計算單元),也可以將所有四個單元用于基本的矢量整數(shù)運(yùn)算。然而,它使用了一個巧妙的非調(diào)度隊列,即使36個條目的調(diào)度器已滿,也可以避免重命名器停滯。這使得后端可以動態(tài)地保存更多的浮點或矢量操作,即使它不能通過搜索這些操作來找到額外的指令級并行性。

九、地址生成(Address Generation)

  與LA464相比,龍芯在LA664上極大提高了地址生成能力。LA464有兩個通用裝載(讀內(nèi)存)/儲存(寫內(nèi)存)部件,LA664將其分成兩個裝載(讀內(nèi)存)部件和兩個儲存(寫內(nèi)存)部件。

  這意味著LA664每周期可以處理比Zen 3更多的標(biāo)量內(nèi)存操作,并且可以處理與Golden Cove相同數(shù)量的內(nèi)存操作。不過Zen 3和Golden Cove更靈活,因為與LA664的每個循環(huán)2個裝載操作相比,它們在一個循環(huán)中最多可以發(fā)出3個裝載操作,但這是對LA464的每個循環(huán)單個操作的重大升級。至于向內(nèi)存寫入數(shù)據(jù),LA664、Zen 3和Golden Cove(12代酷睿)在每個周期都是2個標(biāo)量儲存操作,而LA464在每個周期只能處理一個儲存操作。LA664每個周期可以處理兩個256位矢量訪問,這些也可以是加載和存儲的任意組合。

十、內(nèi)存排序(Memory Ordering)

  一旦生成了地址,加載/存儲單元就必須確保內(nèi)存訪問看起來是按程序順序執(zhí)行的(譯者注:會根據(jù)實際的指令執(zhí)行順序調(diào)整內(nèi)存訪問順序)。加載時也可能必須從剛剛進(jìn)行的存儲中獲取結(jié)果(譯者注:執(zhí)行內(nèi)存寫操作后,數(shù)據(jù)要數(shù)個周期后才能真正地保存到內(nèi)存中,此時不能從內(nèi)存中加載剛剛存儲的數(shù)據(jù)),與先前的3A5000一樣,3A6000可以處理從大約7個周期內(nèi)的先前存儲中加載的情況。部分重疊的情況會導(dǎo)致14個周期的損失,可能加載操作會被阻塞,直到存儲操作完成并寫回L1D(一級數(shù)據(jù)緩存)。

  Zen 2具有相同的7周期延遲和14周期部分重疊產(chǎn)生的損失,但Zen 2可以處理64字線緩存上的轉(zhuǎn)發(fā),只需額外的周期損失,而龍芯則很難處理這種情況。由于Zen 2可以運(yùn)行的頻率比LA664高得多,因此7個周期的轉(zhuǎn)發(fā)延遲對于龍芯來說損失的時間更長。Goldmont Plus的目標(biāo)頻率在2 GHz以上,具有5個周期的存儲轉(zhuǎn)發(fā)延遲和10個周期的故障情況。

  LA664的存儲轉(zhuǎn)發(fā)行為看起來很像它的上一代,但LA664消除了因地址未對齊(譯者注:通常當(dāng)內(nèi)存地址不是4或8的整數(shù)倍時就是未對齊)而造成的10個周期的損失,并將其降至僅3個周期。這方面LA664比Zen 2稍微好一點,Zen 2需要2到5個周期來處理地址未對齊的存儲。

  跨越64字節(jié)邊界的存儲轉(zhuǎn)發(fā)處理仍然很差,但損失已經(jīng)從31個周期下降到了可以容忍的21個周期。

  下面分別是3A6000和3A5000存儲到加載轉(zhuǎn)發(fā)延遲測試,使用Henry Wong的方法測量,代碼由Clam基于LoongArch指令集編寫:

十一、緩存和內(nèi)存訪問(Cache and Memory Access)

  良好的緩存和內(nèi)存層次結(jié)構(gòu)對于保持現(xiàn)代高性能CPU的數(shù)據(jù)供應(yīng)至關(guān)重要。3A6000保留了與3A5000類似的緩存層次結(jié)構(gòu),但總體上略有改進(jìn)。

  由于龍芯CPU無法動態(tài)提高時鐘速度,因此他們通過縮短流水線訪問緩存的路徑減少延遲。

  延遲(Latency):

  3A6000的L1D(一級數(shù)據(jù)緩存)延遲從3A5000的四個周期下降到了三個周期。我認(rèn)為低時鐘CPU的目標(biāo)就是3個周期的L1D延遲,很高興在3A6000上看到這一點。

  許多現(xiàn)代CPU將L2(二級緩存)用作中間緩存,以便在L1(一級緩存)未命中時與延遲相對較高的L3(三級緩存)隔離開來。3A6000與以前的Intel CPU一樣,繼續(xù)使用256 KB的二級緩存,較新的AMD和Intel CPU傾向于使用更大的L2。Zen 4使用了1MB的L2,而英特爾的Raptor Lake則選擇了2MB的L2。盡管龍芯沒有實現(xiàn)更大的L2,但他們確實設(shè)法將延遲從14個周期降低到了12個周期。假設(shè)L1以相同的速度處理命中和未命中,L1到L2的路徑可能只減少了一個流水線級。

  Zen 2、3A6000和3A5000都具有一個由四個核心共享的16 MB L3緩存。3A6000將L3延遲減少了幾個周期,盡管這可能是因為檢查L2的速度快了兩個周期。

  最后,訪問DRAM的延遲從144ns縮短到了104ns。3A5000有一個(延遲)可怕的DDR4控制器,它之所以被使用,是因為它的運(yùn)行頻率較低,意味著雖然延遲時間較高,但時鐘周期計數(shù)卻和主流產(chǎn)品相近,也就是說對IPC的影響很小。

  3A6000的內(nèi)存控制器得到極大的改進(jìn),雖然104 ns的延遲仍然不太好,但它的周期計數(shù)方面的延遲遠(yuǎn)低于頻率更高的3950X。因此,3A6000至少通過減少DRAM存取延遲的周期弱化了低頻率的一些缺點。盡管如此,對于單片芯片上的DDR4-2666設(shè)置來說,104 ns并不是很好。

  雖然3A6000的周期計數(shù)延遲具有競爭力,但我們必須考慮實際延遲時間。因為龍芯的CPU頻率無法接近現(xiàn)代AMD和Intel CPU,它在包括L1在內(nèi)的每個緩存級別都較慢。這就解釋了為什么盡管LA664有比Zen 2更強(qiáng)的重新排序能力和更高的IPC,但基于LA664的3A5000在很多方面反而不如基于Zen 2的產(chǎn)品。

  帶寬(Bandwidth):

  內(nèi)存帶寬會影響性能,尤其是對于矢量化的多線程應(yīng)用程序。3A6000在很大程度上繼承了上一代的內(nèi)存層次結(jié)構(gòu),但龍芯再次在各個方面進(jìn)行了改進(jìn)。

  3A5000的每周期L1D帶寬就已經(jīng)與英特爾的Skylake或AMD的Zen 2類似了,3A6000則通過改進(jìn),實現(xiàn)了寫入帶寬翻倍。基本上,3A6000的任何寫入和讀取組合都可以在每個時鐘周期以256bit的位寬訪問兩次L1D。

  因此,盡管3A6000的頻率很低,但它具有令人印象深刻的L1D寫入帶寬。LA664打破了Golden Cove的唯一,和它一起成為了存儲帶寬達(dá)到每個周期512bit(譯者注:原文此處誤寫為byte)的面向消費(fèi)市場的CPU核心。

  下圖是三款CPU的單線程讀寫緩存和內(nèi)存時的帶寬,其中AMD是服務(wù)器CPU的數(shù)據(jù),因為我手上只有這個數(shù)據(jù)。訪問小尺寸數(shù)據(jù)時是CPU內(nèi)部的L1、L2、L3緩存在起作用,隨著讀寫數(shù)據(jù)的尺寸增加,超過緩存的容量后,會很快降低到訪問物理內(nèi)存時的讀寫帶寬。

  (譯者注:從本文后面的內(nèi)容可知,作者測試龍芯CPU時是使用的DDR4-2666內(nèi)存,但3A5000及3A600都支持DDR4-3200內(nèi)存,因?qū)?nèi)存帶寬的測試結(jié)果沒有完全體現(xiàn)出龍芯CPU訪問內(nèi)存的速度。)

  下圖是三款CPU多線程讀寫內(nèi)存時的帶寬:

  LA664的256KB L2基本上與上一代相同,每個讀取帶寬周期有21-22字節(jié),寫入帶寬相同。因此,3A6000的每周期L2帶寬仍然低于AMD或Intel 最新的任何CPU。與Intel CPU相比,這一差距變得特別大,后者到L2的路徑每周期能訪問64字節(jié)。

  下圖是三款CPU每個時鐘周期的內(nèi)存訪問帶寬:

  在訪問L3的階段,LA664的帶寬比前代增加了33%。L3的18.7字節(jié)/周期使龍芯的表現(xiàn)好于以前的英特爾CPU,但AMD異常強(qiáng)大的L3實現(xiàn)仍然領(lǐng)先。

  為多個核心設(shè)計共享的緩存帶來了額外的挑戰(zhàn),因為必須擴(kuò)展緩存帶寬以滿足多個核心的訪問。當(dāng)所有硬件線程都在載入數(shù)據(jù)時,3A6000可以在每個時鐘周期為每個核心提供16.55個字節(jié)。這比在只有一個核心運(yùn)行而沒有其他核心競爭的情況下所能得到的只少一點,總體上表現(xiàn)非常好。較舊的3A5000在所有四個內(nèi)核都已加載的情況下,每個內(nèi)核每個周期只能提供略高于10個字節(jié)的數(shù)據(jù),而在單個內(nèi)核處于活動狀態(tài)的情況下每個周期可以提供13.7個字節(jié)。這表明3A5000的L3在多核同時訪問時存在爭搶,3A6000在很大程度上解決了這一問題。AMD的Zen 4再次提供卓越的L3帶寬,即使多個內(nèi)核正在訪問緩存,每個內(nèi)核的每個周期也超過24字節(jié)。

  龍芯的3A5000有一個糟糕得可怕的DDR4控制器。謝天謝地,3A6000有一個更好的。它在技術(shù)上支持DDR4-3200,但在使用兩個內(nèi)存通道時,我們無法以3200的速度穩(wěn)定啟動(譯者注:龍芯的CPU和主板對內(nèi)存的兼容性不如Intel和AMD,但整機(jī)配套的以及經(jīng)銷商推薦的型號都是經(jīng)過測試驗證的)。當(dāng)配備雙通道DDR4-2666時,3A6000實現(xiàn)的DRAM讀取帶寬大致與Core i5-6600K不相上下。該芯片的第一代DDR4控制器只能以完美的穩(wěn)定性使用DDR4-2133(至少我得到的樣品是這樣),但與具有更快內(nèi)存的3A6000相比,它具有更好的DRAM讀取帶寬。

  盡管3A6000的DRAM讀取性能平平,但它在寫入方面確實有訣竅。當(dāng)龍芯檢測到緩存被覆蓋而不依賴于其先前的內(nèi)容時,它可能會避免讀取訪問請求。這可能有助于某些訪問模式,但好處可能有限,因為程序的讀取量往往遠(yuǎn)遠(yuǎn)多于寫入量。

十二、核心到核心延遲(Core to Core Latency)

  這項測試使用原子指令的比較和交換操作,獲得每個核心之間信號反彈的時間。

  龍芯3A6000的表現(xiàn)沒有帶來任何驚喜,但這是一件好事。

十三、結(jié)束語(Final Words)

  龍芯的工程師們有很多值得驕傲的地方。創(chuàng)建一個與Zen 2類似的分支預(yù)測器并不容易,考慮到龍芯在3A5000中的表現(xiàn),這一成就更加令人印象深刻。同樣,SMT也很難做好,龍芯成功地做到了這兩件事。同時龍芯大幅擴(kuò)大了亂序執(zhí)行的規(guī)模,并改善了其DDR4控制器的性能。由此帶來的巨大性能提升使基于LA664的3A6000與主頻4.0GHz左右的Zen 1架構(gòu)的CPU不相上下,至少當(dāng)物理核心的數(shù)量相同時是這樣。

  中國在努力減少經(jīng)濟(jì)發(fā)展依賴外國CPU的情況,3A6000是努力的一部分。在減少對外國依賴這方面,3A6000是向前邁出的一大步。Zen 1在今天仍然很實用,所以中國消費(fèi)者可能會發(fā)現(xiàn)3A6000的性能對于輕量級的日常任務(wù)來說是可以接受的。龍芯的軟件生態(tài)系統(tǒng)對芯片可用性的影響將遠(yuǎn)遠(yuǎn)大于其性能。

  但龍芯的次要目標(biāo)是與Intel和AMD等西方公司一起成為世界級的CPU制造商。在這方面,他們還有很長的路要走。Zen 1級單核性能值得稱贊,但我們必須記住,Zen 1在與英特爾的競爭中獲得了市場份額,是因為它將價格合理的6核和8核產(chǎn)品帶入了消費(fèi)者平臺,而不是因為它可以在與Skylake的競爭中贏得核心對核心的勝利。3A6000只是一個四核產(chǎn)品,因此缺乏Zen 1最大的優(yōu)勢。

  龍芯還將3A6000與英特爾的酷睿i3-10100進(jìn)行了比較,后者是一款四核Skylake產(chǎn)品,具有6 MB的緩存和4.3 GHz的睿頻。雖然名義上是第10代部件,但i3-10100與2015年的酷睿i7-6700K(譯者注:i7-6700K是6代酷睿的最高端型號)更具可比性。英特爾的第10代更廣為人知的是,它將10核CPU納入了公司的消費(fèi)級產(chǎn)品陣容,其中6核和8核產(chǎn)品構(gòu)成了中端產(chǎn)品。除了更多的核心之外,i5-10600K和i7-10700K等部件還具有更高的睿頻。3A6000將無法與這些產(chǎn)品競爭。龍芯還將與Zen 2作斗爭,我們已經(jīng)看到3950X在核心對核心的測試中戰(zhàn)勝了3A6000,但只有當(dāng)超過四個Zen 2核心發(fā)揮作用時,這種差距才會擴(kuò)大。

  如今,英特爾的Golden Cove衍生產(chǎn)品和AMD的Zen 4比3A6000的優(yōu)勢更大。AMD和英特爾的消費(fèi)級產(chǎn)品陣容中基本上都沒有四核產(chǎn)品。龍芯的3A6000可能是我們在中國看到的最有前途的CPU,它比迭代ARM A72的拙劣嘗試更令人興奮。但龍芯的工程師們?nèi)杂泄ぷ饕觯覀兤诖吹剿麄兿乱徊降谋憩F(xiàn)。

「 支持烏有之鄉(xiāng)!」

烏有之鄉(xiāng) WYZXWK.COM

您的打賞將用于網(wǎng)站日常運(yùn)行與維護(hù)。
幫助我們辦好網(wǎng)站,宣傳紅色文化!

注:配圖來自網(wǎng)絡(luò)無版權(quán)標(biāo)志圖像,侵刪!
聲明:文章僅代表作者個人觀點,不代表本站觀點——烏有之鄉(xiāng) 責(zé)任編輯:焦桐

歡迎掃描下方二維碼,訂閱烏有之鄉(xiāng)網(wǎng)刊微信公眾號

收藏

心情表態(tài)

今日頭條

點擊排行

  • 兩日熱點
  • 一周熱點
  • 一月熱點
  • 心情
  1. 畫皮正在一張張揭下來
  2. 一片哀嚎
  3. 偽君子
  4. 明德先生|家族式腐敗——為什么2019年起舉報不斷,直到2022年才全面初核?
  5. 地獄國家!聯(lián)合國救不了,美國救不了,中國也救不了
  6. 3件事:印度對中國出手,蕭美琴有動作,大事要來了?
  7. 論當(dāng)前教育戰(zhàn)線上的兩條路線斗爭
  8. 女子跪包拯像前痛哭失聲視頻火遍全網(wǎng)說明了什么?
  9. 這支強(qiáng)大的神秘力量,終于把美國逼到了墻角!
  10. 秦明|毛主席也會“犯錯”:由“毛主席在趙紫陽一封信上的批語”說起
  1. 重大原則立場問題,“體制”不能再裝聾作啞了!
  2. 莫言對遼沈戰(zhàn)役紀(jì)念館的題詞到底是要表達(dá)什么意思?
  3. 有意思的電視劇臺詞
  4. 戰(zhàn)爭已經(jīng)打響,我們卻渾然不覺
  5. 漢奸數(shù)量超過歷史總和?中國最大的敵人在內(nèi)部!
  6. 畫皮正在一張張揭下來
  7. 吳銘|中國高水平金融開放的好效果
  8. 一片哀嚎
  9. 偽君子
  10. 秋石:魯迅之孫周令飛是一個不肖子孫
  1. 毛主席晚年為什么要發(fā)動那場群眾運(yùn)動?
  2. 趙磊:不反思私有化改制,何以“解放思想”?——評《漫長的季節(jié)》
  3. 可怕的不是莫言,可怕的是各高校邀請他巡回演講
  4. 郭建波:關(guān)于二月鎮(zhèn)反的歷史考察
  5. 劉繼明論莫言
  6. 毛遠(yuǎn)新 | 關(guān)于1973年基辛格訪華
  7. 為什么湖南省委發(fā)起解放思想大討論卻嚇壞了西方媒體?
  8. 國際政治生態(tài)的重大變化?
  9. 他們看到問題了?
  10. 還主席清白!毛劉言論實錄,說明一切!
  1. 說說紅軍老兵劉金山飛奪瀘定橋、夜攀臘子口的故事
  2. 佐伊|二月樓市全線暴跌!!房地產(chǎn)還有未來嗎?
  3. 重大原則立場問題,“體制”不能再裝聾作啞了!
  4. 中國為啥不想打仗?
  5. 有意思的電視劇臺詞
  6. 莫言對遼沈戰(zhàn)役紀(jì)念館的題詞到底是要表達(dá)什么意思?