ADVERTISEMENT
指令管線早已非「一條腸子通到底」
自從1990年IBM的Power1「America」成為計算機工業史上首款超純量(Superscalar)架構處理器,在一個時脈週期內執行兩個以上的指令,結合起源於1967年IBM S/360 Model 91的非循序指令執行(OOOE,Out-of-Order Execution,資訊科班學生不能不知道的Tomasulo演算法),傳統計算機概論在眾人心中描繪的「一條腸子通到底,跑的慢的指令會塞住後方」指令管線,早已不存在於近二十年來的高速處理器微架構。當十年前泛用處理器業界一頭撞上功耗之牆後,追求指令平行度(ILP,Instruction Level Parallelism)的重要性更凌駕於時脈提昇,成為支撐效能成長曲線的主要推手。
現在ARM SoC效能打不過x86處理器,難道只因「時脈比較低」?就算時脈平起平坐,論單核心效能,Intel的Valleyview和AMD的Jaguar照樣不費吹灰之力,活活電死檯面上公開規格的ARM SoC。論多核心效率與多處理器延展性,大概也不會有太多人相信ARM陣營能夠在記憶體子系統層面,包含快取資料一致性協定、系統匯流排與快取記憶體階層,足以匹敵x86雙雄,更罔論伺服器額外需要的可靠性、可用性與開發流程所需的產品驗證能力。ARM會願意為了其伺服器大計,遊說十年直到AMD帶槍投靠,不是沒有道理的。
▲Intel早在2006年Merom投入戰場的Macro Fusion後,相隔五年,AMD「終於」在推土機推出類似的功能。
講的白話一點:按照歷史教訓,當RISC處理器為了追求高效能而做到某個「複雜度」,因為指令集帶來的「稅賦」將隨著微架構的膨大而越來越微不足道,耗電量和「效能/功耗比」對x86大概也佔不了多少便宜,甚至還很可能被x86陣營長期享有的製程優勢逆轉,ARM沒有理由不走上RISC前輩曾踏過的荊棘之路。藍色巨人IBM的Power,是集今日對ARM(或全體RISC)Server的幻想之大成,最完美的典範與最殘酷的例證。
1993年的Pentium是x86首款超純量處理器,1995年底讓x86逐步支配工作站及低階伺服器市場的Pentium Pro,則是首款支援非循序指令執行的x86產品,而時下被媒體炒得火紅的ARM,則整整落後了超過十年,才有同級微架構(Cortex-A8/A9/A15)。1990年代隨Windows作業系統普及而爆炸式成長的個人電腦市場動量之巨大,由此可見一斑。
而「CISC指令通通跑不快,所以無法管線化高速執行」的偏見也逐漸消失在世界的盡頭,藉由使用簡單低階層硬體線路控制和簡單的資料路徑,x86處理器也能享有很好的時脈速率,且整合硬體線路控制(控制簡單指令)與微碼控制(用來控制更複雜的指令)的轉換過程,更讓1990年代以降的x86處理器,普遍能以高效能執行80x86指令集中「簡單且高使用頻率」的指令。
你覺得這段落很眼熟,甚至直接找出這是「參考」哪本書哪幾章哪幾頁的內容,代表看倌的計算機組織學的很好,上課有認真聽。
事實上,再複雜「再毫無道理可循」的指令集架構,也是會有一小撮「最被軟體經常使用」的簡單指令「最值得被加速處理」,高階程式語言編譯器的發展和RISC指令集的濫觴,兩者息息相關,躲在RISC背後的基本理念「Make the common case fast」同樣也可應用在CISC處理器。Intel在首款管線化處理器家族80486就已採用近似的概念,隨後的NexGen Nx586則是x86第一個「在處理器內部將x86處理器轉譯為RISC型態微指令」。
延伸閱讀:深度了解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 |
管線前端變成最大效能瓶頸
市場競爭催生出無數越發精密複雜、火力更加強大的處理器微架構,巨大的多層化快取記憶體、更深的非循序指令執行緩衝區與複數執行單元,一切都只為了追求指令平行度(ILP)。近期企圖打造「x86桌面處理器等級效能」ARM核心進展最快的Apple與NVIDIA,不約而同走上「更寬」而非盲目追求高時脈的方向,就是最好的例證。程式碼能否提供塞滿處理器的平行度,那又是另一個值得深度探討的話題了。
以現今伺服器處理器王者IBM Power8為例,「單一」處理器核心內,共有「八條」同時多執行緒,共用「發送率(Issue)每時脈十個」的指令解碼器,每個時脈最多派發(Dispatch)「八個指令」給「十六個」執行單元,令人瞠目結舌,不愧是單顆報價一萬美元起跳、藍色巨人燃燒十億美元研發出來的怪物,重點是4GHz時脈,還不算低。
但你哪來的把握餵飽這票豺狼虎豹…呃,嗷嗷待哺的執行單元嗎?x86指令集的指令編碼格式特別混亂,加重同時擷取數個指令、解碼並塞滿非循序執行單元的困難度。這對RISC指令集可能不成問題,但x86就極度棘手,而這也不是多執行緒架構就能迎刃而解的基礎瓶頸。
▲各位睽違已久的近代OOOE圖解又來了:現在指令管線前端變成最大的效能瓶頸。
延伸閱讀:關於IBM Power處理器的近代發展(雖然內容過期需更新)
49 |
2008八月 |
他山之石:回顧藍色巨人IBM的POWER處理器近代發展史(上) |
P184-P190 |
50 |
2008九月 |
他山之石:回顧藍色巨人IBM的POWER處理器近代發展史(中) |
P180-P186 |
51 |
2008十月 |
他山之石:回顧藍色巨人IBM的POWER處理器近代發展史(下) |
P186-P190 |
下一頁:分支處理勞民傷財
這篇有點難懂 希望增加更多詳盡的解釋與圖解