7.3 超标量流水线
計算機組成
7 流水線處理器
7.3 超標量流水線
超標量流水線在現(xiàn)代的處理器當中得到了廣泛的應用,也就是這種技術給我們帶來了出色的處理器性能。那究竟什么才是超標量流水線,它又是如何工作的呢?我們這一節(jié)將一起探討這個問題。
這個是我們之前已經(jīng)構建好的一條流水線,但是如果我們覺得它的吞吐率還不夠高。其中一個改進的方向就是加深流水線,而與之相對另一個改進的方向就是拓寬流水線。而拓寬流水線的這個方案我們就稱為超標量。在現(xiàn)在通常來說超標量的結構是只有兩條或者有兩條以上可以并行工作的流水線,那好就這個廚房的例子,現(xiàn)在為了滿足更多客人的需求,我們就需要把這條做菜的流水線進行拓寬。我們從左往右來看首先我把這個洗菜的池子擴大一倍,這樣就可以同時洗兩道菜的原料了。那與之相匹配的后面的各個環(huán)節(jié)都得加倍,這樣我們就有了兩條可以并行工作的流水線,這就是一條超標量流水線。在處理器設計當中我們也經(jīng)常簡稱為超標量。那么與超標量流水線相對,以前的單條流水線就可以被稱為標量流水線,那采用了超標量結構的處理器,我們也常稱之為超標量處理器。
那么就結合這個例子簡單的來看一看超標量流水線是如何工作的。既然我們這個洗菜的池子擴大了一倍,那么同時就可以進行兩道菜的操作,那么當一分鐘過去之后。
洗菜這個環(huán)節(jié)就會將這兩份菜的原料分別送到切菜1這個環(huán)節(jié)的兩位操作人員手中,而與此同時第三道菜和第四道菜則會進入洗菜環(huán)節(jié)。
這樣在每一個環(huán)節(jié)都有兩道菜菜在同時的并行向前。那到了五分鐘的時候就可以同時完成兩道菜。而對于處理器,這也常被稱為雙發(fā)射的結構。那如果照著這個方式再擴展一條流水線就變成三發(fā)射,再擴大一條就會變成四發(fā)射,這就是超標量流水線的基本工作原理。
那我們再來看一些實際的例子。奔騰是第一款采用超標量技術的x86CPU。這就是奔騰的流水線結構,它是一個雙發(fā)射的五級流水線,這兩條流水線分別被命名為U流水和V流水。它們共用取指和譯碼的部件,但是有自己獨立的地址生成邏輯,ALU 以及數(shù)據(jù)高速緩存的接口。那在一個時鐘周期內可以同時發(fā)送兩條指令,分別到U流水和V流水。當然超標量技術并不是到這個時候才誕生的,而是在很多年前就在計算機當中獲得了應用。
這是歷史上第一臺超級計算機CDC6600。那么在這臺計算機當中,有十個并行的功能部件,因此也被認為是最早采用了超標量技術的計算機。不過這些功能部件內部并沒有采用流水線,所以從這里我們可以看出超標量技術和流水線技術實際上是相互獨立的,只不過在現(xiàn)在采用了超標量技術的CPU也都是使用流水線的技術。
雖然CDC6600沒有采用流水線,但它的下一代產(chǎn)品CDC7600就在這些并行的功能部件內實現(xiàn)了流水線的技術。
那我們再回到現(xiàn)在,ARM Cortex-A9的流水線結構。它每個時鐘周期可以發(fā)射四條指令,根據(jù)指令的不同,總共會經(jīng)過八到十一級流水線。與奔騰類似的是在流水線的前端比如說取指,譯碼并沒有分成多條流水線而是采用統(tǒng)一的部件。當然我們要知道這些部件雖然看上去是一個,但它實際上比標量流水線要大得多。比如說取指部件至少一次要能取來四條指令甚至更多,而譯碼部件一次也至少應該完成四條指令的譯碼。而到了流水線的后端,才會從結構表示上體現(xiàn)出多條并行流水線的形態(tài)。
然后我們再來看Core i7的超標量流水線。這個流水線就更為復雜,這個是指令高度緩存(L1 Instruction Cache)也就相當于我們在流水線原理當中提到的指令存儲器。我們可以看到每個周期從指令存儲器當中會取回128個比特,也就是十六個字節(jié),因為x86指令長度是不固定的,所以首先要經(jīng)過一個指令長度的譯碼器(ILD),分解出到底哪幾個字節(jié)是一條指令。那么在這一點上MIPS指令系統(tǒng)就體現(xiàn)出了明顯的優(yōu)勢,它每條指令都是定長的,不用額外進行這樣的識別工作。那么還有一點值得一提的是在譯碼器當中通過硬件會將x86的指令轉換成更為簡單的指令,這些指令被稱為微操作,那從這里(Instruction Decoders)可以看出有三個簡單的譯碼器(simple),用于對那些比較簡單的x86指令進行轉換,每條指令對應一個微操作。而那些非常復雜的指令則會通過這個復雜的譯碼器(complex)轉換成多條微操作,而這些微操作都是類似于RISK指令的格式,這樣在它流水器的后半部分看到的都是RISK格式的簡單指令了。那這張圖(左半部分)還只是流水線的前半部分。
我們再畫出后半部分(右半部分)。在這里我們也可以看出多條并行的流水線(Port 0~5),而且因為在這個流水線當中運行的是微操作,都是采用了RISK的編碼風格。所以,這里也可以充分運用大量面向RISK處理器研發(fā)出的高級流水線的技術。這也就是為什么我們現(xiàn)在經(jīng)常說x86雖然是一個CISK的指令系統(tǒng),但它實際上是用RISK的方式去實現(xiàn)的。
那這個CPU就是一個4發(fā)射16級流水的超標量流水線。
那我們再來比較一下超標量流水線和之前的標量流水線。最開始從單周期處理器到流水線處理器主要考慮的是時間并行性上的優(yōu)化,通過對現(xiàn)有硬件進行切分,只是增加了少量的流水線寄存器以及部分的控制信號的改動,那原本串行執(zhí)行的指令在一定程度上并行起來。而從標量流水線到超標量流水線則是主要考慮了空間并行性上的優(yōu)化,這是讓不同的指令同時在不同的流水線上運行,那么簡單的看來每增加一個發(fā)射數(shù)就需要增加一條流水線的硬件資源。
我們最后來看一看超標量流水線與多核的關系。從原理上講它們都是在空間并行性方面尋求的優(yōu)化,我們還是看一個實際的例子。這就是Core i7,也是我們現(xiàn)在熟知的多核超標量處理器。那么來看看它內部的結構。
首先我們來看一個概念叫做處理器核。這部分實際上就包含了我們之前介紹的那些數(shù)據(jù)通路控制信號等等。當然還需要包含指令和數(shù)據(jù)的高度緩存(I-Cache和D-Cache),對應了我們原理結構當中的指令存儲器(Instruction Memory)和數(shù)據(jù)存儲器(Data Memory)。那為了提高性能現(xiàn)在的處理器當中一般還配備了二級的高速緩存(L2 Cache)。這些部件的關系非常緊密,我們通常也就把這一部分稱為一個處理器核。
那么剛才看到那個4發(fā)射16級流水線的結構圖就是在只這么一個處理器核內部的結構(圖中最左邊虛線內的框圖),那么可以說這一個處理器核就是一個超標量流水線的處理器核。而在單核的時代這個部分結構就單獨制造出了一個芯片,就是以前的單核CPU。那現(xiàn)在我們把這樣同樣的結構復制多份,然后再加上一些共享的存儲部件就構成了一個多核的CPU,這里面有四個核那就是一個四核的CPU。每一個核內部都是一個超標量流水線的結構,這就是我們現(xiàn)在通常說的多核CPU和超標量流水線之間的關系。
現(xiàn)在我們已經(jīng)從整體框架層面了解了流水線處理器的發(fā)展演變的過程,而且也知道了現(xiàn)代最先進流水線處理器的大體結構。但是僅僅了解這些是不夠的,流水線的方式引入處理器之后它自身也帶來了一些新的問題,我們必須了解并解決這些問題。這是我們下一節(jié)將要探討的主題。
轉載于:https://www.cnblogs.com/houhaibushihai/p/9736470.html
總結
以上是生活随笔為你收集整理的7.3 超标量流水线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fckeditor 源代码下载
- 下一篇: 渗透测试 2 --- XSS、CSRF、