最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【知乎】龍芯3A5000:中國的最佳選擇?

2023-10-30 02:35 作者:失傳技術(shù)  | 我要投稿


龍芯3A5000:中國的最佳選擇?


悲催的襪子


程序猿 飛蚊癥 抑郁癥患者

急招:①GPU編譯器開發(fā)專家 ②GPU Architecture Modeling Expert?③顯存技術(shù)主管

另有體系結(jié)構(gòu)、編譯原理、圖形學(xué)大量工作&實(shí)習(xí)機(jī)會,應(yīng)屆生不要求相關(guān)經(jīng)驗(yàn),編程基礎(chǔ)扎實(shí)即可,工作965,有大牛帶

Loongson’s 3A5000: China’s Best Shot?chipsandcheese.com/2023/04/09/loongsons-3a5000-chinas-best-shot/

我們在Chips and Cheese上報(bào)道了兩種中國CPU架構(gòu):兆芯基于x86開發(fā)的陸家嘴架構(gòu),該架構(gòu)用在KX-6000系列的CPU中,以及飛騰基于ARM開發(fā)的FTC663架構(gòu),該架構(gòu)用在D2000系列CPU中。兆芯成立于2013年,是威勝和上海市政府的合資企業(yè)。飛騰成立于2014年,其FTC663似乎是衍生于Cortex A72架構(gòu)。因此,它們都是中國國內(nèi)微處理器推進(jìn)計(jì)劃中相對較新的努力。

本文將介紹龍芯公司的最新產(chǎn)品——3A5000,這是中國自主CPU漫長發(fā)展歷程中的最新一代。3A5000采用的LA464架構(gòu)源自于GS464核心,該核心誕生于第十個五年計(jì)劃,計(jì)劃通過“863“等項(xiàng)目資助國內(nèi)微處理器的研發(fā)。GS464的大部分開發(fā)工作都是在中國科學(xué)院計(jì)算技術(shù)研究所(ICT)的領(lǐng)導(dǎo)下進(jìn)行的。ICT有著悠久的歷史,可追溯至1956年,曾承擔(dān)過眾多國家級重大項(xiàng)目,如建設(shè)超級計(jì)算機(jī)和培養(yǎng)計(jì)算機(jī)研究人才等。

GS464在多年的發(fā)展中進(jìn)行了許多改進(jìn)。“十一五”期間,中國提出了推動國產(chǎn)高性能CPU和DSP的目標(biāo),并啟動了“HGJ”項(xiàng)目。ICT通過大幅增加結(jié)構(gòu)大小來應(yīng)對這一計(jì)劃,盡管內(nèi)核仍然被稱為GS464。在第十一個五年計(jì)劃接近尾聲時(shí),該內(nèi)核被傳遞給新成立的龍芯科技有限公司。然而,至少一些相同的人繼續(xù)在GS464處理器系列上工作,因?yàn)橄嗤男彰霈F(xiàn)在隨后的研究出版物上(例如胡偉武)。

這為“十二五”計(jì)劃制定了基礎(chǔ),該計(jì)劃旨在促進(jìn)“中國國產(chǎn)CPU和DSP的應(yīng)用”[4]。在這些目標(biāo)下,龍芯公司生產(chǎn)了一款100 MHz的抗輻射CPU,用于北斗衛(wèi)星。當(dāng)然,通用CPU也在計(jì)劃中。GS464當(dāng)時(shí)存在分支預(yù)測和內(nèi)存性能不佳的問題。為了應(yīng)對這些問題,龍芯開始著手開發(fā)GS464E架構(gòu),該架構(gòu)借鑒了IBM POWER7、Intel Ivy Bridge和ARM Cortex A9的研究成果。目前,我們在3A5000中看到的LA464核心似乎正是基于GS464E架構(gòu)發(fā)展而來。

3A500處理器的LA464核心已經(jīng)從MIPS架構(gòu)轉(zhuǎn)變?yōu)辇埿咀灾餮邪l(fā)的架構(gòu),通常被稱為LoongISA或LoongArch。如今,龍芯希望3A5000能夠應(yīng)用于從個人電腦到服務(wù)器再到嵌入式的所有領(lǐng)域。我們將深入探討該架構(gòu),并看看它如何嘗試實(shí)現(xiàn)這一承諾。當(dāng)然,我們也會將其與一些AMD、ARM和Intel架構(gòu)進(jìn)行比較。

我們的許多微基準(zhǔn)測試依賴于匯編代碼。編譯器往往會做出不可預(yù)測的復(fù)雜操作,這使得從高級代碼中觀察架構(gòu)特性會很困難。不幸的是,這意味著我們必須編寫大量代碼來研究龍芯公司的3A5000。編寫匯編可能很困難,而為陌生的ISA(LoongArch64)編寫匯編更是難上加難。探測微基的準(zhǔn)代碼也并不容易。通常,我們可以在具有已知特性的CPU上運(yùn)行測試并確保結(jié)果合理來驗(yàn)證測試。但龍芯公司的3A5000是我們唯一擁有的LoongArch64 CPU,大多數(shù)細(xì)節(jié)也不公開。誤差的可能性很高,請?jiān)谡恼轮杏涀∵@一點(diǎn)。

框圖

LA464 是一個4路亂序處理器,具有大小適中的緩沖區(qū),擁有許多現(xiàn)代處理器特性,例如物理寄存器文件和超寬的向量執(zhí)行引擎,但并不是所有方面都是如此??傮w來說,它的設(shè)計(jì)非常獨(dú)特,具有一些其他內(nèi)核所沒有的設(shè)計(jì)決策。

前端:分支預(yù)測

