【XJTUSE 计算机组成与结构笔记】第十四章 指令级并行性和超标量处理
文章目錄
- 第十四章 指令級并行性和超標量處理
- :star: key points
- 14.1 概述
- 超標量的特征
- 超標量superscalar與超級流水線super pipelining
- 限制
- 1、真實數據相關性|True Data Dependency
- 2、過程相關性|Procedural Dependency
- 3、資源沖突|Resource Conflict
- 4、輸出相關性|Output dependency
- 5、反相關性|Antidependency
- 14.2 設計考慮
- 指令發出策略
- 1、按序發出按序完成
- 2、按序發出亂序完成
- 3、亂序發出亂序完成
- 寄存器重命名
- 相關性分析舉例
- 超標量中提高性能的技術
- 超標量實現的硬件條件
第十四章 指令級并行性和超標量處理
?? key points
What is superscalar? Which elements may limit its performance? How to improve the performance?
Instruction-issue Policy
Register Renaming
1、超標量的概念、特征,與超級流水線的區別
2、超標量的并行性受到什么因素限制:五大相關;一定要搞清楚什么是亂序發射
3、超標量中用來提高性能的三種硬件技術:資源復制、無序發射、寄存器重命名,必須記住
4、處理器中要采用超標量方式需要包含哪些硬件功能?5條
5、了解ROB郵件是什么
14.1 概述
超標量superscalar的方法本質為,在不同的流水線中并行執行指令的能力,即允許指令能以不同于原來程序順序的次序來執行
超標量就是對標量指令處理的一種加速
超標量的特征
1?? 多個指令在不同的流水線上并行執行
基本特征
每一個流水線都有若干功能單元,都可以進行指令流水,完全意義上的并行
2?? 允許指令以不同于原程序順序的次序來執行
超標量superscalar與超級流水線super pipelining
多數流水階段所完成的任務只需要比時鐘周期一半還少的時間,于是雙倍的內部時鐘速率允許在一個外部時鐘周期內完成兩個任務。
超級流水線:把流水段劃分的更細致些,每個段的執行時間只有半個時鐘周期或者更少,它的一個段同步于外部一個的更快的時鐘
區別
超標量是完全意義上的并行,物理上存在多條流水線,多條指令可同步執行
超級流水線是并發執行,物理上只有一條流水線,只是這條流水線性能更好,各個指令在處理時是部分交疊無法做到真正的同步
現代處理器往往采用超級流水線超標量技術
限制
超標量方法依賴于并行執行多條指令的能力,指令級并行性(instruction level parallelism)指的是程序指令能并行執行的程度。
但并不是超標量中的流水線數目越多性能一定就越好,需要結合編譯器優化和硬件技術
受限因素如下:
真實數據相關性
過程相關性
資源沖突
輸出相關性
反相關性
1、真實數據相關性|True Data Dependency
ADD r1, r2 (r1 := r1+r2;) MOVE r3,r1 (r3 := r1;)第二條指令能取指并譯碼,但是在第一條指令執行完成之前不能被執行,因為第二條指令依賴于第一條指令產生的數據。
也成稱為寫后讀相關性和流相關性
2、過程相關性|Procedural Dependency
1?? 多條流水線中出現了轉移
對普通流水線有影響
對于超標量來說由轉移帶來的損失甚至更大
2?? 使用變長指令引起的相關
因為任一個指令的具體長度不是事先已知的
需要部分譯碼后才能確定需要幾次取指
妨礙了超標量的同時取指
這里由于RISC的指令格式相對固定,執行時間長短也差不多,超標量更適合RISC
3、資源沖突|Resource Conflict
兩個或多個指令同時競爭同一資源
存儲器\總線\功能單元,如:ALU中的加法器\Cache\寄存器
可通過復制資源來克服
4、輸出相關性|Output dependency
I1: Add R6, R3 (R6 := R6 + R3;) ...... I4: Mov R6, R7 (R6 := R7;)兩條指令可以并行取指和譯碼
I1完成之前不能執行I4指令
也稱為寫寫相關
5、反相關性|Antidependency
I1: ADD R3, R4 (R3 := R3 + R4;)I2: MOV R4, R5 (R4 := R5;)兩條指令可以并行取指和譯碼
I1完成之前不能執行I2指令
也成為先讀后寫相關
14.2 設計考慮
指令發出策略
instruction issue指令發出,是指啟動指令去處理器功能單元執行的過程。實際上,指令發出就是處理器試圖在當前執行點之前查找能進入流水線并執行的指令。
以下三種類型的排序是重要的:
取指令順序
指令執行順序
指令改變寄存器和存儲器位置內容的順序
超標量指令發出策略如下
1、按序發出按序完成
嚴格的按順序執行順序發出指令,并以同樣的順序寫結果
舉例
圖14-4a給出這種策略的一個例子。假定超標量流水線一次能取并譯碼兩條指令,有三個分立的功能單元(如整數算術、浮點算術等),有兩個流水寫回段的部件。例子是一個6條指令的代碼片段,并假定有如下限制:
I1執行要求兩個執行周期。
I3和I4為使用同一功能單元而發生沖突。
I5依賴于I4產生的值。
I5和I6為使用同一功能單元而發生沖突。
指令是一次取兩條并傳送到譯碼單元。因為指令是成對取,所以下兩條指令必須等待,直到譯碼流水段已完成上次所取指令的譯碼。為保證按序完成,當有功能單元沖突或功能單元產生結果需要不止一個周期時,指令發射必須停止。
在這個例子中,由譯碼第一條指令到寫回最后結果總共花費的時間是8個時鐘周期。
2、按序發出亂序完成
目的是要執行和輸出盡可能快,指令發出因資源沖突、數據依賴關系或過程依賴關系而停止,需要更復雜的指令發出邏輯和中斷控制
3、亂序發出亂序完成
對于順序發出,如果滿足依賴關系,流水線將暫停,直到沖突解決。 為實現亂序發射,將譯碼流水線與執行流水線解耦,為此,需要一個緩沖區,稱為指令窗口。 可以繼續獲取和解碼,直到此窗口已滿,即此流水線已滿
當執行階段中的功能單元變成可用時,需要此功能單元的指令就會由指令窗口發射到執行段。只要1??指令所需的具體功能單元是可用的,以及2??沒有沖突或相關性阻塞這條指令,那任何指令都可以被發射。
指令窗口并不是一個真實的流水段,由寄存器組成
實際上這是一種用一定的時間延遲來換取不相關指令被提前執行的方式
作用
通過這種方式可以減少流水線停滯的時間,一定程度上解決了真實數據相關、資源沖突以及過程相關帶來的問題,減少了流水段停滯發生的概率
無法解決輸出相關性及讀后寫相關性的問題
寄存器重命名
當允許亂序指令發出和/或亂序指令完成時,可能會產生輸出相關性(寫后寫相關性)和反相關性(讀后寫相關性)。說明了寄存器的值可能不再反映被程序流指定的值順序。
解決這些相關性的方法是基于傳統的資源沖突解決方法:資源復制?,F在的技術稱為寄存器重命名——將不同指令使用的同名寄存器映射到不同的物理寄存器上去
R3b:=R3a + R5a (I1) R4b:=R3b + 1 (I2) R3c:=R5a + 1 (I3) R7b:=R3c + R4b (I4)不帶下標的寄存器引用指的是指令中找到的邏輯寄存器。帶下標的寄存器引用指向被分配用來保存新值的硬件寄存器。當對一具體邏輯寄存器進行新的分配后,作為源操作數訪問那個邏輯寄存器的后續指令要修改成對最近被分配的硬件寄存器的引用(最近是依據程序的指令順序而定)。
相關性分析舉例
An Example
I1: LOAD R1, A
I2: FADD R2, R1
I3: FMUL R3, R4
I4: FADD R4, R5
I5: DEC R6
I6: FMUL R6, R7
I1~I2: Write-read dependency
I3~I4: read-write dependency
I5~I6: write-read dependency, output dependency
I2~I4: functional unit dependency
I3~I6: functional unit dependency
若無特殊說明,一般認為浮點加乘運算會有資源沖突
超標量中提高性能的技術
三種硬件技術
資源復制、亂序發出、寄存器重命名
目前的CPU一般是先利用寄存器重命名技術解決反相關、輸出相關等問題,再亂序發出,這樣可以發出的指令就會更多些
能在超標量處理器中提高性能的三種硬件技術:資源復制、亂序發出和重命名。
沒有寄存器重命名而添加功能單位可能不會很有價值;若指令窗口太小,數據相關性將妨礙額外功能單位的有效利用
超標量實現的硬件條件
1?? 同時取多條指令的取指策略,要有分支預測和超前取指的功能
2?? 確定有關寄存器真相關性的邏輯以及執行期間將這些值和位置聯系起來的基指
3?? 并行啟動或發射多條指令的機制
4?? 多條指令并行執行所需的資源
5?? 以正確順序提交處理狀態的機制
總結
以上是生活随笔為你收集整理的【XJTUSE 计算机组成与结构笔记】第十四章 指令级并行性和超标量处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MOV 和MOVS 这两条指令有什么区别
- 下一篇: 电子商务课程论文