天天看點

商業微處理器:曆史、理論和趨勢(五)從1996 到2003:微處理器的基本形态

從1996 到2003:微處理器的基本形态

經過了十多年的讨論,微處理器的體系結構沉澱了許多優秀的設計思想,誕生了許多教科書級的微處理器值得我們深入研究。

MIPS R10000

R10000 作為MIPS 架構中較成熟的微處理器,是教科書中的常客。從整體的設計上看,R10000[31] 幾乎所有的優化措施都是圍繞如何隐藏記憶體延遲展開的。

執行部件在更大的指令範圍和更寬的發射寬度上工作,盡可能保持指令流平穩。MIPS R1000 采用5 級流水,可以同時擷取和發射4 條指令,擁有5 個執行單元,定點、浮點和位址隊列各能容納16 條指令。

指令發射之前進行寄存器重命名工作,盡可能解除虛假的指令相關。使用24 個比較器并行檢測譯碼的4 條指令之間的相關性,比較器的個數是n2 量級的。延遲槽技術對于早期的MIPS 處理器來說是一種性能優勢,但是在超标量指令集中并沒有什麼性能優勢,保留這種性質隻是為了相容性的要求。

Cache 采用兩級結構,并且以非阻塞的方式通路,盡可能隐藏Refill 延遲。L1 Cache 在片内,使用虛拟位址索引,資料和指令Cache 各有32KB 大小,占據了全部半導體數量的三分之一。L2 Cache 在片外。R10000 沒有實作原子指令,而是通過LL/SC 來替代原子指令。

通信方面使用64 位分離事務系統總線,可以連接配接至多4 個R10000 微處理器,同時處理8 個讀請求。利用這些特性可以将多個R10000 組成ccNUMA 伺服器,例如SGI Origin[47]。

MIPS R10000 還提供了大量的硬體性能計數器用于性能分析工作,相比于軟體層面的分析技術,硬體計數器能夠為架構師提供更為詳細的性能資料。文獻[48] 給出了R10000 的性能計數器清單,并舉例說明如何使用性能計數器開展性能分析工作,例如Cache Miss 的次數、預取的效率、分支誤預測的代價以及訪存延遲的分布。性能計數器并不僅僅對硬體工程師有所幫助,軟體工程師同樣可以利用性能資料修改代碼邏輯,進而獲得更好的Cache 性能和分支預測正确率。

DEC Alpha 21264

1998 年的Alpha 21264[36, 49] 是一款設計出色的微處理器,使用了很多先進的技術,其中的設計經驗後來被其他微處理器設計者所吸收。但出色的設計并沒能從商業上挽救這家公司,最終被Compaq 收購。

Alpha 21264 使用經典的聯合分支預測器[34],同時使用Line 和Way 的預測,預測失敗時代價為1 個空泡。

亂序執行方面,繼續使用自家的計分闆技術。定點發射隊列有20 項,分成兩組發射共計4 條指令,這樣既保證了較多的發射數量,又簡化了硬體設計。兩組之間通過一個額外的周期進行通信,性能分析的結果表明這樣做的影響可以忽略。浮點發射隊列有15 項,每周期可發射兩條指令。

訪存方面,Cache 的周期比CPU 要短一倍,這樣就能在一個周期通路兩次。和R10000 一樣,Alpha 21264 也采用了L1 Cache 在片内,L2 Cache 在片外的方案。Load/Store 操作可以被亂序執行,但如果發生了錯誤,那麼會給相關的指令設定一個等待位,被設定了等待位的訪存操作不會被亂序執行。除此之外,Alpha 21264 提供了Cache 預取的指令,可以讓程式員根據實際程式的需求制定Cache 預取政策。

為了組成多路的小型伺服器,21264 支援标準的MOESI 的Cache 一緻性協定,并提供外部接口支援多處理器互連。

Intel Pentium 4

