Intel Haswell/Broadwell架構/微架構/流水線 (3)-流水線亂序引擎
The Out-of-Order Engine
亂序引擎的關鍵部件與重大增強概述如下:
重新命名器(Renamer):重新命名器將微指令從微指令佇列中移到排程器中,同時繫結對應的發射口與執行資源。Zero-idiom,one-idiom和zero-latency register MOV操作由重新命名器來執行,這樣可以節省排程器和執行核的資源,提升效能。
注:zero-idiom操作,將某個暫存器清零,例如XOR EAX, EAX。重新命名器可以分配一個全新的目標暫存器,然後立即將其清零。
注:one-idiom操作,即CMPEQ指令比較兩個相同的暫存器值,例如PCMPEQB mm0, mm0
關於零習語與壹習語的詳細情況,可以參看Sandy Bridge微架構的對應章節。
注:zero-latency register MOV,將一個暫存器的值move到另一個暫存器,不需要做“實際”的工作。重新命名器可以簡單地將x86暫存器對應的內部暫存器重新指向源暫存器即可。參看下圖的MOV ECX, EAX指令,只需將ECX從指向內部暫存器r4重新命名為r2,即完成了MOV指令,無需使用排程器/執行單元。
排程器Scheduler:排程器負責將微指令分發到發射口,一共有8個發射口用來支援亂序執行核。其中4個口提供了計算操作需要的執行資源(即眾多執行單元),另外4個口支援訪存操作,每個週期可以實現最多兩個256位讀存操作和一個256位寫存操作。
執行核Execution Core:排程器每週期可以分發最多8條微指令,每個發射口一條。對於提供執行資源的4個發射口(發射口0,1,5,6),每個口提供了一個算邏單元ALU,共4個算邏單元。其中2個口(發射口0和1)提供了專用的FMA單元。除了出發/平方根單元以及STTNI/AESNI單元,大部分浮點和整型SIMD執行單元都是256位寬。
用於訪存的4個發射口(發射口2,3,4,7):兩個用於載入與儲存地址的雙用途發射口2,3,一個專用於儲存地址的發射口7,以及一個專用於儲存資料的發射口4。所有的訪存發射口都可以處理256位寬的訪存微指令。
對於浮點數的峰值吞吐量,使用FMA可以達到每週期32個單精度浮點操作或者16個雙精度操作,是前代Sandy Bridge微架構的兩倍。
亂序引擎可以處理192條進行中微指令,前代Sandy Bridge是168條微指令。