超標量處理機和超流水線處理機——計算機系統結構


在表5.2中,基准標量處理機是一台普通的單流水線處理機。為了便於進行比較,把基准標量處理機的機器流水線周期和指令發射等待時間都假設為1個時鍾周期,同時發射的指令條數為一條,它的指令級並行度ILP(Instruction Level Parallelism)假設為1。另外三種指令級並行處理機,即並行度為m的超標量處理機,並行度為n的超流水線處理機,以及並行度為(m,n)的超標量超流水線處理機,它們的性能都相對於基准標量處理機進行比較。

單流水線處理機只有一條指令流水線,只有一個多功能的操作部件,每個時鍾周期"取指令"和"分析"完成一條指令。在許多流水線處理機中,指令流水線的流水段數k=4;它把一條指令的執行過程主要分解為"取指令"、"分析"、"執行"和"寫結果"4個階段。指令所要執行的功能主要在多功能操作部件中,在"執行"這一流水段完成。多數流水線處理機的多功能操作部件采用流水線結構。有的簡單指令,只要一個時鍾周期就能夠在"執行"流水段中完成,而比較復雜的指令往往需要多個時鍾周期。另外,還有條件轉移等的影響;因此,一般流水線標量處理機每個時鍾周期平均執行指令的條數小於1,即它的指令級並行度ILP<1。
超標量、超流水線和超標量超流水線三種處理機在一個時鍾周期內可以執行完成多條指令,即它們的指令級並行度ILP都大於1。

超標量處理機

基本結構

超標量處理機的典型結構是有多個操作部件,一個或幾個比較大的通用寄存器堆,一個或兩個高速Cache。先進的超標量處理機一般都包含有三個處理單元,一個是定點處理單元,通常稱為中央處理單元(CPU),它由一個或多個整數處理部件組成;第二個是浮點處理單元(FPU),它由浮點加減法部件和浮點乘除法部件等組成;第三個是圖形加速部件,也稱為圖形處理單元(GPU),這是現代處理機中不可缺少的一個部分。先進的超標量處理機通常都設置有大量的通用寄存器。在有的超標量處理機中,CPU和FPU分別使用兩個通用寄存器堆。在多數超標量處理機中都設置有兩個一級高速Cache,一個是指令Cache,另一個是數據Cache,這種把指令Cache和數據Cache分開的結構被稱為哈佛(Harvard)結構。每個高速Cache的容量一般在幾K至幾十K字節;有的超標量處理機,還把二級Cache也做在處理機芯片內。

在MC88110超標量處理機內部有兩個寄存器堆;其中,整數部件使用通用寄存器堆,它由32個32位的寄存器組成;浮點點部件使用擴展寄存器堆,它由32個80位的寄存器組成。每個寄存器堆有8個端口,分別與8條內部總線相連接,可以同時讀出8個操作數提供給各個操作部件使用。另外,在取數/存數部件中,還有一個緩沖深度為4的先行讀數棧和一個緩沖深度為3的后行寫數棧。
  指令和數據分別存放在兩個獨立的高速Cache中,指令Cache和數據Cache的容量各為8K字節。兩個Cache都采用兩路組相聯方式工作,因此,每個時鍾周期可以提供兩個64位的指令和數據。另外,為了減少轉移指令對流水線的影響,專門設置有一個轉移目標指令Cache。在遇到條件轉移指令時,在指令Cache和目標指令Cache中分別存放兩路分支上的有關指令;並且,指令分配部件在每個時鍾周期分別從指令Cache和目標指令Cache中各取出兩條指令來同時進行譯碼;最后,根據形成的條件碼決定把其中一路分支上的指令送到操作部件中去。
 
如圖5.47所示,是由Motorola公司生產的一種先進超標量處理機MC88110。它有10個操作部件,其中兩個整數部件,可以作32位整數運算,其中也包括地址運算等。整數操作是單周期執行,完成一條 整數運算指令使用一條4段流水線,包括取指令IF、譯碼ID、執行EX和寫結果WR,每個時鍾周期可以完成兩條整數指令。浮點運算是80位字長的,包括浮點加、減、乘、除和求浮點平方根等16條指令。浮點加法部件和乘法部件都采用3級流水線,每個時鍾周期可以完成一條乘法指令和一條浮點加法指令;而且,對單精度、雙精度及擴展雙精度指令的執行速度都一樣快。兩個專用的圖形處理部件可以直接對圖形的象素進行處理,它與浮點操作部件一起,提供高性能的三維(3D)圖形處理能力,共有9條專門的圖形處理指令。