CPU的流水線從分支預(yù)測器開始,分支預(yù)測器決定從哪里獲取指令,對于實(shí)現(xiàn)高性能CPU至關(guān)重要。將流水線引向錯誤的目的地會導(dǎo)致工作的浪費(fèi),而確定跳轉(zhuǎn)目標(biāo)的時(shí)間過長可能會導(dǎo)致流水線饑餓。3A5000的分支預(yù)測的準(zhǔn)確性似乎相當(dāng)不錯,在7-Zip中能與Zen 1和Ampere Altra并駕齊驅(qū),在libx264中略有落后,但差距不是很大。

直接預(yù)測

GS464E使用錦標(biāo)賽式分支預(yù)測器,其中元預(yù)測器選擇是使用本地歷史還是全局歷史進(jìn)行預(yù)測。本地歷史指的是當(dāng)前分支指令的歷史執(zhí)行情況,而全局歷史指的是指令流中之前的分支指令的歷史執(zhí)行情況。GS464E的本地歷史表、全局歷史表和選擇表都有16384個條目,與DEC的Alpha 21264實(shí)現(xiàn)的經(jīng)典錦標(biāo)賽預(yù)測器相比,它非常大。AMD的Bulldozer也使用了錦標(biāo)賽預(yù)測器,其優(yōu)化指南也暗示Bulldozer的全局歷史表也有16384個條目。

LA464使用的可能也是類似的預(yù)測器。在隨機(jī)模式下,當(dāng)長度逐漸增加時(shí),龍芯的表現(xiàn)很普通。它遠(yuǎn)遠(yuǎn)達(dá)不到當(dāng)前英特爾和AMD CPU所能達(dá)到的水平。最近的英特爾和AMD CPU使用TAGE或感知器預(yù)測器,使用更少的存儲空間就能實(shí)現(xiàn)更高的準(zhǔn)確性。

如果沒有出色的分支預(yù)測能力,CPU的性能將難以隨著內(nèi)核的增大而有效提升。增加緩沖區(qū)的大小可以保持更多的指令同時(shí)運(yùn)行,但如果運(yùn)行的都是錯誤預(yù)取的指令,那么增大緩沖區(qū)也不會有效提升性能。像 Bulldozer 或龍芯這樣的預(yù)測器可能對具有 128 個 ROB 條目的內(nèi)核來說足夠了,但時(shí)代已經(jīng)發(fā)生變化,龍芯需要更好的預(yù)測器來跟上步伐。

分支預(yù)測速度

分支預(yù)測器的終極目標(biāo)是加速分支處理。預(yù)測分支的走向當(dāng)然很重要,但是快速完成這個過程同樣關(guān)鍵。如果分支預(yù)測器在引導(dǎo)前端方面花費(fèi)太長時(shí)間,可能會導(dǎo)致流水線中的指令出現(xiàn)饑餓的情況。為了加快速度,Loongson使用了具有64個條目的BTB(分支目標(biāo)緩存,分支目標(biāo)的高速緩存)。如果分支目標(biāo)來自于BTB,前端根本不需要停頓。

如果分支足跡溢出了64個條目的BTB,則CPU必須等待從L1i中獲取分支,然后計(jì)算目標(biāo)地址。此時(shí),已執(zhí)行的分支的延遲基本上是L1i延遲,對于LA464來說,這個延遲似乎是三個時(shí)鐘周期。相比之下,即使處理成千上萬個分支,最近的英特爾和AMD CPU的延遲也只有一到兩個時(shí)鐘周期。這種延遲尤其令人痛苦,因?yàn)?A5000的時(shí)鐘頻率遠(yuǎn)低于AMD或英特爾的芯片,因此分支延遲的實(shí)際時(shí)間非常高。

龍芯的方案避免了使用大型 L2 BTB 的面積成本,但會阻止分支預(yù)測器在 L1i 未命中后跟隨指令流。英特爾、AMD 和 ARM 的 CPU 可以通過使用分支預(yù)測器從指令側(cè)驅(qū)動預(yù)取來維持大型代碼占用的高指令吞吐量。雖然這種技術(shù)在 Sandy Bridge 和 Bulldozer 時(shí)代是新的,但今天已是常識,甚至在低功耗架構(gòu)上也實(shí)現(xiàn)了。在龍芯中沒有看到這一點(diǎn),真的像是從過去的時(shí)光中瞬間穿越回來。

間接分支預(yù)測

跳轉(zhuǎn)到多個目標(biāo)的分支會更加困難,因?yàn)榉种ьA(yù)測器也必須在目標(biāo)之間做出選擇。這些復(fù)雜的分支也被稱為間接分支,因?yàn)樗鼈兏嬖VCPU跳轉(zhuǎn)到一個寄存器中的地址,而不是直接編碼目標(biāo)地址。對于單個間接分支,3A5000可以跟蹤大約24個目標(biāo),否則可能會出現(xiàn)懲罰(可能是預(yù)測錯誤)。我們看到大約有512個總的間接目標(biāo)被跟蹤,其中有256個分支,每個分支兩個目標(biāo)。

這種間接分支處理能力水平還不錯。這也很受歡迎,因?yàn)槊嫦驅(qū)ο缶幊陶Z言傾向于使用間接分支來處理方法調(diào)用。但它還是不如其他近期CPU那么強(qiáng)大。

值得一提的是 Neoverse N1,因?yàn)樗彩且粋€性能目標(biāo)適中的核心。但 ARM 能夠?qū)崿F(xiàn)與 Zen 3 和 Golden Cove 相差不遠(yuǎn)的間接分支預(yù)測能力。龍芯則明顯落后。

return預(yù)測

