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

歡迎光臨散文網 會員登陸 & 注冊

【轉】 AMD推土機最大的秘密:Decoupled Front-end Architecture

2023-09-11 00:20 作者:小林家的垃圾王R  | 我要投稿

?AMD推土機最大的祕密:Decoupled Front-end Architecture

魯蛇實驗室

魯蛇實驗室?發(fā)表於 2014年4月21日 09:00?收藏此文

據(jù)可靠消息來源指出,電腦王103期留下「AMD是否在推土機微架構上,取得多核心/多執(zhí)行緒的完美平衡」的伏筆,光陰似箭,歲月如梭,而作者仍『富奸』依舊。外界卻盛傳電腦王編輯部密謀推舉本專欄與臺灣水電工,一同出馬競選夜市雞排包裝紙使用率冠軍。

三期零利率方案實施中

這不是購物臺商品促銷廣告,而有鑑於「AMD推土機最大的祕密」這主題牽連甚廣,包含諸多非常基本的電腦概念,與相關歷史文獻的考證工作,若是貿然單刀直入、亂塞一堆圖解,恐怕屆時讀者腦中只會殘留著「躺著輕鬆吸收」的恐怖幻覺,和編輯部討論後,毅然決定以三期連載來九淺一深…呃,深入淺出、抽絲剝繭,以竟全功,一心一德,貫徹始終。

無敵大哉問:電腦為何物?

越看似想當然耳的簡單問題,越難以獲得言簡意賅般的精確答覆,在此複習「計算機(Computer,或叫電腦)」與「計算器(Calculator)」最大的相異點:「進行條件判斷」與「變更執(zhí)行流程」的能力,可依據(jù)不同的條件,執(zhí)行不同的指令,作為人類用來處理訊息的工具。

好比天底下的男人都有自己獨樹一幟的審美觀,靈魂之窗內建的過濾器會自動分辨參加聯(lián)誼的對象是「正妹」還是「恐龍」,身體再決定要上前搭訕還是拔腿烙跑,毋需冒險承擔從大閒者轉職勇者的風險。

當代主流架構:儲存程式型電腦

但「電腦」不限於此,你想用電腦「泛用化(General Purpose)」,不限定於固定的用途,讓機器更有彈性,你就需要創(chuàng)造一組「指令集架構(ISA,Instruction Set Architecture)」作為電腦最基礎的「語言」,並將所謂的「運算」轉化成一連串指令的執(zhí)行細節(jié)。講的抽象一點,指令集在電腦內扮演的角色,不外乎軟體和硬體之間的「介面(Interface)」。

一套完整的指令集架構,需定義運算性質(加減乘除資料搬移)的運算子、中斷例外規(guī)則、執(zhí)行權限層級、系統(tǒng)呼叫程序、記憶體保護等,也必須包含進行條件判斷與變更執(zhí)行流程的規(guī)則,以及標定運算目標的運算元(主記憶體、暫存器)之定址模式。

▲進階觀念:作為硬體與軟體之間介面的「指令集架構」與結合作業(yè)系統(tǒng)特性的「應用程式二進位執(zhí)行檔介面」?

Q1:為何同樣採用x86指令集架構的Windows和Linux,卻無法直接相互執(zhí)行應用程式?

Q2:同樣Windows作業(yè)系統(tǒng),為何無法直接在32位元OS執(zhí)行x64應用程式?

Q3:為何32位元Windows作業(yè)系統(tǒng)能執(zhí)行Win32應用程式?無須重新編譯?

A:ABI(Application Binary Interface)結合處理器指令集與作業(yè)系統(tǒng)的服務呼叫等雙重特性,讓編譯好的目的碼(Object Code)可直接運行,無須修改。不同的作業(yè)系統(tǒng)有其相異的ABI規(guī)範,所以Windows無法直接執(zhí)行Linux應用程式,反之亦同。?

Q:和「應用程式介面」API(Application Programming Interface)有何不同?

