簡報時代背景:在Intel還在積極發展追求超高時脈的NetBurst微架構時,也跑出了很多在今天根本無法想像的瘋狂想法,像「最佳化微指令排程」這檔事。
Intel在2004年6月先在IEEE發表論文(Power Awareness through Selective Dynamically Optimized Traces),接著在當年秋季IDF(Intel Developer Forum)正式公開的「PARROT」(Power-aware ARchitecture Running Optimized Traces),企圖最佳化Trace內微指令排序及數量,以兼顧效能與省電。在了解這瘋狂想法前,請各位科科務必先行了解什麼是「Trace Cache」,否則後面的內容,恐怕就通通變成有字天書了。
處理器「實際上執行的指令(被解碼後的微指令)」,或是一件工作所需要微指令數目越多,自然就越耗電。所以Intel以「10%的程式碼佔走90%的執行率,這10%的程式碼都很規律、易於預測、有著很長的不包含分支指令序列」為假設前提,在Trace Cache內就針對常用的部分進行最佳化,這也需要額外的條件過濾、統計等功能電路,也需要進行最佳化排序的功能單元,基本上可視為一個獨立的輔助處理器了。
為了避免不常用的微指令佔用Trace Cache的有限空間,PARROT恢復了傳統的第一階指令快取,先擷取目標位址區塊中的指令,進行第一次的「冷執行」(Cold Execution),接著再針對指令使用的頻率,決定是否將其解碼後的微指令存放至Trace Cache中,以增加常用指令的執行效率(Hot Execution),進而將Trace進行最佳化排序、減少微指令數目及相依樹深度。
在Intel提出的範例中,1個原先包含28個微指令、7層相依樹,經過最佳化後,可以減少成10個微指令、2層相依樹,對於改善Trace Cache的空間利用、提升Trace的執行效率、增強Trace Cache的微指令分派率(Dispatch Rate)以強化IPC(Instruction Per Cycle)、以及減少實際上所執行的微指令數目,都有著立竿見影的效果。
透過Trace Cache以及內部Trace最佳化,將內部執行單元加寬1倍,也會大幅提升實際IPC。四指令指令發出、非循序執行的Merom核心,結合PARROT以及加倍的執行單元數目,IPC可提升約45%,電力效率更明顯勝過執行單元加倍的Merom(8-wide OOO)。
PARROT這種分離式執行核心(Split Core)的概念,相當近似所謂「Turbo Scalar」:常用的指令交由「寬而淺」(Swallow-and-Wide)、而不常用的指令則交給「窄而深」(Deep-and-Narrow)的管線分開執行,以提升執行單元的利用效率。
不過,Intel也不忘提醒大家:PARROT並不是「低功耗」設計,只是「在相同的耗電量下,有著較高的效能」,真的是吃了誠實豆沙包。
在2004年的秋季,這份簡報對世人最重大的貢獻,倒還不是PARROT何時會成為現實,而是透露了尚在謎團之中的Merom初步面貌。後來也知道,Intel在功耗問題吃了大虧,衍生了一連串的災難,導致處理器產品時程大風吹,原本定位成下一代Pentium M的Merom,從90nm製程改為65nm,並徹底取代了NetBurst的地位。
最後,無論上看下看左看右看,耗費超過10年的時間,Intel(與AMD)已摸索出微指令快取最佳配置,毫無機會實現如此瘋狂的想法,想必也沒多少人記得這麼誇張的提案,真是太讓人感到科科了。