返回指令通常出現(xiàn)在調(diào)用/返回對中,是間接分支的一種特殊情況。許多CPU都保留了返回地址的堆棧。函數(shù)調(diào)用發(fā)生時(shí),CPU將一個地址推入堆棧,函數(shù)返回時(shí),CPU會從堆棧中彈出一個地址。Loongson為3A5000提供了一個32個條目的返回堆棧,這應(yīng)該足夠大多數(shù)情況下使用。這是比GS464E顯著改進(jìn)的地方,后者只有一個16個條目的返回堆棧。

AMD的Zen 2也有一個類似大小的返回堆棧,并且通常能夠?qū)崿F(xiàn)超過99%的返回預(yù)測準(zhǔn)確性。

前端: 指令獲取

一旦分支預(yù)測器確定了跳轉(zhuǎn)的目標(biāo)地址,前端就必須將指令加載到核心中。這就是指令側(cè)緩存體系的作用。首先,3A5000有一個64 KB 4路的大L1i,這很好,尤其是當(dāng)AMD和英特爾的頂尖CPU還在使用32 KB的較小指令緩存時(shí)。

然而,L1i的大容量似乎是為了減輕Loongson從L2及更深層次的存儲器中讀取代碼時(shí)的性能問題。Zen 1和Skylake都能夠維持每時(shí)鐘周期從L2中讀取4條指令,并且即使不得不從L3讀取代碼時(shí),也仍然有良好的表現(xiàn)。Loongson無法匹敵這一點(diǎn),可能會受到前端帶寬對于更大代碼占用的限制。

奇怪的是,從L2讀取代碼的帶寬比從L3還要差。我想知道是否是因?yàn)長oongson在處理指令緩存一致性時(shí)遇到了一些困難。如果做得正確,指令緩存一致性可以使JIT代碼受益,并能夠更好地推廣到高核心數(shù)的CPU,但這并不容易。Loongson的L2是非包容性的,這意味著它無法作為探測器。也許來自指令側(cè)的L2命中必須探測L1D以確保獲取最新數(shù)據(jù)。但是,L3命中可能會從位于L3復(fù)合體中的單獨(dú)一致性目錄中受益,該目錄可以指示是否可以在沒有探測的情況下提供最新數(shù)據(jù)。

重命名

在指令被獲取和解碼后,重命名器必須給他們分配后端資源并跟蹤它們。除了為了消除寄存器假依賴而進(jìn)行的寄存器重命名之外,重命名器還可以使用某些技巧向執(zhí)行引擎暴露更多的并行性。最近的英特爾和AMD CPU可以輕松處理寄存器到寄存器的移動和零化慣用語(zeroing idioms handled)。

據(jù)我所知,Loongson沒有任何這方面的優(yōu)化,重命名器的工作內(nèi)容僅限于計(jì)算機(jī)科學(xué)課程講解過的內(nèi)容。

亂序執(zhí)行

吸收掉cache和內(nèi)存的延遲是保持高性能的關(guān)鍵,Loongson用一個相當(dāng)大的亂序執(zhí)行引擎來實(shí)現(xiàn)這一點(diǎn)。在芯片規(guī)模和設(shè)計(jì)動機(jī)方面,它看起來與Neoverse N1相當(dāng)類似。兩者都有128個條目的ROB,以及類似大小的寄存器文件。N1使用分布式調(diào)度器,而Loongson則配置了總條目數(shù)更少的統(tǒng)一調(diào)度隊(duì)列。

StructureApplies if instruction…Loongson 3A5000 (LA464)GS464E**Neoverse N1Zen 1Reorder BufferExists128128128192Integer Register FileWrites to a scalar integer register~91 speculative + 32 architectural = ~123 entry128120 entry180 entryVector/FP Register FileWrites to a floating point/vector register~90 speculative + 32 architectural = ~122 entry256-bit entries, ~3.9 KB total capacity128 entry64-bit,1 KB total capacity128 entry128-bit entries, 2 KB total capacity160 entry128-bit, 2.5 KB total capacitySchedulerIs waiting to be executed32 entry INT32 entry FP32 entry memory16 entry INT24 entry FP32 entry memory16 entry branch3×16 entry INT2×16 entry FP2×12 entry memory4×14 entry INT36 entry FP + 64 entry NSQ2×14 entry memoryLoad QueueReads from memory64 entry64 entry?56 entry116 entry*Store QueueWrites to memory44 entryShared with loads?44 entry44 entryBranch Order BufferAffects control flow26 entry24 entry36 entry136 Not Taken32 Taken

*Zen的優(yōu)化手冊顯示,負(fù)載隊(duì)列有44個條目,但測試發(fā)現(xiàn)核心可以同時(shí)處理116個負(fù)載。為了保持一致性,使用了測量得出的數(shù)字116。

與較舊的GS464E相比,LA464保持了相同的ROB和寄存器文件大小,但加強(qiáng)了非常重要的調(diào)度器的大小。GS464E已經(jīng)擁有了相當(dāng)大的寄存器文件,這對于一個具有128條目ROB的CPU而言已經(jīng)很不錯了。LA464應(yīng)該能夠更好地利用其128個ROB條目。但是,近期的 AMD、英特爾甚至 ARM 處理器已經(jīng)遙遙領(lǐng)先于龍芯。它們擁有更大的ROB,其他結(jié)構(gòu)也得到增強(qiáng),以保持核心的平衡。

Loongson選擇保守地增加結(jié)構(gòu)的大小,可能是為了提高時(shí)鐘速度。需要在翻倍結(jié)構(gòu)大?。ㄈ鏕S464E從GS464增加了結(jié)構(gòu)大小)來增加IPC和提高時(shí)鐘速度之間做出選擇時(shí),后者絕對是更好的選擇。然而,西方公司能夠在增加時(shí)鐘速度的同時(shí)增加結(jié)構(gòu)大小。