A:API的功能在於「讓程式碼可在支援相同API的環(huán)境中編譯」,定義的是「程式碼與作業(yè)系統(tǒng)/函式庫之間的抽象介面」,提高應用程式的維護性和擴展性。中國那邊譯作「應用編程介面」其實比較貼切。?

這些指令是一種特殊型態(tài)的靜態(tài)資料(基本上是唯讀的,但x86有SMC這種例外),以被編碼的形式,存放在與CPU分開的「主記憶體」內,可讓使用者依據(jù)不同的用途、更替不同的程式,也可讓程式執(zhí)行時,自我修改程式的運算內容。這就是我們今日耳熟能詳?shù)摹阜都~曼型架構(Von Neumann Architecture)」。

而「范紐曼瓶頸」:記憶體速度跟不上CPU,也是近代高效能處理器的最明顯侷限,多層化的高效能快取記憶體、高效率的系統(tǒng)匯流排、非循序記憶體存?。∕emory Disambiguation)、決定多處理器及多核心效能延展性的快取資料一致性協(xié)定(Cache Coherence Protocol)等,均為紓解此瓶頸而生,但並非擁有無止盡的記憶體頻寬和無限低的記憶體延遲就此高枕無憂,因為考慮到程式執(zhí)行的行為模式,廣義的范紐曼瓶頸還有「控制指令執(zhí)行流程」這一關。

▲這簡單的一張圖足以解釋今日主流電腦架構的效能瓶頸。

資料和指令分開存放的「哈佛架構」

哈佛架構(Harvard Architecture)將程式指令和資料儲存分而治之,可同時存取資料和指令,理論上有較高的執(zhí)行效率,但資料與指令記憶體的存放空間不能互通有無,缺乏記憶體容量的使用彈性,所以在今日多數(shù)存在於特殊應用的小型微控制器與數(shù)位信號處理器。

哈佛架構也偶爾被引申為分離式指令快取和資料快?。ㄌ貏e是L1),這在今日多數(shù)高效能處理器算是常態(tài)了。唯一可以肯定的是,哈佛架構和林書豪沒有任何關連。(編輯部:你嫌氣溫不夠低嘛?)

「指令集架構」vs「核心微架構」

近年來拜ARM此類授權IP商務模式的影響之所賜,似乎越來越多人搞不清楚「指令集架構」和「核心微架構(Micro-Architecture)」的差別,舉統(tǒng)治個人電腦市場的80x86為例,前者說穿了是「電腦的基本語言(x86指令集的歷代沿革,i386、x86-64、SSE、AVX等)」,後者是「執(zhí)行語言的載具(Intel和AMD一大票微架構code name)」,不能混為一談。

無獨有偶,現(xiàn)在是智慧型手機征服地球的時代,那支配該市場的ARM又是怎麼一回事呢?現(xiàn)行主流ARMv7-A指令集,總計有ARM本家賣IP授權給別人的Cortex-A5/A7/A9/A12/A15/A17這幾種核心微架構,而Qualcomm自行開發(fā)Scorpio/Krait,Apple併購PA Semi後也關起門來搞出A6「Swift」。

只要作業(yè)系統(tǒng)相同(如版本Android或iOS),這些核心微架構應當正確執(zhí)行使用ARMv7-A指令集撰寫或編譯出來的軟體,講的更專業(yè)一點,它們擁有相同的應用程式二進位執(zhí)行檔介面(ABI,Application Binary Interface),如同Intel與AMD的x86處理器都可正確安裝Windows作業(yè)系統(tǒng),理所當然地執(zhí)行Office等應用軟體和Battlefield等套裝遊戲。

x86指令集缺乏統(tǒng)一標準和公定版本

這其實並不需要浪費篇幅多加解釋,誰叫所有x86處理器廠商都喜歡各搞各的,而Intel又總是「造成既成事實」逼迫大家相容,懶得出面制定標準,「幸好」現(xiàn)在市場只剩下兩間廠商,AMD又放棄SSE5依循Intel AVX(還是搞一些XOP延伸指令),情況應該會慢慢改善,結局不是只剩下Intel一家獨霸就功德圓滿了。

