超純量
维基百科,自由的百科全书
超純量 CPU 架構是使用一顆核心來做指令集並行的並行運算。它能夠在相同時脈時增加 CPU 的傳送率。超純量架構使用指令預讀,在管線階層中執行一條以上的指令,通常在一顆 CPU 晶粒上蝕刻數條運算管線來達成目的。
目录 |
[编辑] 歷史
第一個超純量的設計是在1965年Seymour Cray開發的CDC 6600。1988 年的Intel i960CA與 1990 的AMD 29050處理器是第一個量產的單晶粒超純量處理器。這些RISC系統的CPU使用超純量架構,是由於當時RISC的設計的核心較簡單,能夠直接發送指令與調度多種功能性的單位(像是 ALU)。這樣子造成RISC比CISC的超純量處理器推出時間還要快。
除了那些使用電池來做電源的電腦的CPU,在1998年以後開發的CPU設計都已經是超純量。原生的CISC超純量架構是Intel P6架構,而Intel 80386核心架構則是超純量的RISC架構使用CISC的指令集。複雜指令都會在內部轉換成像是RISC的RISC微指令集,這樣就能夠與早期Intel處理器相容,但擁有更佳的效能。
[编辑] 從純量到超純量
最簡單的處理器是純量處理器。該處理器執行每個指令通常會在一個時間內操作一個或兩個資料項目。但相較之下,向量處理器執行每個指令能夠同時間運作很多資料項目。而超純量處理器則是將純量與向量處理器混合起來。每個指令處理一個資料項目,但是有多個多餘的處理器內的功能單位能同時處理額外獨立的資料項目。
超純量處理器設計強調增強指令發送的準確度,而且能夠加強很多功能單位的利用度。這樣當單位增加時效能增進就能很明顯。當早期的超純量CPU有兩組ALU與一組FPU的時候,像PowerPC 970較先進的設計就內含四組ALU、二組FPU與一對單指令流多數據流單位。但如果調度器(dispatcher)效率低落,系統的性能將會拖累。
超純量處理器的執行速度通常高於每週期一個指令。但同時處理多個指令不見得就是超純量化,像是管線化CPU與多核心CPU,就是使用不同的方式,來達同時處理多個指令的目的。
而超純量處理器的調度器從記憶體讀取指令,而且決定要將哪些指令能夠並行處理,將這些指令再調度到CPU內重複的功能單元。因而超純量處理器可以想成它有多個平行的管線,這些管線可以平行處理一個執行緒中指令。
[编辑] 限制
超純量的效能增進會被這兩處限制住:
- 指令流中的本質並行度(degrees of intrinsic parallelism),也就是限制指令級平行的數量。
- 複雜又耗時的調度器的消耗時間與依賴性檢查邏輯電路。
現有的二進制程式有不同的本質並行度。在部分指令中並不與其他指令互相關聯而能同時執行。而另一部分指令就有相互關聯:一個指令會影響其他指令的資源或結果。像是 a=b+c ; d=e+f
這串指令,因為運算中並不會相互影響而能夠並行運算。但是 a=b+c ; d=a+f
這串指令就可能無法並行執行,是因為指令順序中後面的指令需要前面的運算結果。
當同時發出指令的數量增加,依賴性檢查的成本會大量增加。由於檢查過程中需要 CPU 參與,這樣會惡化 CPU 的處理效率。而此成本包含為了實現依賴性檢查而增加的邏輯閘,還有在這些邏輯閘之間的時間延遲。而研究顯示出邏輯閘成本在某些狀況下可能會高達 k2logn,n 是處理器的指令集數量,而 k 是同時發送的指令數量。在數學領域稱之為排列組合問題。而既使該指令流並沒有任何的指令依賴性,超純量處理器還是要去檢查,這樣子才能確保結果不會錯誤。而無論半導體製程是多麼進步,或是切換速度是多麼的快,同時發送的指令數量還是有一個限制在。當更新進的製程允許更多的功能性單位內建其中(像是 ALU),但是指令依賴性檢查成長得太快以至於超純量調度限制還是感覺很小,既使同時有五到六個指令同時調度進去。
然而即使將無限快的依賴性檢查邏輯電路內建於超純量 CPU,如果指令流自己有很大的依賴性,這樣還是可能會限制住效能。這樣在源碼流之間的本質平行度就會形成第二個限制。
[编辑] 替代技術
綜合來講,由於這兩個限制而造成研究方向會轉到替代架構的效能增進技術,像是超長指令字組(VLIW)、顯式並行指令運算(EPIC)、同步多執行緒(SMT)與多核心處理器。EPIC与VLIW类似,但是包含了高速缓存预取指令。
在超标量处理器中,检查依赖关系这项沉重的任务是由硬件逻辑电路在运行时完成的。但在VLIW和EPIC等技术中,这项任务被转交给编译器,由编译器在编译时以软件方式完成。编译器完成这项任务有可能相当慢,超标量设计中原本可在纳秒级别时间内完成的检查,可能要花上编译器好几秒。在多核处理器上使用一个多线程编译器或许可以加速这一过程。
因为EPIC和VLIW把依赖关系检查放到编译器中以软件方式完成,这就带来一个好处,也就是可以在一个更宽的窗口范围内寻找无依赖关系,可以同时执行的指令,因此理论上可以提高指令执行的并行度。在超标量处理器中,检查窗口宽度受到硬件复杂度和执行时间的限制,通常不可能做得很大。
但是,软件方式的依赖关系检查因为不是在程序运行时进行,所以无法有效获得一些信息来判断依赖关系。这时,为了保证正确性,编译器的行为往往趋于保守。硬件检查电路则可以利用一些运行时信息来判断依赖关系。
而同步多執行緒,是一種能夠增進超純量CPU整體效率的技術。藉由先進的處理器架構,SMT將執行中的多個執行緒能夠利用得更好。
超純量處理器與多核心處理器的不同點是多餘的功能單位不在整個處理器中。一個單獨的處理器包含著較佳粒度的功能單位,像是ALU、乘法器、整數移位器與浮點單位等。每個功能單位的可能有多種版本來允許許多指令的並行執行。而這與多核心CPU不同點在於後者能夠同時處理多於一個執行緒的指令,而前者是一顆核心一個執行緒。而這也與指令管線化的CPU不一樣,因為它是將很多指令拆解成許多階層來執行。
這些不同的替代技術並不是完全互斥的──它們能夠(而且經常是)包含在一個處理器內。像是一個多核心處理器中可能每個核心是內含多重並行管線的單獨處理器,而每條管線都是超純量的。甚至有些處理器相容向量式處理。
[编辑] 內部連結
- Hyper-Threading
- 並行多工
- 預測執行 / 及早求值
- 軟體停滯,會出現於多處理器系統,由於超純量的邏輯依賴性造成的現象。
[编辑] 參考書目
- Mike Johnson, Superscalar Microprocessor Design, Prentice-Hall, 1991, ISBN 0-13-875634-1
- Sorin Cotofana, Stamatis Vassiliadis, "On the Design Complexity of the Issue Logic of Superscalar Machines", EUROMICRO 1998: 10277-10284
- Steven McGeady, "The 1960CA SuperScalar Implementation of the 80960 Architecture", IEEE 1990, pp. 232-240
- Steven McGeady, et al., "Performance Enhancements in the Superscalar i960MM Embedded Microprocessor," ACM Proceedings of the 1991 Conference on Computer Architecture (Compcon), 1991, pp. 4-7
[编辑] 外部連結
|
|
---|---|
架構 | ISA • RISC • CISC • EPIC • VLIW |
平行計算 | 管線式 • 超純量 • 亂序執行 • 預測執行 • 多執行緒 • 多重處理 |
元件 | ALU • FPU • 向量處理器 • 单指令流多数据流 • 32位元/64位元 • 寄存器 • 快取 |
封裝方式 | ASIC • FPGA • DSP • 单片机 • ASIP • SoC |