整數(shù)執(zhí)行引擎

在之前的文章中,我們介紹了Loongson 3A5000的向量執(zhí)行部分,如果您想了解更多有關(guān)FPU的信息,請閱讀該文章。現(xiàn)在,讓我們來看看Loongson 3A5000的標(biāo)量整數(shù)部分。

跟GS464E相比,LA464的整形指令吞吐量大大提高了,它有四個ALU pipelines,GS464只有兩個?;贕S464E的核心看起來有點(diǎn)奇怪,它們是4發(fā)射核心,但只有兩個ALU。公平地說,Bulldozer也采用了這樣的設(shè)計(jì),模塊中的每個核心都有4個發(fā)射端口和兩個ALU,但這是為了增強(qiáng)多線程性能,所以使用了共享前端。

跟GS464E相比,LA464有了巨大的改進(jìn),但其在整數(shù)執(zhí)行引擎方面仍有一些缺點(diǎn)。LA464每個周期只能解決一個分支,即使分支未被采用。這種能力相當(dāng)于ARM的Neoverse N1或Intel的Sandy Bridge。但是,新的Intel和AMD CPU可以維持每個周期兩個分支,通常提供至少其中一個不被采用。

Instruction3A5000 Throughput/LatencyGS464E Throughput/LatencyNeoverse N1 Throughput/LatencyZen 1 Throughput/Latency64b Integer Adds4 per cycle1 cycle latency2 per cycle3 per cycle1 cycle latency4 per cycle1 cycle latency64b Integer Multiplies2 per cycle4 cycle latency2 per cycle3 cycle latency1 per cycle2 cycle latency1 per cycle3 cycle latency64b Integer Divisions0.11 per cycle9 cycle latency0.05 per cycle20 cycle latency0.07 per cycle8 cycle latency

請注意,Neoverse N1不支持256位指令。

Loongson在整數(shù)乘法吞吐量方面確實(shí)具有優(yōu)勢。像Gracemont一樣,3A5000每個周期可以執(zhí)行兩個標(biāo)量整數(shù)乘法,而大多數(shù)其他核心只能執(zhí)行一個。即使在3A5000的低時(shí)鐘速度下,它的絕對吞吐量也可以超過2020年之前的ARM和x86競爭對手。然而,與最新的AMD和英特爾桌面核心相比,這種優(yōu)勢就很小了,后者的時(shí)鐘速度超過3A5000的兩倍以上。整數(shù)乘法的延遲為4個周期,這進(jìn)一步降低了其優(yōu)勢,僅與AMD的Phenom和Intel的Core 2相同,后者已經(jīng)超過二十年了,并且時(shí)鐘速度還比3A5000高。任何來自英特爾和AMD的最新產(chǎn)品都具有更高的時(shí)鐘速度和更低的延遲,使得它們遙遙領(lǐng)先于3A5000。

向量和浮點(diǎn)執(zhí)行引擎

我們之前看過3A5000的向量和FP執(zhí)行引擎的布局,并指出其能力比Zen 1和Skylake弱。更多細(xì)節(jié)請參閱那篇文章??偨Y(jié)起來,Loongson只有兩個向量執(zhí)行端口,并且FP執(zhí)行延遲較高。無論向量寬度如何,浮點(diǎn)加、乘和融合乘加的延遲都為5個周期。這與AMD的RDNA 2圖形架構(gòu)相同,有趣的是RDNA 2也達(dá)到了類似的時(shí)鐘頻率。

向量整數(shù)操作更好一些,向量加法具有單周期延遲。盡管如此,四核Ampere Altra云實(shí)例在libx264視頻編碼方面略微領(lǐng)先于3A5000,這可能歸因于更高的時(shí)鐘頻率和更廣泛的專用指令集。與標(biāo)量整數(shù)一樣,3A5000在每個周期能夠執(zhí)行兩個256位向量整數(shù)乘法,與Skylake相當(dāng),超越了Zen 1。但同樣,低時(shí)鐘速度意味著3A5000在實(shí)際中不太可能與兩者匹敵。

與Intel和AMD的比較只是故事的一面。舊的GS464E內(nèi)核具有64位FP單元,將其置于x87和MMX時(shí)代。當(dāng)ICT管理Godson的開發(fā)時(shí),他們創(chuàng)建了GS464V,這是GS464的變種,用于超級計(jì)算機(jī)中具有強(qiáng)大的向量單元。我懷疑GS464V構(gòu)成了LA464向量實(shí)現(xiàn)的基礎(chǔ)。根據(jù)IEEE的一篇論文,GS464V“在核心中集成了兩個256位寬的向量單元”,“向量ALU模塊使用兩次”[1]。

地址生成

訪存操作從地址生成開始,AGU(address generation unit)計(jì)算load或store操作要訪問的內(nèi)存地址,并將其傳遞給load/store單元。LA464核心具有兩個AGU,每個時(shí)鐘周期可以執(zhí)行兩個內(nèi)存操作。這兩個操作可以都是load操作,也可以一個是store操作。這使得它在性能上大致與Neoverse N1、Zen 1和Sandy Bridge相當(dāng)。

然而,它已經(jīng)落后于英特爾的Haswell架構(gòu)及其后續(xù)產(chǎn)品,這些處理器可以在同一周期內(nèi)執(zhí)行兩次load和一次store操作。最近的AMD和英特爾的CPU都大幅擴(kuò)展了訪存能力。例如,Golden Cove每個周期可以執(zhí)行兩次load和兩次store操作,而Zen 4每個周期可以執(zhí)行三個訪存操作,其中兩個可以是store。龍芯開發(fā)GS464E處理器時(shí),參考了英特爾的Ivy Bridge架構(gòu),當(dāng)時(shí)兩個AGU單元的設(shè)計(jì)是非常合理的。但時(shí)代已經(jīng)發(fā)生變化,現(xiàn)在看來這種設(shè)計(jì)已經(jīng)相當(dāng)過時(shí)。