▲eClipz計畫的結局固然壯志未酬、未能一舉悲願成就藍色巨人兩大高階伺服器的「統(tǒng)一大業(yè)」,但也夠讓搬折凳吃零食看好戲的鄉(xiāng)民們津津樂道了。圖片來源:IBM。

截然不同的微架構可相容同樣的指令集,Intel和AMD的x86處理器「原則上」都可正確執(zhí)行相同的軟體,但性能特徵卻大相逕庭。反之,就算是不同的指令集,透過良好的共通微指令(Micro-Instruction,在處理器內構成指令控制訊號的微碼)及控制單元,也可實作出「部分共享」的微架構,IBM近年來為了節(jié)約處理器研發(fā)支出、曾嘗試統(tǒng)合Power與System z的處理器微架構,殷鑑不遠,而AMD的K5身為x86處理器的一員,浮點運算器卻原封不動的沿用自家RISC處理器AM29000的相同功能單元,更是一絕。

藍色巨人功敗垂成的eCLipz計畫

「eCLipz(enhanced Core logic for iSeries, pSeries and z Series)」很可能是近二十年來IT產業(yè)界最大秘密之一,繼IBM在Power5時期,將AS/400體系的System i全面轉用和System p相同的硬體,源自於1960年代號稱僅次於登陸月球與太空梭之「人類歷史上規(guī)模最大的商用產品開發(fā)計畫」的System z大型主機,就成為藍色巨人下一個企圖整併的目標。

根據(jù)當時已知情報,原先IBM打算在「超高時脈」Power6上,採用部分硬體支援的二進位執(zhí)行檔轉換機制(Binary Translation)實現(xiàn)高速執(zhí)行S/360體系指令集,也準備好該平臺上的全系統(tǒng)模擬器,更讓Power6支援原先S/360才有的功能,如10進位整數(shù)和16進位浮點格式等,COBOL氾濫時代留下的遺產。

後來很可能是技術風險太高,或許擔憂客戶不信任整合後的軟硬體(畢竟大型主機是不能有down time的),這件事並沒有發(fā)生,僅「大量分享」Power6,但事後想想,這其實也蠻厲害的。

指令集和核心微架構深深影響彼此

不過這並不代表指令集和微架構涇渭分明、井水不犯河水,一套指令集的特性及優(yōu)缺點,會深深影響著微架構的發(fā)展途徑與經濟效益,兩者相互潛移默化,直接或間接反映在「產品」本身的市場競爭力,與指令集未來的擴充發(fā)展方向。

和編碼長度一致,指令編碼長度混亂的x86指令集,設計處理器時光控制單元的中斷與例外機制,就極度挑戰(zhàn)性,因為難以迅速儲存並回復處理器當時的狀態(tài),對指令解碼器更是沈重負荷。

像x86處理器相對RISC陣營的產品,擁有優(yōu)秀過頭的快取記憶體子系統(tǒng),與非循序記憶體存取,真的就是被硬逼出來的,因為x86有太多編譯器常用的「簡單」指令,如「計算有效位址後回存記憶體」或「載入記憶體資料後進行計算」,會直接以記憶體作為運算目標,不快根本不行。x86指令集定義的資料暫存器過少,提高發(fā)生暫存器相依的機率,自然也強迫x86處理器廠商狂砸重本在非循序指令執(zhí)行的刀口上。

ARM能在可攜式裝置市場享有壟斷地位,和其指令集簡潔明瞭、設計處理器時不必在最棘手的控制單元中斷例外處理焚膏繼晷、整合處理器核心時不需要耗費太多驗證時間、可縮短研發(fā)時程、儘速將產品送到市場上,脫離不了瓜葛。

避免指令集疊床架屋

Intel AVX一勞永逸解決因x86指令集持續(xù)擴張、加長指令長度與更動解碼演算法、而導致指令管線前端解碼效率不彰的宿疾(前提是未來的處理器微架構專心針對AVX最佳化,軟體也得努力使用AVX指令集),與ARMv8-A取消那四位元引述執(zhí)行(Predication)條件碼、將省下的編碼位元數(shù)、挪為倍增資料暫存器之用、解除實作更複雜非循序指令集執(zhí)行的緊箍咒,更是「在指令集擴充之路上,設法搬移未來微架構路障」的經典案例。