在MC88110超標量處理機內部有兩個寄存器堆;其中,整數部件使用通用寄存器堆,它由32個32位的寄存器組成;浮點點部件使用擴展寄存器堆,它由32個80位的寄存器組成。每個寄存器堆有8個端口,分別與8條內部總線相連接,可以同時讀出8個操作數提供給各個操作部件使用。另外,在取數/存數部件中,還有一個緩沖深度為4的先行讀數棧和一個緩沖深度為3的后行寫數棧。
  
指令和數據分別存放在兩個獨立的高速Cache中,指令Cache和數據Cache的容量各為8K字節。兩個Cache都采用兩路組相聯方式工作,因此,每個時鍾周期可以提供兩個64位的指令和數據。另外,為了減少轉移指令對流水線的影響,專門設置有一個轉移目標指令Cache。在遇到條件轉移指令時,在指令Cache和目標指令Cache中分別存放兩路分支上的有關指令;並且,指令分配部件在每個時鍾周期分別從指令Cache和目標指令Cache中各取出兩條指令來同時進行譯碼;最后,根據形成的條件碼決定把其中一路分支上的指令送到操作部件中去。
 

單發射與多發射

單發射處理機的指令執行時空圖如圖5.48(a)所示,它在一個時鍾周期內只從存儲器中取出一條指令,並且只對一條指令進行譯碼,只執行一條指令,只寫一個運算結果。
  在單發射處理機中,取指令部件和指令譯碼部件只各設置一套,而操作部件可以只設置一個多功能操作部件,也可以設置多個獨立的操作部件。例如,定點算術邏輯部件ALU、取數存數部件LSU、浮點加法部件FAD、乘除法部件MDU等。一個有4個操作部件組成的單發射處理機如圖5.49(a)所示。單發射處理機在指令一級通常采用流水線結構;而在操作部件中,有的機器采用流水線結構,也有的機器不采用流水線結構。
  單發射處理機的設計目標是每個時鍾周期平均執行一條指令,即它的指令級並行度ILP的期望值1。如果從表5.2中看,相當於m=1。實際上,它就是一台有k段流水線的普通標量處理機。由於數據相關、條件轉移和資源沖突等原因,實際的ILP不可能達到1。通過優化編譯器對指令序列進行重組(recorganizer),以及采用軟件與硬件相結合的方法處理數據相關、條件轉移和資源沖突等,可以使ILP接近於1。但是,單發射處理機的ILP不可能大於1。

圖5.48 單發射與多發射處理機的指令執行時空圖

  多發射處理機在一個基本時鍾周期內同時從指令Cache中讀出多條指令,同時對多條指令進行譯碼。一個同時發射三條指令的多發射處理機的指令執行時空圖如圖5.48(b)所示。為了實現在一個時鍾周期同時多發射條指令,通常需要有多個取指令部件,多個指令譯碼部件和多個寫結果部件。圖6.53(b)是一個同時發射兩條指令的多發射處理機的指令流水線。兩個取指令部件同時從指令Cache中取出兩條指令,兩個指令譯碼部件同時對兩條指令進行譯碼,指令的譯碼結果分別送往4個操作部件執行。

性能

為了便於比較,把單流水線普通標量處理機的指令級並行度記作(1,1),超標量處理機的指令級並行度記作(m,1),超流水線處理機的指令級並行度記作(1,n),而超標量超流水線處理機的指令級並行度記作(m,n)。
  在理想情況下,N條指令在單流水線普通標量處理機上的執行時間為:

    (5.29)
  其中,k是流水線的級數,是一個時鍾周期的時間長度。
  如果把相同的N條指令在一台每個時鍾周期發射m條指令的超標量處理機上執行,所需要的時間為:

   
  其中,第一項是第一批m條指令同時通過m條指令流水線所需要的執行時間,而第二項是執行其余N-m條指令所需要的時間,這時,每一個時鍾周期有m條指令分別通過m條指令流水線。
  因此,超標量處理機相對於單流水線普通標量處理機的加速比為:

   
  當N→∞時,在沒有資源沖突,沒有數據相關和控制相關的理想情況下,超標量處理機的加速比的最大值為:

超流水線處理機

在一般標量流水線處理機中,通常把一條指令的執行過程分解為"取指令"、"譯碼"、"執行"和"寫回結果"4個流水段。如果把其中的每個流水段再細分,例如,再分解為兩個延遲時間更短的流水段,則一條指令的執行過程就要經過8個流水段,這樣,在一個時鍾周期內就能夠"取指令"兩條,"譯碼"、"執行"和"寫結果"各兩條指令。這種在一個時鍾周期內能夠分時發射多條指令的處理機稱為超流水線處理機。另外,也可以把指令流水線的段數大於或等於8的流水線處理機稱為超流水線處理機。
  超流水線處理機與上一節中介紹的超標量處理機不同,超標量處理機是通過重復設置多"取指令"部件,設置多個"譯碼"、"執行"和"寫結果"部件,並讓這些功能部件同時工作來提高指令的執行速度,實際上是以增加硬件資源為代價來換取處理機性能的;而超流水線處理機則不同,它只需要增加少量硬件,是通過各部分硬件的充分重疊工作來來提高處理機性能的。從流水線的時空圖上看,超標量處理機采用的是空間並行性,而超流水線處理機采用的是時間並行性。

指令執行時序

 一台並行度ILP為n的超流水線處理機,它在一個時鍾周期內能夠發射n條指令;但這n條指令不是同時發射的,每隔1/n個時鍾周期發射一條指令;因此,實際上超流水線處理機的流水線周期為1/n個時鍾周期。一台每個時鍾周期分時發射3條指令的超流水線處理機的指令執行時空圖如圖5.56所示。
圖5.56 超流水線處理機的指令執行時空圖
圖5.56只是超流水線處理機原理上的指令執行時空圖。實際上,流水段還要進一步細分,一個流水段要細分為多個流水級,每一個流水級也都有名稱。在分解流水段時要根據實際情況,有些流水段分解的流水級數可多些。例如,圖5.56中的"譯碼(ID)"流水段,可以再細分為"譯碼"流水級、"取第一個操作數"流水級和"取第二個操作數"流水級等。有些流水段分解的流水級數可少些,也的流水段可以不再細分,如"寫結果"流水段一般不再細分。