Load/Store單元

一旦生成了虛擬地址,它們會被傳遞到load/store單元。該單元確保內(nèi)存依賴關(guān)系得到遵守,并將虛擬地址轉(zhuǎn)換為物理地址。為了加快速度,龍芯處理器可以在地址未知的情況下預(yù)測性地執(zhí)行l(wèi)oad操作。

如果一個load操作從之前的store操作中提取數(shù)據(jù),龍芯處理器可以使用7個周期的延遲來做數(shù)據(jù)轉(zhuǎn)發(fā),只要加load作位于store操作范圍內(nèi)且兩者之間的訪問沒有跨越64B的緩存行邊界。然而,對于2.5 GHz的CPU來說,7個周期的延遲并非最佳表現(xiàn)。Zen 1雖然具有相同的延遲,但時(shí)鐘速度更高,而Skylake則可以在5個周期內(nèi)轉(zhuǎn)發(fā)存儲數(shù)據(jù),僅比未爭用的load操作多1個周期的延遲。

Loongson與Skylake相似,都采用粗粒度檢查。Loongson以8B的粒度執(zhí)行此操作,而Skylake以4B的粒度執(zhí)行(即比較一個額外的位)。這意味著如果一個load和一個store都命中了Loongson上相同的8字節(jié)塊,即使它們實(shí)際上沒有重疊,它們也不能并行執(zhí)行。這種8B重疊懲罰也適用于16 KB頁面。如果load和store在不同的16 KB頁面中以相同偏移量觸及相同的8B塊,則還會產(chǎn)生誤依賴。最后,如果load部分重疊store,則Loongson會受到14個時(shí)鐘周期的懲罰。這種失敗的store forwarding懲罰并不算嚴(yán)重,與其他CPU相當(dāng)。

如果訪問跨越64B緩存行,則load/store單元的工作會變得更加困難,因?yàn)檫@將涉及兩個L1D訪問。這些訪問被稱為“不對齊訪問”,因?yàn)樗鼈兛缭絃1D對齊邊界。Loongson通過在兩個周期內(nèi)執(zhí)行它們來處理不對齊的load,這并不算過分,盡管新的Intel和AMD CPU根本不會受到任何不對齊的load懲罰。對于Loongson來說,存儲要糟糕得多,因?yàn)椴粚R的存儲需要10個時(shí)鐘周期。早期的Intel Core 2時(shí)代的CPU也遇到了類似的懲罰,但是最近的CPU通常要好得多??紤]到CPU的低時(shí)鐘頻率,這10個時(shí)鐘周期的懲罰相當(dāng)大。

如果訪問還跨越16K頁面邊界,除了兩個L1D訪問外,還需要兩個TLB查找。Loongson在這種情況下表現(xiàn)相當(dāng)好,具有相同的不對齊load懲罰,而不對齊store的懲罰則增加到15個時(shí)鐘周期。Zen 1則要承受24個時(shí)鐘周期的懲罰,如果Zen 1運(yùn)行在4 GHz,則實(shí)際時(shí)間幾乎相同。

地址翻譯

在生成地址后,核心必須將虛擬地址(程序所見)轉(zhuǎn)換為對應(yīng)于DRAM中位置的物理地址。這種轉(zhuǎn)換允許操作系統(tǒng)執(zhí)行權(quán)限并為每個進(jìn)程提供其自己的內(nèi)存視圖,確保一個行為不當(dāng)?shù)某绦虿粫?dǎo)致整個系統(tǒng)崩潰。然而,地址轉(zhuǎn)換也會產(chǎn)生開銷。TLB通過記憶這些地址轉(zhuǎn)換來最小化開銷。

龍芯默認(rèn)以16KB塊或頁來轉(zhuǎn)換地址。相比之下,x86和ARM CPU通常使用4KB頁。龍芯更大的頁意味著每個TLB條目具有更大的覆蓋范圍。LA464擁有64個條目的L1 DTLB,可以覆蓋1MB,并由2048個條目的L2 TLB支持,總TLB覆蓋范圍為32MB。這些大的頁大小應(yīng)該使龍芯在與x86和ARM競爭中具有優(yōu)勢。

命中L2 TLB似乎會增加2.3納秒的延遲,相當(dāng)于5-6個周期的延遲。這與Zen 1相比較優(yōu),后者具有7-8個周期的L2 TLB延遲。然而,Zen 1的更高時(shí)鐘頻率意味著它擁有更好的實(shí)際延遲。

Cache and Memory

一旦load/store單元完成檢查,就會向存儲子系統(tǒng)請求數(shù)據(jù)。與許多現(xiàn)代CPU一樣,龍芯配備了三級cache。今天所有高性能的CPU都依賴于cache,因?yàn)镈RAM性能的提升跟不上CPU性能的提升。

L1D Cache

與先前的GS464系列一樣,3A5000也擁有大小適中的64 KB L1D緩存。它是4路組相聯(lián)的,以實(shí)現(xiàn)使用16 KB頁面的虛擬索引和物理標(biāo)記的尋址。延遲是其薄弱之處,雖然四個時(shí)鐘周期聽起來并不算糟糕,但考慮到3A5000低下的時(shí)鐘速度,它應(yīng)該有更好的表現(xiàn)。相比之下,AMD的K10在更高的時(shí)鐘速度和更早期的工藝節(jié)點(diǎn)下,就實(shí)現(xiàn)了3個時(shí)鐘周期的延遲。