至於近來Apple A7「Cyclone」和NVIDIA喊很多年終於看到影子的Project Denver,雙方均可實現(xiàn)驚世駭俗的指令解碼發(fā)出率(Issue Rate),和ARM在64位元的v8指令集版本中,移除那嚴重限制非循序指令執(zhí)行揮灑空間的四位元引述執(zhí)行條件碼,更是唇齒相依,反倒和記憶體平面定址空間延伸到64位元這件事,一點關係都沒有。深信64位元讓處理器效能吃威而剛的人,應該好好捫心自問:處理器「位元數(shù)」的定義,到底是什麼。?

溫故知新:指令「發(fā)出率」與指令「派出率」

指令解碼發(fā)出率(Issue Rate):每個時脈週期最多解碼多少指令,一般等同於指令解碼器的數(shù)量。

解碼後指令派出率(Dispatch Rate):每個時脈可將多少解碼後(並暫存於指令保留站)的指令派發(fā)給執(zhí)行單元。

Apple A7「Cyclone」的發(fā)出率是非常驚人的6,而NVIDIA的Denver更是驚世駭俗的7(筆者敢打包票,一定有用上類似預先解碼快取之類的技術),遠超過ARM自家Cortex系列。論x86陣營,當可實行Macro Fusion時,現(xiàn)階段Intel和AMD的高階產品都是4+1。

但指令集特性不同,x86就算相對簡單且常被編譯器使用的指令,像「計算有效位址後回存記憶體」或「載入記憶體資料後進行計算」等,把相同工作搬到ARM上,因涉及以記憶體作為運算目標,載入-儲存(Load-Store)架構的RISC指令集難以一個指令搞定,直接比較,並不公允。

不同指令集架構之間去比較DMIPS,其實意義不大,這根本是XX比雞腿,這已是無數(shù)計算機結構教科書教導大家的大道理,但今天還是一堆人亂比的很高興。

而指令派出率也容易引起混淆,因為近代x86處理器會在指令解碼端,轉譯成固定長度的微指令(尤其微碼控制產生訊號者),不同x86處理器的作法也不盡相同,像AMD就採取「MOP/ROP兩段式」轉譯,難有比較基準,但將這些微指令視為等同RISC單一指令,也是一種概約的檢視方式。

優(yōu)秀指令集架構≠成功核心微架構

但天底下也沒有「只要指令集夠好(可能得外掛個「處理器時脈夠高」),就從此天下無敵」這種準則,市場規(guī)模往往顛覆很多約定俗成的常識,要不然這十多年來,也不會被x86陣營在伺服器工作站市場搞掛一狗票RISC家族,PA-RISC、Alpha、MIPS個個屍骨未寒,再加上快被Intel自己活活玩死的「舉世最先進伺服器指令集架構」IA-64,IBM更沒有靠著Power Everywhere征服計算機工業(yè)。

延伸閱讀:AMD的兩段式微指令轉譯,請參考電腦王69期(2010年四月)。

x86指令集長得如此難看,還不是靠著個人電腦市場的巨大動量,與x86陣營因此享有的製程技術和研發(fā)能量雙重優(yōu)勢,才能一步一步的控制了高效能泛用處理器的市場,搞到論高效能單執(zhí)行緒微架構,除藍色巨人IBM勉力抗衡外,已毫無敵手?,F(xiàn)在還有誰會記得二十年多年前吵沸沸揚揚的「RISC vs CISC」之爭?在Intel傲視世界的製程前面通通變笑話了

今天靠著軟體生態(tài)圈的庇蔭,在伺服器市場存活下來的唯二RISC指令集:Power(IBM)和SPARC(併購Sun的Oracle和少人知曉的Fujitsu),在RISC戰(zhàn)隊中,還普遍被公認是「比較CISC」的雙人組,如史詩般優(yōu)美動人的Alpha反倒是犧牲最壯烈的那一位。

