Intel Hyper-Threading Technology(5)
Microarchitecture Pipeline and HT Technology
本節講述超執行緒技術與微架構的關係,以及來自於兩個邏輯處理器的位置是如何在流水線前端與後端被處理的。
儘管來自於兩個程式或者兩個執行緒的指令在執行核中是同時執行,也不必按照程式設計順序(即亂序執行),流水線的前端和後端還是包括了若干個選擇點,用於從兩個邏輯處理器中選擇指令。所有的選擇點按照週期交替原則操作,除非某個邏輯處理器暫時無法使用流水線的某級。在這種情況下,流水線的這一級可以在每個週期都供另一個邏輯處理器使用。可能導致某個邏輯處理器無法使用某級流水線的原因包括:快取記憶體未命中,分支預測失敗,和指令依賴。
Front End Pipeline
執行跟蹤片快取區TC在兩個邏輯緩衝區之間共享。在每個週期,兩個邏輯處理器對TC的訪問請求都會被仲裁。假設兩個邏輯處理器都申請訪問TC,如果在第一個週期內,某個邏輯處理器讀取了一個快取行,則下一個週期,會讓另一個邏輯處理器執行訪問請求。即按週期交替訪問TC。
但是如果某個邏輯處理器停頓了,或者暫時無法使用TC,則另一個邏輯處理器可以使用TC的全部頻寬,直到前一個邏輯處理器繼續執行或者產生TC訪問請求。此後,會繼續仲裁機制讓兩個邏輯處理器交替使用TC。
當讀取指令並生成微指令跟蹤片之後,微指令被放置於一個佇列中(即微指令佇列)。這個佇列將流水線的TC與暫存器別名階段解耦合(即隔離)。如前所述,如果兩個邏輯處理器都是活躍的(即開啟了超執行緒),這個佇列是分割槽使用的,這樣可以讓兩個邏輯處理器在各自的指令流上“前行”。
Execution Core
假設微指令都已經處於執行就緒狀態,執行引擎可以每週期分發6條微指令。一旦微指令被放置於佇列中等待執行,來自於兩個邏輯處理器的微指令就沒有區別了(即無法在分辨出某個指令來自於哪個邏輯處理器)。執行核與儲存器層級結構也對指令來自於哪個邏輯處理器一無所知。
在微指令執行後,指令被放置於重排序緩衝區ROB中。ROB將執行階段與退役階段解耦合。ROB是分割槽使用的,這樣每個邏輯處理器使用一半的ROB條目。
Retirement
退役邏輯跟蹤來自於兩個邏輯處理器的指令,確定哪些可以被退役。然後按照週期交替的原則為每個邏輯處理器按照程式設計順序將指令退役。如果某個邏輯處理器沒有要退役的指令,則另一個邏輯處理器可以使用到全部的退役頻寬。
一旦寫存操作退役,處理器需要將資料寫入到L1資料快取中。硬體選擇邏輯也會交替地將兩個邏輯處理器的寫存資料提交到資料快取中。