星期六, 6月 30, 2007

PC Shopper七月號Processor Watch專欄附錄

當初因版面空間限制而放棄的部份,想一想,還是放上blog算了。以後我也將用本blog來補足平面媒體專欄的不足。

至於要不要把過去三年多累積的舊文章修訂之後放在這裡,我會好好的考慮一下。
Is Out-Of-Order Out-Of-Date?
溫故知新:「In-Order」的x86處理器會有哪些問題?

建議讀者先去伸伸懶腰、泡一杯咖啡或紅茶,筆者相信你們一定需要它們的,因為接下來的內容,將是下期連載的基礎。

為何x86處理器特別需要非循序指令執行(Out-Of-Order Execution)能力?

關鍵在於x86指令集定義的整數邏輯運算通用暫存器(General Purpose Register)實在太少了,不少老舊指令還會指定使用特定暫存器,加上雙運算元格式造成暫存器使用效率不彰,所以相較RISC指令集處理器,實作管線化與指令平行化執行的x86處理器更容易發生暫存器相依(Register Dependency)的問題,這時就必須仰賴暫存器更名機制(Register Renaming)。

這也是自Pentium Pro誕生之後,十多年來,沒半顆非OOOE x86處理器具備強大效能競爭力的主因。

那麼,x86需要更好的快取記憶體與記憶體管理單元的理由何在?

這就是缺乏暫存器的直接後果,加上指令集架構不良導致x86處理器廠商設計微架構與撰寫程式最佳化工具及手冊時,普遍特別重視以記憶體作為運算目標的效能表現(Intel的NetBurst是箇中翹楚,暫存器之間搬移資料還不見得比快取快,堪稱世界奇觀),雞生蛋、蛋生雞,種種因素迫使Intel/AMD的x86處理器擁有傲視半導體業界的先進快取記憶體設計。細心的讀者可以注意到,Larrabee的第一階資料快取延遲只有「1 cycle」,擺明用來彌補暫存器不足。

此外,更頻繁的存取記憶體(Memory Intensive)會增加不同指令存取的記憶體位址彼此發生相依的機會,讓x86處理器需要非循序記憶體載入/回存(Out-Of-Order Load/Store)與記憶體位址相依性預測功能(Memory Disambiguation)。

當年AMD陸續發表K7與K8時,就因欠缺兩者而飽受批評,事後證明,AMD在Barcelona補強此點後(雖然還是比不上Merom,因缺乏Memory Disambiguation無法避免address alias問題),整數運算就突飛猛進,保守估計可增加10-15%,SPEC CPU 2006的整數輸出率項目也超越了同時脈的Intel對手,這是Intel Merom微架構強大整數邏輯運算效能背後的秘密,看似嚇人卻限制重重的四組平行指令解碼器反而沒想像的重要。

隱而不現的是,連接處理器與記憶體控制器所在地北橋晶片組的系統前端匯流排通訊協定,多少需具備類似的非循序傳輸能力,也就是所謂的「Split-Transaction Bus」。

P6微架構生父之一、前Intel院士Robert Colwell曾在其回憶錄指出,有鑑於處理器和記憶體之間的速度差距越來越大,P6設計小組才寧願干冒行銷部門眾怒、犧牲與前代Pentium的相容性,引進全新的系統匯流排設法「掩蓋」記憶體延遲,讓P6極為成功且長壽,時脈一路從150MHz(Pentium Pro)成長至1.4GHz(Pentium III)。

AMD x86-64和Intel EM64T等64位元x86指令集延伸不是額外定義新的暫存器嗎?這應可舒緩上述的缺陷吧?

這涉及處理器廠商如何實作64位元模式。目前無論Intel或AMD的64位元x86處理器,只要使用到額外定義的暫存器,或多或少會因加長指令編碼長度而降低指令解碼器的輸出率,Intel更直接「建議」程式設計者能少用就盡量少用。除非處理器一開始就針對64位元量身訂做(這點AMD明顯領先Intel),否則仍有疑慮。

平心而論,AMD在制定x86-64的考量不盡周詳,擴充的並不「乾淨」(讓人好奇Intel十年前原本的「Yamhill」長的是什麼樣子),假以時日,也許會出現瘦身後的「Reduced x86」指令集。但看在Intel/AMD慘烈戰爭的份上,實在難以樂見這一天的到來。

最後,x86在「簡單多核心」的趨勢中會遭遇哪些瓶頸?

過去x86指令集的高複雜度之所以不甚明顯,原因很簡單,因為從1990年代以降、不分指令集架構,高速汎用處理器均往「恐龍化」發展,多樣化的實作加速機制讓x86處理器看起來「沒有複雜多少」。

但是,一旦還璞歸真走向簡單核心,棘手的x86指令集控制單元設計帶來的額外負擔(Overhead)就將浮上檯面,讓x86相對RISC毫無成本效益。更重要的是,少了龐大非循序加速機制的保護傘,簡單x86核心的效能表現更將是一個大問號。當然,關鍵還是這簡單的x86究竟會「簡單」到什麼程度。

(舉手發問)作者幹嘛寫這段落落長又讓人想睡覺的唬爛分析?

除了充版面騙稿費外,讓讀者重新思考Larrabee採用In-Order的Pentium(P54C)核心到底是不是正確的決定,為下期連載造橋鋪路。
張貼留言