下一頁:指令管線早已非「一條腸子通到底」

指令管線早已非「一條腸子通到底」

自從1990年IBM的Power1「America」成為計算機工業(yè)史上首款超純量(Superscalar)架構處理器,在一個時脈週期內執(zhí)行兩個以上的指令,結合起源於1967年IBM S/360 Model 91的非循序指令執(zhí)行(OOOE,Out-of-Order Execution,資訊科班學生不能不知道的Tomasulo演算法),傳統(tǒng)計算機概論在眾人心中描繪的「一條腸子通到底,跑的慢的指令會塞住後方」指令管線,早已不存在於近二十年來的高速處理器微架構。當十年前泛用處理器業(yè)界一頭撞上功耗之牆後,追求指令平行度(ILP,Instruction Level Parallelism)的重要性更凌駕於時脈提昇,成為支撐效能成長曲線的主要推手。

現(xiàn)在ARM SoC效能打不過x86處理器,難道只因「時脈比較低」?就算時脈平起平坐,論單核心效能,Intel的Valleyview和AMD的Jaguar照樣不費吹灰之力,活活電死檯面上公開規(guī)格的ARM SoC。論多核心效率與多處理器延展性,大概也不會有太多人相信ARM陣營能夠在記憶體子系統(tǒng)層面,包含快取資料一致性協(xié)定、系統(tǒng)匯流排與快取記憶體階層,足以匹敵x86雙雄,更罔論伺服器額外需要的可靠性、可用性與開發(fā)流程所需的產品驗證能力。ARM會願意為了其伺服器大計,遊說十年直到AMD帶槍投靠,不是沒有道理的。

▲Intel早在2006年Merom投入戰(zhàn)場的Macro Fusion後,相隔五年,AMD「終於」在推土機推出類似的功能。

講的白話一點:按照歷史教訓,當RISC處理器為了追求高效能而做到某個「複雜度」,因為指令集帶來的「稅賦」將隨著微架構的膨大而越來越微不足道,耗電量和「效能/功耗比」對x86大概也佔不了多少便宜,甚至還很可能被x86陣營長期享有的製程優(yōu)勢逆轉,ARM沒有理由不走上RISC前輩曾踏過的荊棘之路。藍色巨人IBM的Power,是集今日對ARM(或全體RISC)Server的幻想之大成,最完美的典範與最殘酷的例證。

1993年的Pentium是x86首款超純量處理器,1995年底讓x86逐步支配工作站及低階伺服器市場的Pentium Pro,則是首款支援非循序指令執(zhí)行的x86產品,而時下被媒體炒得火紅的ARM,則整整落後了超過十年,才有同級微架構(Cortex-A8/A9/A15)。1990年代隨Windows作業(yè)系統(tǒng)普及而爆炸式成長的個人電腦市場動量之巨大,由此可見一斑。

而「CISC指令通通跑不快,所以無法管線化高速執(zhí)行」的偏見也逐漸消失在世界的盡頭,藉由使用簡單低階層硬體線路控制和簡單的資料路徑,x86處理器也能享有很好的時脈速率,且整合硬體線路控制(控制簡單指令)與微碼控制(用來控制更複雜的指令)的轉換過程,更讓1990年代以降的x86處理器,普遍能以高效能執(zhí)行80x86指令集中「簡單且高使用頻率」的指令。

你覺得這段落很眼熟,甚至直接找出這是「參考」哪本書哪幾章哪幾頁的內容,代表看倌的計算機組織學的很好,上課有認真聽。

事實上,再複雜「再毫無道理可循」的指令集架構,也是會有一小撮「最被軟體經常使用」的簡單指令「最值得被加速處理」,高階程式語言編譯器的發(fā)展和RISC指令集的濫觴,兩者息息相關,躲在RISC背後的基本理念「Make the common case fast」同樣也可應用在CISC處理器。Intel在首款管線化處理器家族80486就已採用近似的概念,隨後的NexGen Nx586則是x86第一個「在處理器內部將x86處理器轉譯為RISC型態(tài)微指令」。