典型結構

 在早期生產的計算機中,巨型計算機CRAY-1和大型計算機CDC-7600屬於超流水線處理機,其指令級並行度n=3。在目前大量使用的微處理器中,只有SGI公司的MIPS(Microprocessor without Interlocked Piped Stages)系列處理機屬於超流水線處理機。MIPS是除Intel公司的X86系列微處理器之外,生產量最大的一種微處理器。MIPS系列的微處理器主要有R2000、R3000、R4000、R5000和R10000等幾種,其中,R4000是典型的超流水線處理機。下面以R4000為例,說明超流水線處理機的基本結構和工作原理,圖5.57是R4000微處理器的結構框圖。
  R4000芯片內有兩個Cache,指令Cache和數據Cache的容量各8K字節,每個Cache的數據寬度為64位。由於每個時鍾周期可以訪問Cache兩次,因此,在一個時鍾周期內可以從指令Cache中讀出兩條指令,從數據Cache中讀出或寫入兩個數據。
  整數部件是R4000的核心處理部件,它主要包括一個32個32位的通用寄存器堆,一個算術邏輯部件,一個專用的乘法/除法部件。整數部件負責取指令,整數操作的譯碼和執行,LOAD與STORE操作的執行等。通用寄存器堆用作標量整數操作和地址計算,寄存器堆有兩個輸出端口和一個輸入端口,它還設置有專用的數據通路,可以對每一個寄存器讀和寫兩次。整數部件包括一個整數加法器和一個邏輯部件,負責執行算術運算操作,地址運算和所有的移位操作。乘法/除法部件能夠執行32位帶符號和不帶符號的乘法或除法操作,它可以與整數部件並行執行指令。
  浮點部件包括一個浮點通用寄存器堆和一個執行部件。浮點通用寄存器堆由16個64位的通用寄存器組成,它也可以設置成32個32位的浮點寄存器。浮點執行部件由浮點乘法部件、浮點除法部件和浮點加法/轉換/求平方根部件等三個獨立的部件組成,這三個浮點部件可以並行工作。浮點操作主要包括浮點加、減、乘、除和求平方根、定點與浮點格式的轉換、浮點格式之間的轉換、浮點數比較等15種。浮點控制寄存器用來設置浮點協處理器的狀態和控制信息,主要用於診斷軟件、異常事故處理、狀態保存與恢復、舍入方式的控制等。
  R4000的指令流水線有8級,流水線操作如圖5.58所示。R4000采用超流水線結構,取指令和訪問數據都要跨越兩個流水級。實際上,每個時鍾周期包含兩個流水級,處理器取第一條指令(IF)和取第二條指令(IS)兩個流水級都要訪問指令Cache,這兩個流水級為一個時鍾周期。在寄存器流水級(RF)的開始,指令已經讀到了指令寄存器中,因此可以進行譯碼,並且訪問寄存器堆。另外,由於指令Cache是采用直接映象方式的,因此,從指令Cache中讀出的區號要與訪問存儲器的物理地址進行比較。如果相等,表示指令Cache命中。


對於非存儲器操作指令,如果指令Cache命中,那么,指令可以在指令執行(EX)流水級執行,指令的執行結果可以在EX流水級的末尾得到。
  在正常情況下,MIPS R4000指令流水線工作時序如圖5.59所示。一條指令的執行過程經歷8個流水線周期。由於一個主時鍾周期包含有兩個流水線周期,因此,也可以認為每4個主時鍾周期執行完一條指令。

從流水線的輸入端看,每一個流水線周期啟動一條指令。同樣,從流水線的輸出端看,每一個流水線周期執行完成一條指令。當流水線被充滿時,如圖5.59中的黑框內所示,有8條指令在同時執行。如果把兩個流水線周期看作一個時鍾周期,則在一個時鍾周期內,R4000處理機分時發射了兩條指令。同樣,在一個時鍾周期內,流水線也執行完成了兩條指令,因此,R4000是一種很典型的超流水線處理機。
  在取第一個數據(DF)和取第二個數據(DS)流水級期間,R4000要訪問數據Cache。首先,存儲器管理部件(MMU)在DF和DS流水級把數據的虛擬地址變換成主存物理地址,然后,在標志檢驗(TC)流水級從數據Cache中讀出數據的區號,並把讀出的區號與變換成的主存物理地址進行比較。如果比較結果相等,則數據Cache命中。對於STORE指令,如果命中,只要把數據送到寫入緩沖器,由寫入緩沖器負責把數據寫到數據Cache的指定中去。對於非存儲器操作指令,在寫回結果(WB)流水級要把指令的最后執行結果寫回到通用寄存器堆中。

性能

在一台指令級並行度為(1,n)的超流水線處理機上,執行N條沒有數據相關和控制相關的指令所需要的時間為:

其中,k是指令流水線的流水段數,或時鍾周期數;而不是流水線級數。在一般超流水線處理機中,指令流水線的級數實際應為k n。上式中的頭一項是第一條指令通過指令流水線執行完成所需要的時間,而第二項是執行其余N-1條指令所需要的時間,這時,每一個時鍾周期有n條指令要在指令流水線中執行完成,也就是每一個流水線周期執行完成一條指令。
  
單流水線普通標量處理機連續執行N條指令所用時間如(5.29)式所示,因此,超流水線處理機相對於單流水線普通標量處理機的加速比為:

當執行的指令條數N→∞時,在沒有數據相關和控制相關的理想情況下,超流水線處理機的加速比的最大值為:

摘自https://pop0726.github.io/jsj/content/sec.htm,侵刪(TSU的遠古課件,但還是很詳盡)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM