超純量

超純量（superscalar）CPU架構是指在一顆处理器内核中实行了指令级並行的一类並行運算。这种技术能够在相同的CPU主频下实现更高的CPU流量（throughput）。处理器的内核中一般有多个执行单元（或称功能单元），如算术逻辑单元、位移单元、乘法器等等。未实现超純量体系结构时，CPU在每个时钟周期仅执行单条指令，因此仅有一个执行单元在工作，其它执行单元空闲。超純量体系结构的CPU在一个时钟周期可以同时分派（dispatching）多条指令在不同的执行单元中被执行，这就实现了指令级的并行。超純量体系结构可以视作多指令流多數據流。

超純量体系结构的CPU一般也都实现了指令流水化。但是一般认为这二者是增强CPU性能的不同的技术。



歷史
第一個超純量的設計是在1965年西摩·克雷開發的CDC 6600。1984年的Intel i960CA與1987的AMD 29050處理器是第一個量產的單晶粒超純量處理器。這些RISC系統的CPU使用超純量架構，是由於當時RISC的設計的核心較簡單，能夠直接發送指令與調度多種功能性的單位（像是ALU）。這也是在八、九十年代RISC處理器比CISC處理器的運算速度更快的主要原因。

除了那些低功率CPU、嵌入式CPU、以及使用電池電源的CPU，1998年以後開發的CPU設計都已經是超純量體系结構。第一種採用超純量技術的x86處理器是Pentium。第一批採用了把CISC指令異步解碼为微指令序列技術的處理器是Nx586、P6架構的Pentium Pro以及AMD K5。這使得被缓存的微指令可以動態調度（dynamic scheduling）執行，使得P6架構的並行性更優於P5架構的Pentium;這也使得預測執行（）更易實現，CPU的時脈也可以更高。

從純量到超純量
最簡單的處理器是純量處理器。該處理器執行每個指令通常會在一個時間內操作一個或兩個資料項目。但相較之下，向量處理器執行每個指令能夠同時間運作很多資料項目。而超純量處理器則是將純量與向量處理器混合起來。每個指令處理一個資料項目，但是有多個多餘的處理器內的功能單位能同時處理額外獨立的資料項目。

超純量處理器設計強調增強指令發送的準確度，而且能夠加強很多功能單位的利用度。這樣當單位增加時效能增進就能很明顯。當早期的超純量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的處理效率。而此成本包含為了實現依賴性檢查而增加的邏輯閘，還有在這些邏輯閘之間的時間延遲。而研究顯示出邏輯閘成本在某些狀況下可能會高達，n是處理器的指令集數量，而k是同時發送的指令數量。在數學領域稱之為排列組合問題。而即使該指令流並沒有任何的指令依賴性，超純量處理器還是要去檢查，這樣子才能確保結果不會錯誤。而無論半導體製程是多麼進步，或是切換速度是多麼的快，同時發送的指令數量還是有一個限制在。當更新進的製程允許更多的功能性單位內建其中（像是ALU），但是指令依賴性檢查成長得太快以至於超純量調度限制還是感覺很小，既使同時有五到六個指令同時調度進去。

然而即使將無限快的依賴性檢查邏輯電路內建於超純量CPU，如果指令流自己有很大的依賴性，這樣還是可能會限制住效能。這樣在源碼流之間的本質平行度就會形成第二個限制。

替代技術
綜合來說，這三個限制驅使研究轉向其他的效能增進架構，例如超長指令字（VLIW）、顯式並行指令計算（EPIC）、同步多執行緒（SMT）和多核心處理器。

在VLIW架構，繁重的指令相依性檢查工作由運行時的硬體邏輯轉移到編譯器身上。而EPIC與VLIW相似，但多了快取預取指令。

同步多執行緒通常縮寫為SMT，目的是為了改進超純量處理器的總體效率。此架構允許多個獨立的執行緒更佳的利用現代處理器架構的資源。

超純量處理器不同於多核心處理器之處，在於多餘的功能單元無法構成完整的處理器。一個處理器由多個較細粒度的功能單元所組成，例如算術邏輯單元（ALU）、整數乘法器、整數位移器、浮點運算器等等。每個功能單元可能存在複數版本，使得多個指令能平行執行。此做法不同於多核心處理器，後者使用多個執行緒（一核一緒）同時地處理指令；也不同於管線化處理器 - 複數指令可以同時存在於不同的執行階段，就像工廠裝配線一樣。

這些替代技術並非互斥，他們可以（經常是）被合併使用到單一處理器上。因此一顆多核心處理器可能是這樣，每個核心包含複數個平行管線，每個管線都是超純量。有些處理器還擁有向量處理的能力。

內部連結
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

外部連結
 http://www.cs.clemson.edu/~mark/eager.html 

category:微處理器