Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (8) - 流水線前端/分支預測
Branch Prediction
分支預測機制會預先推測分支目標,讓處理器在分支指令實際計算出決斷結果之前就開始執行分支路徑上的指令。所有的分支都會利用分支預測單元BPU做預測。分支預測單元在預測分支目標時不但會基於分支的EIP,而且還會參考到達這個EIP的執行路徑。BPU可以高效的預測如下的分支型別:
- 條件分支
- 直接呼叫與跳轉
- 間接呼叫與跳轉
- 返回指令
相關推薦
Intel Sandy Bridge/Ivy Bridge微架構(6) - 流水線快三原始碼搭建前端微熔合/巨集熔合
微熔合將來快三原始碼搭建q-2747044651自於同一條x86指令的多條微指令熔合成單條複雜的微指令.這條複雜的微指令可以被分發到亂序執行核任意多次,就好象沒有進行過微熔合一樣(即亂序執行核並不能感知到微熔合機制的存在【征途原始碼論壇https://0x9.me/WV9jI】)。 微熔合機制使得程式設計師
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (20) - IvyBridge微架構
Intel® Ivy Bridge Microarchitecture 第三代Intel Core處理器是基於Ivy Bridge微架構的。上述的Sandy Bridge微架構的特性也都適用於Ivy Bridge微架構。本節概述與Sandy Bridge不同的特性,可能會影響到程式的編碼與效
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (19) - 系統代理
System Agent 在Sandy Bridge微架構中實現的系統代理包括瞭如下的元件: 一個總裁器,用於管理所有的訪問請求,並將這些請求路由(即轉發)到正確的位置上。訪問請求可能來自於環域(ring domain)和I/O(PCIe* 和DMI)。 PCIe控制器,用於
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (18) - 資料預取
Data Prefetching 使用軟體預取指令,硬體預取機制,或者兩者的任意組合,都可以將資料投機式地載入到L1D中。 程式設計師可以使用4條SSE預取指令來實施軟體控制的預取操作。這些指令給處理器提供一些“提示”,請求將資料行載入到指定的某級快取中。注意:軟體控制的預取是針對資料的
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (17) - 互聯環路&LLC
Ring Interconnect and Last Level Cache 片上系統設計提供了一個高頻寬的雙向環路匯流排,用於連線IA處理器核與核外的各子系統。在第二代Intel Core處理器2xxx系列(即基於Sandy Bridge微架構的處理器)上,核外子系統包括系統代理(syst
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (16) - L1資料快取/儲存轉發&訪存消歧&儲存體衝突
Store Forwarding 如果讀存操作緊跟著寫存操作,且要讀取的資料包含在要寫入的資料中,則資料可能可以從寫操作直接轉發給讀操作。這個過程叫做“儲存-讀取轉發”,簡稱為“儲存轉發”。這種技術可以節省讀操作的時延週期數,因為讀操作無需等待寫操作完成後在從儲存器中讀取資料,而是直接從寫操
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (15) - L1資料快取/讀&寫&地址轉換
L1 DCache (L1D) L1D指的是一級資料快取,通過快取內部的資料結構(即硬體邏輯),管理所有型別的讀存與訪存請求: 允許投機式,亂序發射讀存與寫存請求 確保退役的讀存與寫存指令在退役時具有正確的資料 確保讀存與寫存操作遵循IA32與Intel 64指令集架構
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (14) - 讀存操作&寫存操作
Load and Store Operation Overview 本節講述讀存與寫存操作。 Loads 當指令從回寫式型別的儲存器中的某個地址讀取資料時,處理器會從快取記憶體和儲存器中查詢資料。下表描述的是訪問查詢順序以及最佳情形時延。實際的時延可能隨著快取佇列的佔用率,LLC環路
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (13) - 快取層級結構
Cache Hierarchy 每個處理器核中,快取記憶體的層級結構包括一級指令快取LII,一級資料快取LID,以及二級快取。如果開啟了Intel超執行緒技術,資料快取有可能被兩個邏輯處理器共享使用。二級快取是混和式的,由指令與資料共享使用。物理處理器中所有的處理器核通過一個互聯環路連線到共
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (12) - 執行核
The Execution Core 執行核的特點是1)超標量,2)亂序處理指令。通過高效處理最常用的操作,同時最小化潛在的時延,執行核優化了總體執行效能。 相比起前代微架構,Sandy Bridge的亂序執行核在如下幾個方面改進了執行單元的組織結構: 降低了讀口(即load埠
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (11) - 亂序引擎/重新命名器&排程器
Renamer 從上圖中可以看出,重新命名器是連線“有序前端”與“排程器的資料流世界(即亂序引擎)”的橋樑。它每週期可以最多從微指令佇列搬移4條微指令到亂序引擎。儘管重新命名器最多可以搬移4條微指令(未熔合的,微熔合的,巨集熔合的),這個頻寬已經等價於發射口的頻寬(每週期6條微指令)。在這個
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (10) - 亂序引擎概述
The Out-of-Order Engine 亂序引擎相較於前代微架構提供了更好的效能,同時也具有極佳的電力特徵(excellent power chacteristics,即更好的能效)。亂序引擎偵測到依賴鏈,將其傳送(到執行核)進行亂序執行,同時還維護正確的資料流。當某個依賴鏈等待某項
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (9) - 流水線前端/微指令佇列&迴圈流偵測器LSD
Micro-op Queue and the Loop Stream Detector (LSD) 微指令佇列將流水線前端與亂序引擎解耦合(即隔離開)。它位於微指令生成單元與重新命名單元之間(參看上圖),主要功能是用於隱藏不同的微指令來源(即傳統譯碼流水線,MSROM和微指令快取)產生的“氣
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (8) - 流水線前端/分支預測
Branch Prediction 分支預測機制會預先推測分支目標,讓處理器在分支指令實際計算出決斷結果之前就開始執行分支路徑上的指令。所有的分支都會利用分支預測單元BPU做預測。分支預測單元在預測分支目標時不但會基於分支的EIP,而且還會參考到達這個EIP的執行路徑。BPU可以高效的預測如
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (7) - 流水線前端/譯碼後指令快取
Decoded ICache 譯碼後微指令快取本質上是對傳統的譯碼流水線的快取記憶體加速器。通過快取微指令,可以提供如下的優勢: 減少由於分支預測失敗導致的延遲 增加發射微指令到亂序引擎的頻寬 降低流水線前端的能耗 譯碼後微指令快取儲存指令譯碼器生成的微指令。以
Intel Sandy Bridge/Ivy Bridge架構/微架構/流水線 (6) - 流水線前端微熔合/巨集熔合
Micro Fusion 微熔合將來自於同一條x86指令的多條微指令熔合成單條複雜的微指令.這條複雜的微指令可以被分發到亂序執行核任意多次,就好象沒有進行過微熔合一樣(即亂序執行核並不能感知到微熔合機制的存在)。 微熔合機制使得程式設計師可以使用“儲存器到暫存器”這樣的操作方式(這種操作
Intel, AMD及VIA CPU的微架構(27)
9.11. 暫存器的部分訪問 一個通用暫存器的不同部分可以儲存在不同的臨時暫存器中,以消除偽依賴性。一個暫存器部分寫後跟一個整個暫存器讀時,出現一個問題: ; Example 9.4. Partial register problem mov al, 1 mov ebx, eax
Intel, AMD及VIA CPU的微架構(26)
9. Sandy Bridge與Ivy Bridge流水線 Intel的代號為Sandy Bridge的微架構是Core2與Nehalem設計的進一步發展。在解碼器後添加了一個新的μop快取,浮點執行單元從128位擴充套件到256位。 Sandy Bridge有2-8核,某些版本能夠在每個核
Intel, AMD及VIA CPU的微架構(25)
8.11. 暫存器的部分訪問 Core2與Nehalem使用3種不同的方式來解決暫存器部分寫。這3種不同的方式分別用於通用暫存器,標記暫存器及XMM暫存器。 通用暫存器的部分訪問 一個通用暫存器的不同部分可以儲存在不同的臨時暫存器中,以消除假的依賴性。例如: ; Examp
Intel, AMD及VIA CPU的微架構(24)
8.6. 棧引擎 Core2與Nehalem有一個與PM工作方式相同的專用棧引擎,如第81頁所述,它對更大的流水線做了必要的調整。 PUSH,POP,CALL與RET指令對棧的修改由一個特殊的棧引擎完成,在流水線中,它緊跟著解碼步驟,在亂序核之前。這把流水線從修改棧指標的μop負擔中解放出來