延伸閱讀:深度了解Intel史上最成功的x86處理器微架構:P6

77

2010十二月

從Sandy Bridge回顧Intel P6(上)

P160-P165

78

2011一月

從Sandy Bridge回顧Intel P6(中)

P160-P166

84

2011七月

從Sandy Bridge回顧Intel P6(下)

P159-P165

85

2011八月

從Sandy Bridge回顧Intel P6(四)

P148-P154

86

2011九月

從Sandy Bridge回顧Intel P6(完)

P158-P165?

管線前端變成最大效能瓶頸

市場競爭催生出無數(shù)越發(fā)精密複雜、火力更加強大的處理器微架構,巨大的多層化快取記憶體、更深的非循序指令執(zhí)行緩衝區(qū)與複數(shù)執(zhí)行單元,一切都只為了追求指令平行度(ILP)。近期企圖打造「x86桌面處理器等級效能」ARM核心進展最快的Apple與NVIDIA,不約而同走上「更寬」而非盲目追求高時脈的方向,就是最好的例證。程式碼能否提供塞滿處理器的平行度,那又是另一個值得深度探討的話題了。

以現(xiàn)今伺服器處理器王者IBM Power8為例,「單一」處理器核心內,共有「八條」同時多執(zhí)行緒,共用「發(fā)送率(Issue)每時脈十個」的指令解碼器,每個時脈最多派發(fā)(Dispatch)「八個指令」給「十六個」執(zhí)行單元,令人瞠目結舌,不愧是單顆報價一萬美元起跳、藍色巨人燃燒十億美元研發(fā)出來的怪物,重點是4GHz時脈,還不算低。

但你哪來的把握餵飽這票豺狼虎豹…呃,嗷嗷待哺的執(zhí)行單元嗎?x86指令集的指令編碼格式特別混亂,加重同時擷取數(shù)個指令、解碼並塞滿非循序執(zhí)行單元的困難度。這對RISC指令集可能不成問題,但x86就極度棘手,而這也不是多執(zhí)行緒架構就能迎刃而解的基礎瓶頸。

▲各位睽違已久的近代OOOE圖解又來了:現(xiàn)在指令管線前端變成最大的效能瓶頸。?

延伸閱讀:關於IBM Power處理器的近代發(fā)展(雖然內容過期需更新)


49

2008八月

他山之石:回顧藍色巨人IBM的POWER處理器近代發(fā)展史(上)

P184-P190

50

2008九月

他山之石:回顧藍色巨人IBM的POWER處理器近代發(fā)展史(中)

P180-P186

51

2008十月

他山之石:回顧藍色巨人IBM的POWER處理器近代發(fā)展史(下)

P186-P190

分支處理勞民傷財

電腦依據(jù)用來儲存下一個指令所在記憶體位址的「程式位址計數(shù)器(Program Counter,在x86的世界稱為Instruction Pointer「指令指標器」)」,依循記憶體位址,循序地擷?。‵etch)指令、解碼(Decode)、執(zhí)行(Execute)並將結果寫回程式指定的記憶體位址(Write Back)。

如發(fā)生條件判斷的分支或無條件判斷的跳躍,就會變更指令流。換言之,記憶體內存放的指令碼,並非依據(jù)真正的程式執(zhí)行流程而「排排站」,而是分散在記憶體位址的四處,預言了記憶體效能不足以外的潛在障礙物。

處理分支指令也會造成額外負擔,當處理器擷取到一個編碼後的指令,怎樣偵測這是不是分支指令?一般而言,讀取指令並將其解碼到一定程度後,即可分曉,確定是分支指令之後,分支預測緩衝器就檢查是否有該指令的記錄(從被擷取的記憶體位址)進行預測。

難以預設的特殊分支行為