2000 年Intel 推出了重新設計的Pentium 4 微處理器,但是這時候設計的目标并非進一步提升性能,而是盡可能的提高主頻,響應市場對主頻的追求。Pentium 4 的微架構代号為NetBurst,流水級被劃分為20級,盡可能的減少每一級流水線的功能。整數核心設計頻率高達9GHz[50],但實際上在4GHz 左右就一頭撞到了功耗牆上,性能上甚至不如前代Pentium III。盡管如此,我們仍然來看一下Pentium 4 的架構[51]。

首先,較高的時鐘頻率迫使處理器每一級的邏輯變得簡單,是以複雜的階段可能使用多個周期。更快的主頻和更深的流水級帶來更多的性能提升,分支誤預測的性能損失也更大,總的來說還是會帶來性能的提升。不過20 級左右的流水線深度差不多已經是極限了,很少能看到更多的設計。

L1 I Cache 被稱為Execution Trace Cache,存儲譯碼好的uop,這裡展現了RISC 的設計理念。Trace Cache 每一行可以打包六條指令,一共包含12K 條微指令。前端具有自己的分支預測器(Trace BTB),有4K個分支目标項;沒有分支曆史的項使用靜态預測的方法:看他是向前還是向後。同時L1 I Cache也有自己的頁表,并且提供頁級别的保護。而譯碼器每個周期其實隻能譯碼一條指令,Intel 自己也知道指令集太複雜了。較為複雜的指令使用Microcode ROM 查表,每次可以查出來多條指令。

在亂序執行方面,P4 使用多個獨立的排程器,盡管隻有4 個發射端口,但定點部件半周期可以發射一條指令,是以最大可達到6 發射。保留站每周期可以退出至多3 條指令。

Pentium 4 最初使用180nm 的工藝,後來使用了90nm 的工藝,并且增加了新的功能[52],主要展現在Hyper-Threading 超線程技術和SSE3 指令集的擴充上。

IBM Power 4

IBM 的Power 系列長期以來服務于商業領域,逐漸形成了自己的技術特色。每一代Power 産品都會在的内部期刊IBM Journal 上發表非常詳細的架構設計文章,每次都看的我頭疼[46, 53–56]。2002 年的Power4[32] 同樣如此。

Power4 的設計理念有6 條,分别是;1.SMP 優化;2. 全系統設計;3. 高主頻;4.reliability, availability, and serviceability(RAS);5. 平衡技術和商業性能;6. 二進制相容性。這些設計理念對我們今天仍有指導意義,不僅是這六條理念價值,更重要的是提出這六條規則的心态和能力更值得我們學習。

和桌面級的産品不同,IBM 的财大氣粗和面向伺服器的設計需求使得它的微處理器可以有更大的設計空間。首先,POWER4 是第一個商用的多核(雙核)處理器。其次,同時期的産品還停留在L2 Cache 的時候,IBM 已經用上了L3 Cache,并且通過複雜的打包技術支援至多32 路互連。

由于IBM 使用自己的指令集,是以可以在指令中添加許多訓示位幫助微處理器做性能上的優化,例如訓示跳轉指令可能的跳轉方向。通過為分支指令、比較指令提供專門的執行單元,Power4 具有多達8 個執行單元,浮點單元的功能也更強,可以執行乘加指令,提高指令效率。

為了提供足夠的操作數,相應的Load/Store Unit(LSU) 所占的晶片面積也相當大,并且提供硬體的資料預取機制。IBM 通過前端将複雜指令譯碼為精簡指令,再通過group 技術将多條指令打包成group 一起發射,實體資源配置設定和指令送出也是這樣。和x86 類似,有些複雜的指令可以被譯碼成許多條精簡指令,這些精簡指令自成一組,進而保證指令的原子性。但是,當中斷發生時,group 的指令就需要被拆解開一條一條的處理,進而完成精确中斷。

Power4 使用複雜而細緻的Cache 狀态維護一緻性,并且盡可能利用緊鄰的記憶體提供資料,系統的一緻性維護在L2 Cache 中進行。在系統互連方面,IBM 的外部接口并非使用固定的頻率,而是和CPU 的頻率保持一定的比例,以此擷取系統的靈活性。

