2014.04.21 09:00

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

ADVERTISEMENT

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

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

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

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

ADVERTISEMENT

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

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

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

ADVERTISEMENT

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

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

避免指令集疊床架屋

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

ADVERTISEMENT

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

溫故知新:指令「發出率」與指令「派出率」

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

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

ADVERTISEMENT

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

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

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

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

優秀指令集架構≠成功核心微架構

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

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

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

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

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

ADVERTISEMENT