但知道分支指令是一回事,如何預測分支目標與妥善處理其「行為特質」卻又是另一回事。至少有三種分支行為模式相當難以預測:第一種:具有「相依性」的分支,第一個分支發(fā)生了、後面第二個分支也一定會發(fā)生,好比你判斷站在眼前的是正妹,那她的隨行好友也一定是正妹,兩個分支本質上是同一個程式碼基本區(qū)塊(Basic Block,區(qū)塊中除最後一道指令外,其餘指令都不能是分支指令)。

這時候我們就需要多層分支預測器、利用其他的分支歷史紀錄來應付這種狀況,這就是Intel在Pentium Pro的Yeh Method,修過計算機組織結構的資訊科班背景讀者不可能沒聽過。

第二種:「迴圈(Loop)」,這就不難理解了,就是反覆執(zhí)行、直到條件達成才會終止,打個比方,假設「正妹群聚效應」的理論上限是六個,那表示,你逐人判斷下一個是否正妹的過程,是一個執(zhí)行六次的迴圈,合計有七次條件判斷,前六次發(fā)生,第七次避不開預測錯誤。此時此刻,你就需要在預測位元的欄位中,實作一個計數(shù)器來記錄其重複執(zhí)行的次數(shù),下次碰到相同的分支就沒問題了。Intel在90nm製程Pentium 4「Prescott」和首款Pentium M「Banias」引進這種方法。

第三種:「間接分支(Indirect Branch)」,這有點像參加化裝舞會、你必須一頭鑽進由一票女性同胞組成且時時改變的人群中,判斷你在某個位置撿到的舞伴是否正妹,且這個「跳躍的目標」隨時會被更動,簡而言之,這個分支的目標是「動態(tài)」的。

一個分支指令有多個目標位址的間接分支,並沒有完美的預測方式,Intel在Pentium M首度引入間接分支預測,說穿了就是暴力法硬幹、分支預測表就為單一間接分支打開多個目標位址記錄點,並增加一些協(xié)助判斷用的額外資訊欄位,如歷史流程等。

延伸閱讀:如果你想多了解動態(tài)分支預測的基礎知識…雖然這篇只涵蓋了筆者想寫的四成不到…

44

2008三月

番外篇:完全看懂動態(tài)分支預測

P186-P190

但回過頭來思索在Intel的x86處理器發(fā)展史,筆電導向的Pentium M為何是新型分支預測的先行者?道理很簡單,分支預測錯誤意味著「暮然回首」清空管線,該指令後方正在被擷取、解碼中的指令要被清除掉,重新計算目標位址,更新程式計數(shù)器,再重頭從記憶體擷取指令,不但降低處理器運算效能,本身更是浪費電力的行為。

講白了,越精準的分支預測,代表更高的「效能/功耗」比。不限Intel Pentium M,AMD當年也曾在K6採取近似的思維,而在公元2000年後x86處理器紛紛「炎上」變身成破百瓦的不發(fā)光燈泡,分支預測的重要性更是天元突破、水漲船高。

另類思考:很多以追求多執(zhí)行緒輸出量為前提打造的處理器微架構(偏向高密度多核心多執(zhí)行緒),會盡力縮短指令管線深度,因為這可減輕分支預測錯誤後的代價,尤其當沒太多電晶體預算和研發(fā)資源砸在分支預測的時候,這是另一種面對分支問題的角度。

指令快取不是萬能,對推土機更是萬萬不能

但再精準的分支預測,仍無法避免一個先天的障礙:就算猜中、並根據(jù)定址模式計算出有效位址,處理器不見得能立即擷取到存放下一個指令的記憶體區(qū)塊。此外,越精準的分支預測,也帶來更長的判斷延遲。

當然,你可能會馬上質疑:我們不是還有第一階指令快取可用嗎?但問題是:天底下沒有命中率100%的快取記憶體,即便命中,讀取指令快取SRAM陣列的內容也並非毫無延遲,基於成本考量,你不會有無止盡的存取埠可用(按慣例,L1-I有兩埠就算不錯了)。動態(tài)分支預測的本質也是快取的另類應用,相同的問題一樣存在。