loogarch與MIPS一樣,缺乏帶有縮放因子的索引尋址模式,因此實(shí)際的L1D延遲變得更糟糕了。編譯器最終會生成額外的指令來計(jì)算數(shù)組元素的地址,從而顯著增加了L1D延遲。相比之下,x86-64和aarch64都有帶有縮放因子的索引尋址模式。使用該功能最多會帶來1個時(shí)鐘周期的懲罰。在龍芯上,GCC生成的數(shù)組索引代碼的延遲為8個時(shí)鐘周期,這在2.5 GHz時(shí)是非常嚴(yán)重的。


在帶寬方面,Loongson的L1D能夠處理256位的向量訪存。使用未公開的LASX指令,我們能夠在每個周期進(jìn)行兩次256位的load,或者一次256位的load和一次256位的store。因此,即使在AMD具有時(shí)鐘速度優(yōu)勢的情況下,3A5000的L1D帶寬仍優(yōu)于Zen 1。然而,它無法與Skylake相抗衡。

L2 Cache

與現(xiàn)今的許多CPU一樣,Loongson擁有一個L2中級緩存,它可以降低核心訪問L3的延遲。作為受害者緩存,3A5000的L2緩存為256 KB,采用16路組相聯(lián)的映射方式,延遲為14個時(shí)鐘周期,性能中規(guī)中矩。過去的十年里,Intel一直使用256 KB L2緩存,延遲僅為12個時(shí)鐘周期,并且時(shí)鐘速度也更高。實(shí)際延遲方面,3A5000的5.6 ns還不如FX-8350的4.8 ns,而Zen 1比FX-8350更快容量也更大。

L2每個周期的平均帶寬為21.3字節(jié),表現(xiàn)一般。相較而言,Skylake每個周期的帶寬超過28字節(jié),Zen 1則超過24字節(jié)。再次強(qiáng)調(diào),時(shí)鐘速度的差異意味著AMD和Intel的舊CPU在實(shí)際L2帶寬上具有顯著優(yōu)勢。

L3 Cache

L3可以說是該CPU的最佳功能之一,它為四核心簇提供了16 MB的容量,帶寬和延遲也相當(dāng)不錯。L3作為受害者緩存,由四個bank構(gòu)成。根據(jù)3A5000的用戶手冊,L3和核心之間通過使用AXI協(xié)議的“5×5 frequency division switch”進(jìn)行連接。CPU核心作為主設(shè)備連接到switch上,而L3緩存切片則作為從設(shè)備連接。switch的每個端口的每個周期可以提供32字節(jié)的讀取帶寬和16字節(jié)的寫入帶寬。

互連裝置可能是從Godson 3時(shí)期延續(xù)下來的,當(dāng)時(shí)ICT致力于用舊的GS464核心實(shí)現(xiàn)高核心數(shù)的CPU。即使后來該項(xiàng)目的所有權(quán)轉(zhuǎn)為龍芯公司后,同一批人仍在繼續(xù)工作,這也并不令人感到驚訝。但是,龍芯已將每個L3切片的讀取帶寬提高了兩倍。

總共四個 L3 切片,每切片每周期可傳輸 32 字節(jié)數(shù)據(jù),在 2.5 GHz 的頻率下,L3 的理論帶寬為 320 GB/s ,但實(shí)際上遠(yuǎn)遠(yuǎn)達(dá)不到這個值??赡苁翘幚砥骱诵臒o法跟蹤足夠多的L2 miss以吸收 L3 的延遲;或者是 5x5 switch內(nèi)部存在爭用;也可能是L3的時(shí)鐘頻率低于核心頻率。畢竟,Godson-3B1500 的核心頻率為 1.25 GHz,但 L3 的頻率只有 1 GHz。

無論何種場景,AMD 和 Intel 的 L3 的帶寬都有明顯優(yōu)勢。Zen 1 和 Skylake 不但每個周期能從L3讀取更多的字節(jié)而且時(shí)鐘頻率還高得多。Loongson確實(shí)擁有容量上的優(yōu)勢,但在面對更現(xiàn)代的AMD和Intel芯片時(shí),這個優(yōu)勢也會消失。

值得肯定的是,龍芯處理器的L3緩存要比Bulldozer好得多,隨著線程數(shù)的增加,L3帶寬大致呈線性增長。當(dāng)龍芯處理器核數(shù)超過四個時(shí),L3帶寬的擴(kuò)展性應(yīng)該也會很好,因?yàn)槊總€L3實(shí)例是專屬于四核簇的。就像AMD的Epyc一樣,隨著添加更多的核心簇,L3帶寬應(yīng)該會線性擴(kuò)展,除非出現(xiàn)某種夸張的錯誤。

L3具有約40個周期的延遲。在周期計(jì)數(shù)方面,這并不算太差,與Zen 2處理器相當(dāng)。然而,對于運(yùn)行在2.5 GHz上的CPU來說,16納秒的絕對延遲相當(dāng)不令人印象深刻,龍芯處理器應(yīng)該縮短L3的pipeline。

3A5000的表現(xiàn)要好于之前的Godson-3B1500。據(jù)IEEE上的一篇論文顯示,Godson 3的L3的延遲大約為50個周期,以1.25 GHz的時(shí)鐘速度計(jì)算,為40ns。相比之下,16ns的延遲要好得多,因此龍芯處理器取得的進(jìn)步值得贊揚(yáng)。

