《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 電子元件 > 業(yè)界動(dòng)態(tài) > AMD YES!背后不為人知的故事

AMD YES!背后不為人知的故事

2020-09-25
來(lái)源:EETOP
關(guān)鍵詞: AMD CPU

  AMD YES是近年來(lái)比較火的一句話,每當(dāng)EETOP發(fā)布關(guān)于AMD的相關(guān)文章,也總會(huì)收到網(wǎng)友的AMD YES!的留言。從字面翻譯過(guò)來(lái)就是AMD真好,AMD真香的意思。AMD YES實(shí)際上表示了AMD近幾年來(lái)逐漸走向成功,也得到了大家的認(rèn)可。

  那么為什么AMD 能達(dá)到今天的高度?最主要的功臣應(yīng)當(dāng)歸功于AMD Zen架構(gòu)的成功。今天我們就為大家扒一扒AMD Zen 成功背后不為人知的故事。

  以下內(nèi)容來(lái)自中國(guó)臺(tái)灣科技新報(bào)的專欄作者:癡漢水球的文章。

  正文:

  自從2017 年AMD 準(zhǔn)時(shí)推出「技術(shù)規(guī)格看起來(lái)稍微正常點(diǎn)」的Zen 微架構(gòu)CPU 后,總算脫身逃離了2011 年以來(lái)推土機(jī)(Bulldozer)家族4 年工地秀的泥沼,回到跟英特爾正面對(duì)決互毆的擂臺(tái),而2019 年7 納米制程的Zen 2,在英特爾2015 年后就擠牙膏擠到青黃不接的當(dāng)下,更讓AMD「稍微」重現(xiàn)了十多年前K8 時(shí)代的輝煌。這些各位讀者都很熟悉的故事,就無(wú)需浪費(fèi)篇幅錦上添花──即使背后充滿看不見的波濤。

微信圖片_20200925133518.png

