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