下圖是《An 8-Core MIPS-Compatible Processor in 32/28 nm Bulk CMOS》公布的Godson-3B1500 在核心頻率為1.25GH且LLC頻率為1 GHz 時(shí)的延遲數(shù)據(jù)。

如果3A5000處理器未命中L3緩存,則通過第二級的AXI switch訪問DDR4內(nèi)存控制器。

DRAM

從上圖可見,Godson-3B1500的內(nèi)存延遲約為160-170個周期,相當(dāng)于128-136納秒。對于雙通道DDR3-1066并且配置了RDIMMs的處理器而言,這個延遲并不算太差。不幸的是,龍芯在升級到DDR4時(shí)失誤了。我們使用DDR4-2666進(jìn)行測試,測得內(nèi)存延遲為144納秒??磥?,Loongson的內(nèi)存控制器質(zhì)量很差,似乎是從http://Wish.com上買來的垃圾貨。

我們使用了插滿兩個插槽的DDR4-2666進(jìn)行測試。3A5000擁有雙通道內(nèi)存控制器,理論帶寬應(yīng)該與五六年前的消費(fèi)級芯片相當(dāng)。這里“理論”是關(guān)鍵詞,因?yàn)楝F(xiàn)實(shí)是不同的。

一顆單獨(dú)的Loongson核心可以從DRAM中獲得大約7 GB/s的帶寬,然而四個核心的總帶寬還不到14 GB/s。在全核工作負(fù)載下,每個核心只能使用3.37 GB/s的DRAM帶寬,這使得帶寬瓶頸成為可能。對于雙通道DDR4而言,這是一種極差的性能,因?yàn)樗踔谅浜笥贒DR3。例如,安裝了雙通道DDR3-1333的i7-4770可以獲得略高于19 GB/s的帶寬。

購買低價(jià)內(nèi)存控制器的后果也是視情況而定的。日常任務(wù),如網(wǎng)頁瀏覽或文字處理,可能沒有問題。服務(wù)器程序、HPC工作負(fù)載、圖像處理、視頻編輯和并行代碼編譯可能會有問題。

我們還應(yīng)該記住,這是一款運(yùn)行在2.5 GHz上的四核芯片。隨著Loongson嘗試提高時(shí)鐘速度或核心數(shù)量,內(nèi)存瓶頸將會變得越來越嚴(yán)重,因?yàn)橛?jì)算與帶寬的比率將變得更糟。這也適用于延遲方面,144.5 ns在2.5 GHz時(shí)為361個時(shí)鐘周期,但在4 GHz時(shí)為578個時(shí)鐘周期。在某種程度上,3A5000的低時(shí)鐘速度掩蓋了其低下的內(nèi)存性能。

結(jié)論

Loongson的3A5000是目前為止我們看到的最有前途的中國本土CPU。與兆芯KX-6640MA和飛騰D2000相比,3A5000具有更寬的發(fā)射單元更平衡的后端和更好的緩存層次結(jié)構(gòu)。但與其他兩個CPU一樣,在成為通用CPU之前,需要解決一些基本問題。龍芯的LA464架構(gòu)無法與近期的英特爾或AMD架構(gòu)相媲美,其性能存在較大差距。與西方同行相比,LA464的架構(gòu)更小,L2和L3緩存更差,DDR4內(nèi)存控制器表現(xiàn)得令人尷尬。盡管Loongson已經(jīng)將核心頻率從1 GHz提升到2.5 GHz,但如今的桌面甚至筆記本電腦CPU的主頻都不會如此之低。由于其主頻的巨大劣勢,龍芯無法提供與近期的桌面CPU相媲美的性能。它甚至難以與主頻為3GHz的Neoverse N1競爭。

下圖來自“An introduction to CPU and DSP design in China”,可以看出,GS464E的所有“關(guān)鍵參數(shù)”都與LA464相同。

龍芯的發(fā)展也并不樂觀。從微基準(zhǔn)測試來看,LA464的架構(gòu)基本上就是GS464E的衍生產(chǎn)品,后者是早在2010年代初期就設(shè)計(jì)出來的核心,旨在在時(shí)鐘對時(shí)鐘性能上接近當(dāng)時(shí)西方的核心。但是即使在當(dāng)時(shí),Sandy Bridge和Bulldozer的主頻也比今天的LA464高得多。當(dāng)然,Golden Cove和Zen 4已經(jīng)領(lǐng)先于Sandy Bridge多少個世代了。

如今的龍芯與十年前相比與英特爾和AMD之間的差距并沒有縮小。我也不認(rèn)為他們有很好的機(jī)會能在性能上達(dá)到同一水平,除非他們邁出一些巨大的跨越。制造一款性能尚可的低功耗處理器要比制造頂級的CPU容易得多。追求高性能意味著需要解決一個又一個瓶頸,而隨著CPU性能極限的不斷提升,這些瓶頸的解決變得越來越復(fù)雜。

軟件生態(tài)是另一個問題。具有諷刺意味的是,盡管3A5000比飛騰或兆芯更強(qiáng),但其ISA使其在實(shí)際中更加無用。龍芯意識到了應(yīng)用軟件對MIPS的支持不佳,工具鏈也不如x86強(qiáng)大。但是創(chuàng)造一個新的、不兼容的指令集,并重用大部分MIPS工具鏈,是一個非常愚蠢的問題解決方式。此外,龍芯將LoongArch ABI分為“舊世界”和“新世界”,這兩者不兼容。這只會讓軟件生態(tài)更加混亂和荒謬。