微信圖片_20200925133524.png

  俗語(yǔ)說(shuō)得好,失敗為成功之母,任何成功都建立在一路累積的基礎(chǔ)上,AMD 亦不能免俗,讓 Zen 成功的一切條件,無(wú)不是奠基于過(guò)往的遺產(chǎn)與教訓(xùn)。我們就由遠(yuǎn)到近,一步步抽絲剝繭,重新踏上這條 AMD 走了25 年的漫漫長(zhǎng)路。

  Zen 才是真正的 K10

  AMD CPU 代號(hào)的 K 源自「(IntelPentium)Killer」,眾人皆知的 AMD 高效能 x86 CPU 演進(jìn)如下(不包含小核心 Bobcat 體系):

  K5(1996):由超標(biāo)量(Superscalar)架構(gòu)大師Mike Johnson親自操刀的「Pentium Killer」,但英特爾并未開誠(chéng)布公的公開Pentium新增指令細(xì)節(jié),為了確保與100%跟Pentium相容,逆向工程搞了很久,上市日期一再推后,讓癡癡等待的Compaq等的“花兒也謝了”。K6(1997):直接購(gòu)并NexGen,修改現(xiàn)成的Nx686,取消類似Pentium Pro的L2 Cache專用總線,到內(nèi)建L2 Cache的K6-2+和K6-III才算大功告成,但已時(shí)不我與。K7(1998):出身DEC Alpha團(tuán)隊(duì)的Dirk Meyer變成的「x86世界的Alpha 21264」,AMD首次能與英特爾全面性較量效能。K8(2003):Fred Weber主導(dǎo)的K7強(qiáng)化版+x86-64+服務(wù)器等級(jí)的RAS(Reliability, Availability and     Serviceability)+HyperTransport+整合型存儲(chǔ)器控制器,讓AMD悲愿成就,一舉攻入高獲利的企業(yè)服務(wù)器市場(chǎng)。K9:英文發(fā)音近似「狗」(Caine),太過(guò)負(fù)面,因此沒(méi)這個(gè)代號(hào)。K10(2007):4~6核K8強(qiáng)化版+整合式L3 Cache存儲(chǔ)器,AMD開始「包水餃」兩顆打一顆,也逐漸無(wú)力抵抗英特爾小步快跑的鐘擺(Tick     Tock)攻勢(shì)。K11(2011):由IBM Power4的總工程師Chuck Moore操刀,接連四代被英特爾鐘擺痛扁的「推土機(jī)」(Bulldozer)家族,叢集式多執(zhí)行緒(CMT)和模組化浮點(diǎn)運(yùn)算器暗藏了AMD對(duì)Fusion大戰(zhàn)略的熊熊野心與對(duì)未來(lái)GPGPU局勢(shì)的離譜誤判。K12(預(yù)定2017):從頭到尾搞笑的「全新高效能64位元ARM處理器」,還沒(méi)開始就結(jié)束了,只活在簡(jiǎn)報(bào)里,無(wú)愧當(dāng)時(shí)「簡(jiǎn)報(bào)王」名號(hào)。Zen(2017):深度流水線、追求高時(shí)鐘頻率、同時(shí)多執(zhí)行緒(SMT),根本是Andy Glew原先的K10原案投胎轉(zhuǎn)世。

  總之,嚴(yán)格說(shuō)來(lái),Zen 才是「真正的 K10」。這句話你可以仔細(xì)再看一次,我會(huì)等你。

  1990 年代初期創(chuàng)造英特爾革命性P6 微架構(gòu)5 位總工程師之一的Andy Glew,對(duì)英特爾內(nèi)部提議代號(hào)「Yamhill」的64 位元x86 指令集被拒絕,2002 年跳槽到AMD 參與x86-64指令集的制定工作,并短暫擔(dān)任K10 總工程師。為何說(shuō)「短暫」?他老兄原本提案的K10 是類似英特爾NetBurst 的設(shè)計(jì):深度流水線、追求高時(shí)鐘頻率、未犧牲執(zhí)行單元寬度、同時(shí)多執(zhí)行緒(SMT),然后就又被打槍了,只是這次動(dòng)手的換成AMD 高層。

  他老兄一不爽,又在2004 年跳回前東家英特爾,但恐怕運(yùn)氣一直不太好,加入因太過(guò)「史詩(shī)級(jí)災(zāi)難」(單核心晶粒面積213mm? 幾乎是Prescott 兩倍,TDP 又超過(guò)150W上看166W)而慘遭腰斬的Tejas 開發(fā)案。2009 年再度離開英特爾,歷經(jīng) MIPS 和 nVidia。瞧瞧LinkedIn 的個(gè)人介紹,現(xiàn)在正待在搞 RISC-V 的SiFive。

  為何真正的 K10 會(huì)沉寂這么久才浮上臺(tái)面?這跟 AMD 研發(fā)能量明顯遠(yuǎn)不及英特爾、難以承擔(dān)精密復(fù)雜的微架構(gòu)有很大關(guān)系,一顆當(dāng)兩顆用的SMT 并不是便于開發(fā)驗(yàn)證的東西。據(jù) AMD 在 1998 年申請(qǐng)的幾份專利文件,原始K8 有兩版,共同點(diǎn)只有一個(gè):兩個(gè)簡(jiǎn)單的「外寬內(nèi)窄」小核心,明眼人腦中應(yīng)該馬上浮現(xiàn)推土機(jī)的雛型了。

  但AMD 大概是靠K7 和K8 日子過(guò)太爽了,遑論K8 讓AMD 大舉入侵高利潤(rùn)、市場(chǎng)動(dòng)量又很持久(意思是產(chǎn)品暫時(shí)輸人,也不會(huì)很快被趕出來(lái))的服務(wù)器市場(chǎng), 「先講求不傷身體,再講求效果」的維穩(wěn)心態(tài)作祟,或在2006 年7 月耗費(fèi)54 億美元購(gòu)并ATI 這件事,燒了太多錢,不得不節(jié)約研發(fā)經(jīng)費(fèi),遲遲不見全新后繼接班人。

  此外,AMD 融合 CPU 和 GPU 的「Fusion 大戰(zhàn)略」(The Future Is Fusion)也影響了 CPU 發(fā)展策略。AMD 過(guò)度樂(lè)觀預(yù)期GPU 的泛用化進(jìn)程,認(rèn)定假以時(shí)日GPU 將可取代CPU 的浮點(diǎn)或部分SIMD整數(shù)運(yùn)算,讓推土機(jī)變成依附Fusion 的附庸,擺明當(dāng)「天時(shí)、地利、人和」三者兼?zhèn)鋾r(shí),直接用GPU 換掉兩個(gè)簡(jiǎn)單整數(shù)運(yùn)算核心共用的浮點(diǎn)運(yùn)算器。

  不過(guò)推土機(jī)在商業(yè)競(jìng)爭(zhēng)失敗,并不代表對(duì)之后Zen 的成功毫無(wú)貢獻(xiàn),除了讓AMD 得到足夠「不能亂搞流水線前端」的教訓(xùn),讓分支預(yù)測(cè)與指令流水線拖鉤的解耦式分支預(yù)測(cè)器( Decoupled Branch Predicator)是支撐Zen 效能競(jìng)爭(zhēng)力的一大功臣,甚至是Zen 2 可實(shí)做「機(jī)器學(xué)習(xí)分支預(yù)測(cè)器」的地基。各位別急,后面會(huì)提到。

  反過(guò)來(lái)利用晶圓代工商業(yè)模式來(lái)提高晶體管密度與生產(chǎn)良率

  AMD 創(chuàng)辦人 Jerry Sanders 有一句名言「有晶圓廠才是真男人」(Real men have fabs),在今日真是莫大的諷刺。

  雖然像英特爾和昔日AMD 的高度垂直整合IDM(Integrated Design and Manufacture)商業(yè)模式,可確保設(shè)計(jì)和制程彼此最佳化,但在追求Time To Market 的世界,專業(yè)的無(wú)晶圓廠IC 設(shè)計(jì)公司(Fabless IC Design House)、IP 授權(quán)提供者、電子輔助設(shè)計(jì)工具(EDA Tool)與晶圓代工業(yè)者(Foundry)的高度分工,卻更能藉由成熟的「研發(fā)供應(yīng)鏈」互通有無(wú),沿用早被諸多客戶千錘百煉的晶圓廠制程參數(shù)、現(xiàn)有IP 功能模組和函式庫(kù),迅速完成產(chǎn)品的開發(fā)與驗(yàn)證,并縮短時(shí)程降低成本。

  SPARC 兩位要角之一的Fujitsu,會(huì)在新世代HPC 產(chǎn)品A64FX 轉(zhuǎn)向ARM 并交由臺(tái)積電7 納米制程代工,其因在此,光曾被蘋果和眾多客戶「嚴(yán)刑拷打」的寶貴經(jīng)驗(yàn),對(duì)盡快搞定產(chǎn)品絕對(duì)是重中之重的無(wú)價(jià)之寶。

  這件事也發(fā)生在放棄自有晶圓廠的 AMD。K11 時(shí)代,AMD 反過(guò)來(lái)利用晶圓代工生產(chǎn)GPU 的高密度函式庫(kù)和自動(dòng)化設(shè)計(jì)工具,砍掉多達(dá)30% 的CPU 芯片面積與耗電量,特別是過(guò)往「動(dòng)用大量人力手工布線才能電路最佳化」的功能單元,如復(fù)雜的浮點(diǎn)運(yùn)算器。「GPU 的電路設(shè)計(jì)最佳化程度優(yōu)于 CPU」這檔事,在21 世紀(jì)初期的 AMD 連想都不敢想。

  這些經(jīng)驗(yàn)和努力,對(duì) Zen 的成功絕對(duì)舉足輕重。就商業(yè)角度來(lái)看,這也讓AMD 未來(lái)保有開發(fā)新型商業(yè)模式的彈性,中國(guó)中科海光(Hygon)的Dhyana 就是采用授權(quán)的Zen 核心,當(dāng)然美國(guó)政府愿意「樂(lè)觀其成」那又是另一回事了。

  「RISC86」與4 道 x86 指令解碼的先行者

  將指令格式與定址模式復(fù)雜到讓人頭痛的x86 指令,在指令解碼階段「轉(zhuǎn)譯」成一至數(shù)個(gè)固定長(zhǎng)度、格式簡(jiǎn)潔的「類RISC」微指令(Microinstruciton),以簡(jiǎn)化處理器執(zhí)行單元與數(shù)據(jù)路徑的設(shè)計(jì),利于提升時(shí)鐘頻率,并「將晶體管預(yù)算砸在最值得被加速的簡(jiǎn)單指令,不常用到的復(fù)雜指令,就用微碼(Microcode)ROM 產(chǎn)生ROP 微程式慢慢跑」,已是20 年來(lái)x86 CPU 的共同特色,超標(biāo)量架構(gòu)大師Mike Johnson 領(lǐng)銜的K5 則是先驅(qū)(如果不限超標(biāo)量,NexGen Nx586 則稍早),將非固定長(zhǎng)度的x86 指令解碼成平均59 Bits 長(zhǎng)的ROP(RISC86Operation,發(fā)音是「ar-op」)。

  AMD K5 還有個(gè)值得紀(jì)念之處:x86 史上首款單一核心最多可同時(shí)解碼4 個(gè)x86 指令的CPU,下一款是相隔近十年的英特爾Merom 了,不提尷尬的K11,AMDZen 更晚了自家「前輩」超過(guò)20 年。

  強(qiáng)化非循序指令執(zhí)行效率的兩段式微指令轉(zhuǎn)譯與「類VLIW」的微指令派發(fā)

  x86 CPU 的指令解碼器將x86 指令轉(zhuǎn)成微指令,看起來(lái)好像很美好,但隨著CPU 可同時(shí)非循序執(zhí)行的指令數(shù)量越來(lái)越多,「微指令洪災(zāi)」就變成大麻煩,需要復(fù)雜的功能單元與相對(duì)應(yīng)的電路成本,監(jiān)控管理一海票微指令的生老病死與相依性,這也不利減少CPU 功耗。

  在這就非得岔題談一談「首款雙核心服務(wù)器CPU」的IBM Power4 了,為縮減指令控制邏輯的復(fù)雜度,Power4 一次將5 個(gè)解碼后的指令「打包」成一個(gè)「一個(gè)蘿卜一個(gè)坑、每個(gè)指令垂直對(duì)應(yīng)一個(gè)執(zhí)行單元」的超長(zhǎng)指令(VLIW)包(一時(shí)腦筋轉(zhuǎn)不過(guò)來(lái),可想一下AMD GPU 以前的VLIW5),里面5 個(gè)指令全部執(zhí)行完畢才能退返(Retire),控制邏輯單元只需管控相當(dāng)于100 個(gè)指令的20 個(gè)指令包,這讓Power4 這部分電路規(guī)模只有前代Power3 的一半,且更便于拉抬CPU 時(shí)鐘頻率。

  AMD 則是從K7 開始兩段式微指令轉(zhuǎn)譯,指令解碼器先將x86 指令解碼一至兩個(gè)MOP(Macro-Operation),到了內(nèi)部要在指令保留站(Reservation Station)「派發(fā)」(Dispatch)到執(zhí)行單元前,再拆成更小的uOP(發(fā)音「ur-op」),接著才「真槍實(shí)彈上陣」,避免一開始就把微指令拆光光,淹沒(méi)指令管理單元,也變相將指令解碼器的復(fù)雜度分散到「大后方」。

  關(guān)于無(wú)法直接用「Fast Path」指令解碼器處理成 MOP 的復(fù)雜指令,由「Vector Path」的微碼 ROM 產(chǎn)生一系列MOP 微程式。前面就提過(guò),所謂「RISC86」真正的精神就如同 RISC:把經(jīng)常用到的情況盡可能加速(Make The Common Case Fast.),將最佳化資源集中在最常碰到的刀口。

  同期英特爾的手段就讓人莞爾,起源于Pentium M 的「Macro-Fusion」,英特爾直接藉由增加指令保留站的運(yùn)算元數(shù)量,削減CPU 內(nèi)部微指令的總量,例如用一個(gè)三運(yùn)算元(a =b+c)微指令代替兩個(gè)(a=a+b),說(shuō)穿了也稱不上什么「融合」,或還不如說(shuō)「本來(lái)就應(yīng)該這樣做」更貼切。

  相對(duì)英特爾從Merom 開始,指令保留站某些Port 擠滿了一堆不同性質(zhì)執(zhí)行單元的「爆漿撒尿牛丸」樣貌,AMD 那「整數(shù)浮點(diǎn)一邊一國(guó)的簡(jiǎn)潔風(fēng)」在「簡(jiǎn)單就是美」的推土機(jī)展露無(wú)疑,非?!竀LIW」,就算沒(méi)有像IBM Power4 那樣「指令打包送快遞」,但看在總工程師都是同一位如假包換的Chuck Moore 份上,企圖簡(jiǎn)化復(fù)雜度以追求更高運(yùn)作時(shí)鐘頻率與更高投資效益的意圖是一致的。

  盡管推土機(jī)家族的下場(chǎng)不是太好看,但類似理念也同樣被Zen繼承,反正各位只需了解一個(gè)殘酷的現(xiàn)實(shí):畢竟AMD 的研發(fā)能量遠(yuǎn)不如英特爾,不見得有雄厚本錢采取過(guò)于精密復(fù)雜的架構(gòu)風(fēng)格,此類「窮人思維」在AMD CPU 發(fā)展史上無(wú)所不在。

  眾里尋他千百度才秾纖合度的分支預(yù)測(cè)

  「電腦」(Computer)和「計(jì)算器」(Calculator)的不同點(diǎn)在于:電腦具備「條件判斷」的能力,依據(jù)不同條件,執(zhí)行不同指令流。各位可將電腦程式的運(yùn)作流程,想像成一個(gè)「棋盤」,以一個(gè)角落為起點(diǎn),對(duì)角線的角落當(dāng)終點(diǎn),在棋盤上反覆移動(dòng),不限制前進(jìn)或后退。如發(fā)生條件判斷的分支(Branch,必須先等待條件判斷的執(zhí)行結(jié)果,才能判定該分支「發(fā)生」),或無(wú)條件判斷的跳躍(Jump),就會(huì)變更指令流,并中斷指令流水線運(yùn)作,尤其前者傷害指令流水線化的CPU 效能,才需要「以古鑒今」的分支預(yù)測(cè)(Branch Prediction)技術(shù)。

  「過(guò)猶不及」的「分支預(yù)測(cè)」一向公認(rèn)是AMD 落后英特爾的技術(shù)弱點(diǎn),到了 Zen 才改觀。賈誼〈過(guò)秦論〉那句意謂秦始皇繼承六代功業(yè)的「奮六世之余烈」,套用到Zen看似突破性的分支預(yù)測(cè)技術(shù),實(shí)在再適合不過(guò)了,在Zen 之前,剛剛好也是6 世代:K5、K6、K7、K8、K10、K11,有夠巧。

  因 K11 的分支預(yù)測(cè)技術(shù)和前代相比簡(jiǎn)直徹頭徹尾大相徑庭,故不列于下表。

  一般我們談到的是「動(dòng)態(tài)」分支預(yù)測(cè),透過(guò)小型化 Cache存儲(chǔ)器,記錄分支行為的歷史,并隨時(shí)搜集各類參考資訊,動(dòng)態(tài)的修正預(yù)測(cè)的結(jié)果。近年來(lái)拜「CPU 安全漏洞」所賜,「預(yù)測(cè)執(zhí)行」(Speculative Execution)、「非循序執(zhí)行」(Out-Of-Order Execution)和「分支預(yù)測(cè)」等技術(shù)名詞,變得非常熱門也經(jīng)常混淆。

  各位只要記得,對(duì)近代高效能CPU,「預(yù)測(cè)執(zhí)行=分支預(yù)測(cè)+非循序執(zhí)行」,CPU 根據(jù)分支預(yù)測(cè)的結(jié)果,先斬后奏「賭博」性執(zhí)行指令流,再藉由非循序執(zhí)行引擎維護(hù)指令執(zhí)行順序的一致性,以及當(dāng)預(yù)測(cè)錯(cuò)誤時(shí),回復(fù)該分支前的處理器狀態(tài)。

  分支預(yù)測(cè)究竟有多重要?假如有一顆CPU 沒(méi)有任何分支預(yù)測(cè)機(jī)制(或說(shuō)有,但總是預(yù)測(cè)錯(cuò)誤),當(dāng)執(zhí)行分支指令時(shí),直到目標(biāo)指令被擷取,所需要的時(shí)鐘頻率周期數(shù)「分支傷害」(Branch Penalty)是3 個(gè)時(shí)鐘頻率周期,分支占了程式碼五分之一,那會(huì)損失多少效能?

  3 * ? =0.61 / (1+0.6) = 0.625

  我們就可簡(jiǎn)單推算出,平均執(zhí)行每個(gè)指令都會(huì)多出 0.6 個(gè)時(shí)鐘頻率周期,等于增加60% 執(zhí)行時(shí)間,執(zhí)行效能僅剩下 62.5%。

  很不幸的,這個(gè)簡(jiǎn)單的案例還真的有倒楣的苦主:AMD K5的初版「SSA/5」(PR75 到PR100),因不明原因,分支預(yù)測(cè)功能被關(guān)閉,還「附贈(zèng)」奇怪的CPU 閑置狀態(tài),「完全體」5K86(PR120 到PR200)的同時(shí)鐘頻率效能就硬是多了整整30%。讓人極度好奇,假若 Compaq 知道他們死撐著不用 Pentium,只為了等待這樣的產(chǎn)品,會(huì)做何感想。

  K5 的分支預(yù)測(cè)超級(jí)陽(yáng)春,準(zhǔn)確率僅75%。當(dāng)連續(xù)執(zhí)行分支指令時(shí),等于每道指令平均多 0.75 個(gè)時(shí)鐘頻率周期,沿用上面「分支占五分之一」的算法是 0.15,效能僅剩 87%,怎么看分?jǐn)?shù)都不及格。但這時(shí)各位也應(yīng)心知肚明,后期 K5 多出來(lái)的 30% 效能大致上是怎么來(lái)的,分支預(yù)測(cè)的確發(fā)揮了關(guān)鍵性作用。

  (75% * 0) + (25% * 3) = 0.750.75 * ? = 0.151 / (1 + 0.15) = 0.87

  購(gòu)并NexGen 而來(lái)的K6 卻是AMD 史上罕見的「過(guò)度投資」,和K5 同為六階流水線、但最多只能解碼兩個(gè)x86 指令的K6,在分支預(yù)測(cè)暴力到整個(gè)過(guò)頭,足以傲視AMD 歷代CPU架構(gòu),但這是天大的浪費(fèi),況且分支預(yù)測(cè)越復(fù)雜,發(fā)生錯(cuò)誤的回復(fù)時(shí)間也就越長(zhǎng),K6 的錯(cuò)誤代價(jià)就硬比K5 多出一到兩個(gè)時(shí)鐘頻率周期(3 vs. 4 或5 )。

  K6 的分支預(yù)測(cè)準(zhǔn)確率號(hào)稱高達(dá)95%,我們可推算出執(zhí)行每個(gè)分支指令只會(huì)多出0.2 到0.25 個(gè)時(shí)鐘頻率周期,「分支占五分之一」就0.04 到0.05,效能維持在95%到96%,遠(yuǎn)勝過(guò)K5。

 ?。?5% * 0) + (5% * 4) = 0.2(95% * 0) + (5% * 5) = 0.251 / (1 + 0.04) = 0.961 / (1 + 0.05) = 0.95

  不知道是不是針對(duì)K6「過(guò)度投資」的反動(dòng),或是覺得過(guò)于復(fù)雜的分支預(yù)測(cè)只會(huì)帶來(lái)反效果,AMD 在1998 年MicroprocessorForum 揭露K7 的神秘面紗時(shí),最讓人意外的不是和DECAlpha 21264 如出一轍的「體格」,而是「Long Pipeline, But SimpleBranch Predictor」。

  面對(duì)外界種種質(zhì)疑,AMD 堅(jiān)持「更精確的分支預(yù)測(cè)器只會(huì)帶來(lái)更復(fù)雜的設(shè)計(jì)、更多的預(yù)測(cè)時(shí)鐘頻率周期與回復(fù)效能損失」,還更大膽的將標(biāo)準(zhǔn)的2 位元Smith 演算法4 種狀態(tài),砍成只剩下3 種(將Strongly not taken 和Weakly not take 合為一種not taken)。對(duì)照K7 壓倒性的龐大執(zhí)行單元,在這種小地方偷工減料,真的是莫大諷刺,但更扯的還在后頭。

  演進(jìn)自K7 的K8 與「壓榨K8 剩余價(jià)值」的K10,指令流水線更深,沒(méi)有擺爛裝死的借口,乍看之下「知恥近乎勇」亡羊補(bǔ)牢,但卻很精明的利用「L1 / L2 互斥性 Cache(ExclusiveCache)」的特性,趁著數(shù)據(jù)從L1 指令 Cache「被驅(qū)逐」(Evicted)寫入L2  Cache時(shí),將分支選擇器「偷放」在L2  Cache存儲(chǔ)器包含指令的 Cache區(qū)塊之ECC 欄位,「節(jié)儉」至此,堪稱一絕。

  受制于不佳的分支預(yù)測(cè)精準(zhǔn)度與「連如此簡(jiǎn)單的整數(shù)核心都喂不飽」的L1 指令 Cache存儲(chǔ)器,甚少人注意到指令流水線深達(dá)20 階的K11,解耦式分支預(yù)測(cè)器(DecoupledBranch Predicator)早已默默為Zen 2 的「機(jī)器學(xué)習(xí)分支預(yù)測(cè)器」TAGE(TAgged GEometric)分支預(yù)測(cè)器預(yù)先埋好了路基。

  相近于今日少為人知的Rise mP6,K11 不等發(fā)生指令 Cache誤失才去抓取目標(biāo)指令,推土機(jī)的分支預(yù)測(cè)機(jī)制與指令擷取「脫鉤」,主動(dòng)標(biāo)定分支預(yù)測(cè)目標(biāo)的相對(duì)位址,如不存在于指令 Cache內(nèi),就「主動(dòng)出擊」預(yù)先擷取,可掩蓋發(fā)生 Cache誤失時(shí)的延遲,并替更耗時(shí)的機(jī)器學(xué)習(xí)分支預(yù)測(cè)器「爭(zhēng)取訓(xùn)練的時(shí)間」。

  依照 AMD 的說(shuō)法,Zen 2 的分支錯(cuò)誤率比 Zen 減少了 30%,意味著 Zen 從 97% 的精確度提升到 Zen 2 的 98%。但不論解耦式分支預(yù)測(cè)器還是機(jī)器學(xué)習(xí)分支預(yù)測(cè)器 TAGE,都是英特爾研究多年并發(fā)表過(guò)學(xué)術(shù)論文的產(chǎn)物,很可能早就導(dǎo)入產(chǎn)品了,但沒(méi)刻意拿出來(lái)說(shuō)嘴。不過(guò)花了這么長(zhǎng)的時(shí)間,AMD 總算在分支預(yù)測(cè)趕上英特爾的水準(zhǔn),仍值得可喜可賀。

  激增有效實(shí)質(zhì)容量的互斥性 Cache架構(gòu)

  各位有沒(méi)有想過(guò):Ryzen Threadripper3990X 的「288MB」 Cache容量究竟是怎么算出來(lái)的?

  答案是「64 核心× 512kB 第二階 Cache」加上「8個(gè)CCD × 2 個(gè)CCX × 16MB 第三階 Cache」,因兩邊的內(nèi)容是「互斥」(Exclusive)的,而第二階 Cache完全包含(Inclusive)了第一階 Cache的內(nèi)容,所以有效容量是32MB+256MB=288MB,這也是AMD CPU 從K7 后期至今,一個(gè)持之以恒的共同特征,而英特爾則從Nehalem 開始,走上另一條徹底相反的路線。

  互斥性 Cache架構(gòu)的發(fā)生背景是K7 從Thunderbird 開始,CPU直接整合256kB 或64kB 第二階 Cache存儲(chǔ)器,但K7 的第一階Cache總?cè)萘慷噙_(dá)128kB,不讓兩者「油水分離」,將會(huì)浪費(fèi)大量的有效容量,如Duron 的L1 竟然還是L2 兩倍的蠢事(128kB vs. 64kB)。從 K7 到 K10 是 L1 / L2 互換,K11到 Zen 則調(diào)整成 L2 / L3 輪轉(zhuǎn)。

  K8 / K10 利用這點(diǎn),趁L1 指令Cache的數(shù)據(jù)搬到L2 時(shí),將分支選擇器隨著預(yù)先解碼(Pre-decoded)和奇偶校驗(yàn)(Parity)欄位,一并寫入確定存放指令的L2  Cache區(qū)塊之ECC 欄位,但互斥性 Cache架構(gòu)也是AMD CPU 最末階 Cache延遲過(guò)長(zhǎng)的元兇。

  服務(wù)器等級(jí)的存儲(chǔ)器自動(dòng)偵測(cè)容錯(cuò)機(jī)制

  服務(wù)器要的是RAS:可靠性(Reliability)、可用性(Availability)、可服務(wù)性(Serviceability),而最大的潛在威脅,莫過(guò)于構(gòu)成地球低強(qiáng)度背景輻射的帶電粒子,所引起位元翻轉(zhuǎn)的存儲(chǔ)器軟錯(cuò)誤(Soft Error),動(dòng)輒偶發(fā)的多位元錯(cuò)誤更是一大挑戰(zhàn)。K8 之所以能替AMD 敲開服務(wù)器天堂的大門,被偵錯(cuò)容錯(cuò)機(jī)制高度保護(hù)的 Cache存儲(chǔ)器與主存儲(chǔ)器,以及檢測(cè)硬體錯(cuò)誤并回報(bào)軟體進(jìn)行復(fù)原處理的硬體檢查架構(gòu)(Machine Check Architecture,MCA),統(tǒng)統(tǒng)功不可沒(méi)。

  從K8 到Zen,ECC(Error-CorrectingCode)越來(lái)越強(qiáng)悍,L1 數(shù)據(jù) Cache存儲(chǔ)器可「修復(fù)單位元錯(cuò)誤,偵測(cè)雙位元錯(cuò)誤」,L2 / L3  Cache存儲(chǔ)器更「修復(fù)雙位元錯(cuò)誤,偵測(cè)三位元錯(cuò)誤」,但「數(shù)據(jù)損壞了頂多重抓」的L1 指令 Cache「不太需要完善保護(hù),只須奇偶校驗(yàn)」的原則毫無(wú)改變的跡象,事實(shí)上也沒(méi)必要,起碼節(jié)約成本。

  K8 整合式存儲(chǔ)器控制器支援防止存儲(chǔ)器多位元錯(cuò)誤的 Chipkill 技術(shù),如何做到?下面這張圖闡述得非常清晰。

  既然存儲(chǔ)器模組使用的 ECC 演算法無(wú)法糾正超過(guò)單位元的錯(cuò)誤,那么我們就「分而治之」,讓超過(guò)單位元的錯(cuò)誤,不會(huì)出現(xiàn)在單一存儲(chǔ)器模組。假設(shè)有4 條存儲(chǔ)器模組,而存儲(chǔ)器模組顆粒數(shù)據(jù)總線的寬度為4 位元,我們各自分開存放ECC 偵錯(cuò)碼的額外顆粒的4 條數(shù)據(jù)線,和另外3 條模組的數(shù)據(jù)線組成4 位元寬度,即可預(yù)防單一存儲(chǔ)器模組發(fā)生超過(guò)1 位元的錯(cuò)誤。

  論服務(wù)器可靠性RAS,英特爾、AMD 是半斤八兩,像在Nehalem-EX(Xeon 7500 系列)時(shí)期,英特爾硬把Itanium 一整套搬到x86 平臺(tái)變成「MCA Recovery」,可在存儲(chǔ)器區(qū)塊標(biāo)示硬體無(wú)法修復(fù)的錯(cuò)誤,通知作業(yè)系統(tǒng)或虛擬機(jī)器管理員不再使用這些單元,關(guān)閉標(biāo)示錯(cuò)誤的數(shù)據(jù)并重新啟動(dòng)程式,AMD 也從來(lái)沒(méi)有缺席(軟體支援性就見仁見智了),但AMD 在21 世紀(jì)初期曾短暫從英特爾手上奪過(guò)服務(wù)器的技術(shù)優(yōu)勢(shì),依然值得大書特書。

  經(jīng)過(guò)千錘百煉的 Cache數(shù)據(jù)一致性協(xié)定

  Cache數(shù)據(jù)一致性協(xié)定(Cache CoherenceProtocol)對(duì)多核心與多處理器平臺(tái)的效能的重大影響,無(wú)論怎么說(shuō)都是毋庸置疑的,不只服務(wù)器RAS,x86 CPU 在AMD K7 問(wèn)世的MOESI協(xié)定,相較于行之有年的MESI,Owner 狀態(tài)允許尚未更新主存儲(chǔ)器的內(nèi)容前,不同CPU 之間可提前共享、并交換修改后的 Cache區(qū)塊,可大幅減輕系統(tǒng)總線的壓力,這因K8 整合存儲(chǔ)器控制器,而在多處理器環(huán)境,讓主存儲(chǔ)器分散在四處的NUMA(Non-Uniform Memory Access)架構(gòu),更是決定效能的關(guān)鍵。

  AMD 或多或少有英特爾的 MESIF 協(xié)定殷鑒在前,Zen 進(jìn)一步擴(kuò)充成 MDOEFSI。

  L3  Cache「海納」L2  Cache標(biāo)簽(Tag)的巧思,使其搖身一變,成為可過(guò)濾 Cache一致性協(xié)定廣播的Probe Filter(或稱之為Snoop Filter,AMD 的行銷名稱是HT Assist) ,不必像K10 切割部分L3  Cache容量,或在系統(tǒng)芯片組塞一大塊SRAM 當(dāng)成記錄所有 Cache區(qū)塊狀態(tài)的目錄,僅付出低成本實(shí)現(xiàn)高效率的 Cache一致性。

  將MDOEFSI 協(xié)定的細(xì)節(jié)束之高閣,目前看來(lái)在實(shí)體CPU 芯片(CPU Complex)數(shù)量極多的EPYC 和Threadripper 運(yùn)行還不錯(cuò),長(zhǎng)期大型單一晶粒共用L3  Cache的英特爾卻沒(méi)有這樣的特殊考慮,也許當(dāng)英特爾哪天基于成本因素,被迫和AMD 一起「包水餃」,那時(shí)才是考驗(yàn)英特爾 Cache一致性協(xié)定的最佳時(shí)機(jī)。

  支持大量處理器延展性的系統(tǒng)連結(jié)架構(gòu)

  最近 AMD 在財(cái)務(wù)分析師大會(huì)發(fā)表名為「Infinity Architecture」的 Infinity Fabric 3.0,不僅可連接多顆 CPU 和多顆 GPU,更可當(dāng)成CPU和 GPU 之間的橋梁。

  但這對(duì)AMD 來(lái)說(shuō)并非新穎的概念,AMD 早在十幾年前K8 的HyperTransport就打算這樣干了,而Infinity Fabric 就是從HyperTranspor延展出來(lái)的「超集合」,擁有更完整的功能,從定義AMD內(nèi)部SoCIP 區(qū)塊的通用控制方式,到解決異構(gòu)數(shù)據(jù)一致性的互連方案,都是持續(xù)進(jìn)化中的Infinity Fabric 可大展身手的領(lǐng)域。

  AMD 未來(lái)面對(duì)的挑戰(zhàn)依舊嚴(yán)峻

  本文標(biāo)題并不表示 AMD 這間公司就此功德圓滿?;仡?5 年的AMD K 系列CPU 迢迢來(lái)時(shí)路,想必各位可漸漸感受到身為碩果僅存英特爾唯一x86 競(jìng)爭(zhēng)者(好吧,勉強(qiáng)還有臺(tái)灣VIA 的Centaur 和俄羅斯的Elbrus),面對(duì)資源數(shù)倍于己的超級(jí)強(qiáng)敵,身處毫無(wú)犯錯(cuò)余裕、如履薄冰、步步為營(yíng)的艱困處境,研制產(chǎn)品時(shí)的取舍與掙扎,更是AMD 困境的縮影。

  至于時(shí)下的AMD 是否「已經(jīng)」成功,也是個(gè)巨大的問(wèn)號(hào),服務(wù)器市場(chǎng)市占率、營(yíng)收與獲利仍遠(yuǎn)遠(yuǎn)不及K8 核心Opteron 全盛期水準(zhǔn),另一邊的GPU 戰(zhàn)場(chǎng),還是被nVidia 壓著打,實(shí)際上只能算勉強(qiáng)站穩(wěn)腳步,離「成功」兩字仍有一段相當(dāng)長(zhǎng)的距離。AMD 另一個(gè)比較大的潛在危機(jī)在于「未來(lái)性」,這和公司能真正「發(fā)大財(cái)」互為表里。

  如果對(duì)比「蘇媽」和「皮衣教主」的演講內(nèi)容,相信大多數(shù)人仍會(huì)覺得前者「相當(dāng)傳統(tǒng)保守」,后者「象征光明未來(lái)」。從量子計(jì)算、人工智能到自駕車等新興應(yīng)用,AMD 統(tǒng)統(tǒng)沾不上邊,連在高效能運(yùn)算市場(chǎng)要反攻Top500 席次都還頗有難度,唯有鞏固并擴(kuò)張數(shù)據(jù)中心的獲利與營(yíng)收,才有足夠銀彈投資未來(lái)。偏偏這里又是英特爾重兵集結(jié)、拼死防御、明槍暗箭明招暗招毫無(wú)保留的「現(xiàn)金母牛」(Cash Cow),絕不會(huì)平白拱手讓人。

  AMD 能否守住得來(lái)不易的戰(zhàn)果,唯有寄望晶圓代工商業(yè)模式有機(jī)會(huì)讓英特爾的制程霸權(quán)從此一去不復(fù)返,或英特爾再度犯下重大戰(zhàn)略失策,但筆者對(duì)此的態(tài)度并不樂(lè)觀,2020 年第三季的Zen 3 與第三代EPYC「Milan」對(duì)AMD 將是極為重要的命運(yùn)轉(zhuǎn)折點(diǎn)。從光鮮亮麗簡(jiǎn)報(bào)溢出來(lái)的滿滿憂慮,其實(shí)都早寫在 AMD高層和無(wú)數(shù)員工的臉上,只是你沒(méi)看出來(lái)。

  好戲即將上演,就讓我們拭目以待。

  

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。