由于IBM 的客戶中有很多是金融機構,系統的可靠性就顯得尤其重要,是以IBM 同年發表的Micro 上的文章[57] 重點描述Power4 在高可靠性上所做的努力。在hardware 和firmware 的協同努力下,Power4可以支援故障屏蔽、内部備援、錯誤恢複和全系統的動态可配置等方面,顯著延長系統的平均故障時間。系統的可靠性将是設計伺服器晶片時的重要标準。

AMD Opteron

終于寫到AMD 的了,在開始之前先說一句,“AMD, yes!”

首先說Opteron 的微處理器架構[35]。AMD Opteron 微處理器支援x86 的64 位擴充,同時相容32 位指令。在SIMD 指令的支援方面,支援SSE 和SSE2 指令,對應的寄存器數量增加到16 個,性能分析的結果表明16 個向量寄存器可以滿足程式80% 的需求。亂序執行方面,Opteron 有6 個發射端口,浮點和定點各3 個,定點運算和位址生成可以共用位址單元定點流水線為12 級,浮點為17 級,兩類指令使用分離的重命名單元。

取指部件在取值的同時識别指令的邊界,并将指令寫入指令Cache。每周期可譯碼3 條x86 指令,和Intel 跟IBM 類似,AMD 同樣使用簡單譯碼器、複雜譯碼器和查表擷取指令三者相結合的方式提供穩定的指令流。在訪存的處理上,L1 和L2 Cache 之間為互斥關系,使用僞LRU 替換算法可以減少一半的bit 位。Store 必須順序送出,而Load 指令則可以越過前面的指令。為了提升性能,Opteron 同樣使用了資料預取機制。ECC 技術已經作為微處理器設計的基本技術,這裡使用DRAM 的空閑周期完成錯誤矯正。

曆史上記憶體控制器位于北橋,而将北橋內建到CPU 内部使得Opteron 獲得了20% 相對于Athlon 的性能提升,和北橋相關的資料在文獻[58] 中有進一步的描述。沒有了北橋,Opteron 設計使用Hyper-Transport技術互連,以适應服務市場對2 到8 路伺服器的需求。Opteron 使用交叉開關連通5 個端口,system request interface (SRI)、記憶體控制器和3 個HT 接口。請求邏輯上被劃分為四類:Request、Posted request、Probe和Response,使用四個虛拟的通道。互連技術并不保證處理器請求的順序,是以微處理器需要自己保持請求之間的順序。性能分析的結果表明,互連微處理器的性能與拓撲參數,平均半徑,之間存在強相關。為了增加系統的直連能力,16 位寬的HT 接口可以分成兩條8 位寬的HT 接口使用,這樣可以有效降低遠端記憶體通路的代價。盡管文中有對一緻性協定的相關描述,但我們選擇通過另一篇文獻來較長的描述這方面的實作。

有關12 核Opteron 架構的代号”MAGNY COURS” 的微處理器記憶體子系統的文獻[59] 發表時已經到了2010 年了,嚴格來說不在标題的範圍之内,但還是放在這裡介紹。新一代的Opteron 晶片上有6 個微處理器核,每個核心有512KB 的私有L2 Cache,通過SRI 連接配接到6MB 的L3 Cache 上,L3 Cache 裡開辟了一小塊空間存放目錄資料。通過打包技術,可以在每個package 上內建兩個晶片,這樣每個子產品就有了12 個微處理器核,進而提高資料中心的計算密度。HT 接口繼承此前的設計,可以将資料鍊路分開使用,降低拓撲半徑。Opteron 使用改進的MOESI 協定标記Cache 狀态,使用基于廣播的目錄協定維護Cache 一緻性,并通過有限指針和Probe Filter 進一步過濾廣播資訊,降低帶寬壓力。這樣設計是多年設計經驗、量化研究和理論創新的綜合成果。

繼續閱讀