截至2022年7月18日,所有商業(yè)化的LoongArch發(fā)行版都與社區(qū)發(fā)行版不兼容?;谏鐓^(qū)發(fā)行版構(gòu)建的所有二進(jìn)制軟件以及一些高級語言編寫的軟件(如Python或Java編寫的軟件),不能在商業(yè)化發(fā)行版上運(yùn)行,反之亦然。所有來自ISV(獨(dú)立軟件開發(fā)商)的閉源軟件,如WPS Office,都是基于商業(yè)化發(fā)行版構(gòu)建的,因此它們極不可能在社區(qū)發(fā)行版上按原樣工作。

這就是所謂的舊世界和新世界之間的兼容性問題。由于龍芯公司在向開源社區(qū)公布LoongArch之前完成了所有商業(yè)化的步驟,因此開源的LoongArch生態(tài)系統(tǒng)是新世界;相比之下,所有商業(yè)化發(fā)行版及其關(guān)聯(lián)的生態(tài)系統(tǒng)組成了舊世界。這兩個世界最終將會合并,但現(xiàn)在它們是兩個平行的宇宙;而使這兩個世界相互兼容的技術(shù)難度是巨大的。

https://blog.xen0n.name/en/posts/tinkering/loongarch-faq/#why-cant-i-run-closed-source-software-like-wps-office-on-community-distributions-aka-whats-this-so-called-old-world-and-new-world

龍芯的ISA確實(shí)有用于ARM、MIPS和x86的二進(jìn)制翻譯擴(kuò)展,這是一個非常復(fù)雜的解決方案,用以規(guī)避未使用更加常見的ISA的問題。我們在龍芯的Loongnix(一個基于Debian的系統(tǒng))上使用二進(jìn)制翻譯并沒有太多樂趣。x86-64 Geekbench馬上就會崩潰。減少二進(jìn)制翻譯的性能損失確實(shí)不錯,但無法正常工作是不好玩了。公正地說,32位x86版本在二進(jìn)制翻譯下是工作的。但如今,大量的程序都是64位的,所以確實(shí)需要x86-64翻譯正常工作。即使它能正常工作,二進(jìn)制翻譯也會使得本來就性能低下的龍芯CPU更加雪上加霜。

最后,LA464是一個有趣的低功耗、低性能架構(gòu)。Loongson/ICT團(tuán)隊(duì)確實(shí)一直在努力追求他們的目標(biāo)。但他們的創(chuàng)新步伐落后于AMD和Intel,這兩個公司一直在不懈地推動CPU性能的增長。但是,從LA464到Zen 4或Golden Cove的比較,可以看出AMD和Intel在推動CPU性能極限方面的成就是多么令人印象深刻。這也表明西方公司的持續(xù)進(jìn)步使得中國的CPU制造商很難追趕。

參考文獻(xiàn)

  1. Weiwu Hu et al, An 8-Core MIPS-Compatible Processor in 32/28 nm Bulk CMOS, IEEE Journal of Solid State Circuits, Vol. 49, No. 1, January
    2014

  2. Weiwu Hu et al, Microarchitecture of the Godson-2 Processor

  3. Weiwu Hu et al, Godson-3: A Scalable Multicore RISC Processor with x86 Emulation, IEEE Micro, December 2019

  4. Weiwu Hu, Yifu Zhang, Jie Fu, An Introduction to CPU and DSP Design in China, Science China Information Sciences, October 2015

發(fā)布于 2023-04-21 13:51


發(fā)布于 2023-04-21 13:51

發(fā)布一條帶圖評論吧


21 條評論

默認(rèn)

最新

guee

翻譯得很專業(yè),原作者也很專業(yè)。

04-24?·?IP 屬地重慶

madao

不管怎么說龍芯依舊是中國最好的芯片設(shè)計(jì)公司,落后也沒事,早晚都會追上的

04-22?·?IP 屬地山東

喜鵲

這條路必須有人走

04-22?·?IP 屬地湖南

流浪大叔

落后沒有關(guān)系,怕的是做都不敢做,我自己有3a5000的電腦,日常使用足夠,期待3a6000。

04-30?·?IP 屬地廣西

明天會更6

頂陸家嘴架構(gòu),下次出一個徐家匯架構(gòu)


04-22?·?IP 屬地上海

21世紀(jì)米客

還有五角場提籃橋

04-23?·?IP 屬地上海

薪程

21世紀(jì)米客

提籃橋有點(diǎn)厲害

07-13?·?IP 屬地上海

21世紀(jì)米客

能和紅藍(lán)廠的CPU比都算是一種勝利了。

04-23?·?IP 屬地上海

Lavender

分支預(yù)測這個圖和CSAPP 3rd的封面好像啊

04-22?·?IP 屬地美國

jamesr

和zen4比怎么都有點(diǎn)飄了,zen1都還比不了

04-23?·?IP 屬地浙江

Lavender

翻譯的很好……可惜沒怎么學(xué)體系結(jié)構(gòu),看起來半懂不懂的

04-22?·?IP 屬地美國

芯片物理設(shè)計(jì)精英

分析的挺客觀的,目前比國際主流性能低也很正常,道路是正確的,但很艱辛

04-26?·?IP 屬地北京


【知乎】龍芯3A5000:中國的最佳選擇?的評論 (共 條)

分享到微博請遵守國家法律
柞水县| 清远市| 桃园县| 九寨沟县| 德江县| 阿克苏市| 衡阳县| 张北县| 饶阳县| 金昌市| 故城县| 花垣县| 门头沟区| 沂水县| 内丘县| 南昌县| 楚雄市| 江山市| 南溪县| 张家川| 静乐县| 邢台市| 和田县| 筠连县| 赤水市| 莒南县| 许昌市| 依安县| 堆龙德庆县| 抚宁县| 浠水县| 柳河县| 抚远县| 台南县| 拉孜县| 独山县| 河源市| 株洲市| 张家界市| 巩留县| 子长县|