這些疑慮對兩個整數(shù)運算核心共用指令解碼器的AMD推土機更是天殺的敏感:都已經兩個核心按不同時脈輪流分著用了,指令快取和分支預測出了亂子,給不了解碼器足夠的彈藥,豈不是要後端執(zhí)行單元彈盡援絕束手就擒,活活被亂槍打死壯烈犧牲嗎?事後證明,推土機的確很爭氣的化身成眾人景仰的烈士,但這卻不代表,AMD對於降低指令快取誤失的傷害,並非沒有應對手段,反倒讓人耳目一新,但是不是「原創(chuàng)」就很值得探討了。

延伸閱讀:快取記憶體的基礎知識,與資料一致性協(xié)定的概念…

64

2009十一月

你所不知的伺服器(二)之最後兩頁附錄


102

2013一月

[推土機行進曲] 伺服器CPU關鍵架構:快取記憶體一致性協(xié)定

118-125

讓動態(tài)分支預測與指令擷取「脫鉤」

雖然自立自強的AMD並不像臺灣滿山滿谷整天抱怨草莓族這裡不好那裏不行的慣老闆,呼籲政府讓外勞薪資與本地草莓員工「脫鉤」、以便與「史上表現(xiàn)最佳的政府」一同「拼經濟」,但AMD應該早已察覺結構過度簡單的2-way組關連性指令快取,利於最低成本最高容量外,毫無任何優(yōu)點,發(fā)生衝突性誤失(Conflict Miss)的機會實在太大了,後端執(zhí)行單元爆發(fā)世紀大饑荒的機率也隨之高漲。

延伸閱讀:AMD剛在處理器業(yè)界年度盛事IEEE ISSCC 2014公布Steamroller技術細節(jié),第一階指令快取從Bulldozer/Piledriver的64kB/2-way升級成96kB/3-way,宣稱可降低30%的誤失率。

AMD索性不等發(fā)生指令快取誤失時、才手忙腳亂去抓東西,乾脆放手讓指令擷取單元「盡量往前跑」,可依據(jù)分支預測研判出的實際執(zhí)行指令流,「先斬後奏」提前擷取未來需要解碼指令的記憶體位址,即使發(fā)生指令快取誤失,或多或少減少重新從其他記憶體(如下一層快?。X取的時間。

換句話說,AMD想做的事情是:在擷取指令前就執(zhí)行分支預測,提前把未來可能碰到的分支指令-抓到指令快取內,這更可爭取到足夠的時間,讓分支預測盡其所能的做到盡善盡美。下期我們就從基礎面出發(fā),一步一腳印的接近AMD選擇的途徑。糟糕,我寫不出來跳票該怎麼辦?(編輯部:啊,所以從頭到尾你根本就一個人用鍵盤幻想啊?。?/p>

▲RIP這三個字母雖然看來深具不祥之兆,但相信各位看倌已經猜到AMD在幹什麼了。

延伸閱讀:

解決手機、相機水波紋現(xiàn)象,全是日光燈頻率在搞鬼

比特幣的架構、演算與經濟,為什麼AMD比NVIDIA還好挖?安全有什麼漏洞

飛機上哪來的Wi-Fi無線網路?陸基3G、衛(wèi)星網路架構原理

電腦待機、睡眠、休眠分不清楚?P、T、S、G、C 電源狀態(tài)一次看懂

本文同步刊載於電腦王雜誌


【轉】 AMD推土機最大的秘密:Decoupled Front-end Architecture的評論 (共 條)

分享到微博請遵守國家法律
五大连池市| 娄烦县| 龙陵县| 克拉玛依市| 宣城市| 张家川| 平陆县| 吴桥县| 清水河县| 公主岭市| 洞头县| 新泰市| 吉木萨尔县| 景泰县| 花莲市| 三江| 台南县| 泽普县| 务川| 紫阳县| 凤庆县| 嵩明县| 仁化县| 确山县| 铜陵市| 扎鲁特旗| 阳泉市| 峨山| 湟中县| 苍梧县| 醴陵市| 青州市| 巨鹿县| 灵台县| 娄烦县| 金华市| 河西区| 高要市| 汾阳市| 钦州市| 阿坝县|