流水线、超流水线、超标量(superscalar)技术对比(转)
流水線
?????流水線技術(shù)是一種將每條指令分解為多步,并讓各步操作重疊,從而實(shí)現(xiàn)幾條指令并行處理的技術(shù)。程序中的指令仍是一條條順序執(zhí)行,但可以預(yù)先取若干條指令,并在當(dāng)前指令尚未執(zhí)行完時(shí),提前啟動(dòng)后續(xù)指令的另一些操作步驟。這樣顯然可加速一段程序的運(yùn)行過程。?
市場上推出的各種不同的1 6位/ 3 2位微處理器基本上都采用了流水線技術(shù)。如8 0 4 8 6和P e n t i u m均使用了6步流水線結(jié)構(gòu),流水線的6步為:?
( 1 )?取指令。C P U從高速緩存或內(nèi)存中取一條指令。?
( 2 )?指令譯碼。分析指令性質(zhì)。?
( 3 )?地址生成。很多指令要訪問存儲(chǔ)器中的操作數(shù),操作數(shù)的地址也許在指令字中,也許要經(jīng)過某些運(yùn)算得到。?
( 4 )?取操作數(shù)。當(dāng)指令需要操作數(shù)時(shí),就需再訪問存儲(chǔ)器,對操作數(shù)尋址并讀出。?
( 5 )?執(zhí)行指令。由A L U執(zhí)行指令規(guī)定的操作。?
( 6 )?存儲(chǔ)或"寫回"結(jié)果。最后運(yùn)算結(jié)果存放至某一內(nèi)存單元或?qū)懟乩奂悠鰽。?
???????在理想情況下,每步需要一個(gè)時(shí)鐘周期。當(dāng)流水線完全裝滿時(shí),每個(gè)時(shí)鐘周期平均有一條指令從流水線上執(zhí)行完畢,輸出結(jié)果,就像轎車從組裝線上開出來一樣。P e n t i u m、Pentium Pro和Pentium II處理器的超標(biāo)量設(shè)計(jì)更是分別結(jié)合了兩條和三條獨(dú)立的指令流水線,每條流水線平均在一個(gè)時(shí)鐘周期內(nèi)執(zhí)行一條指令,所以它們平均一個(gè)時(shí)鐘周期分別可執(zhí)行2條和3條指令。?
?????流水線技術(shù)是通過增加計(jì)算機(jī)硬件來實(shí)現(xiàn)的。例如要能預(yù)取指令,就需要增加取指令的硬件電路,并把取來的指令存放到指令隊(duì)列緩存器中,使M P U能同時(shí)進(jìn)行取指令和分析、執(zhí)行指令的操作。因此,在1 6位/3 2位微處理器中一般含有兩個(gè)算術(shù)邏輯單元A L U,一個(gè)主A L U用于執(zhí)行指令,另一個(gè)A L U專用于地址生成,這樣才可使地址計(jì)算與其它操作重疊進(jìn)行。
超流水線
??????超級(jí)流水線以增加流水線級(jí)數(shù)的方法來縮短機(jī)器周期,相同的時(shí)間內(nèi)超級(jí)流水線執(zhí)行了更多的機(jī)器指令。采用簡單指令以加快執(zhí)行速度是所有流水線的共同特點(diǎn),但超級(jí)流水線配置了多個(gè)功能部件和指令譯碼電路,采用多條流水線并行處理,還有多個(gè)寄存器端口和總線,可以同時(shí)執(zhí)行多個(gè)操作,因此比普通流水線執(zhí)行的更快,在一個(gè)機(jī)器周期內(nèi)可以流出多條指令。
?
??????一般而言,CPU執(zhí)行一條指令需要經(jīng)過以下階段:取指->譯碼->地址生成->取操作數(shù)->執(zhí)行->寫回,每個(gè)階段都要消耗一個(gè)時(shí)鐘周期,同時(shí)每個(gè)階段的計(jì)算結(jié)果在周期結(jié)束以前都要發(fā)送到階段之間的鎖存器上,以供下一個(gè)階段使用。所以,每個(gè)時(shí)鐘周期所消耗的時(shí)間就是由以上幾個(gè)階段中的耗時(shí)最長的那個(gè)決定的。假設(shè)耗時(shí)最長的階段耗時(shí)為s秒,那么時(shí)鐘頻率就只能設(shè)計(jì)到1/s赫茲(這里不考慮階段間信號(hào)傳遞的時(shí)間和鎖存器的反應(yīng)時(shí)間)。
??????那么,要提高時(shí)鐘頻率,一種可能的方法就是減小每個(gè)階段的時(shí)間消耗。其中一種最簡單的辦法,就是將每個(gè)階段再進(jìn)行細(xì)分成更小的步驟,同樣是細(xì)分后的每個(gè)階?段,單個(gè)階段的運(yùn)算量小了,單位耗時(shí)s也就減少,這樣實(shí)際上就是提高了時(shí)鐘頻率。這種將標(biāo)準(zhǔn)流水線細(xì)分的技術(shù),就是超級(jí)流水線技術(shù)。當(dāng)然,流水線和超級(jí)流?水線之間并沒有很明顯的區(qū)別。這樣的技術(shù),雖然提高了CPU的主頻,但是也帶來了很大的副作用:
??????首先,細(xì)分后的每一個(gè)階段都要在其后使用鎖存器鎖存,因此將一個(gè)階段細(xì)分為N的子階段并不能讓單位時(shí)間減少到s/N,?而是s/N + d,?其中d為鎖存器的反應(yīng)時(shí)間。這實(shí)際上就是增加了多余的時(shí)間消耗。
??????其次,隨著流水線級(jí)數(shù)的加深,一旦分支預(yù)測出現(xiàn)錯(cuò)誤,會(huì)導(dǎo)致CPU中大量的指令作廢,這樣的消耗是十分巨大的。
??????以上原因,也就是什么Pentium IV具有31級(jí)的流水線,指令的執(zhí)行效率卻趕不上只有14級(jí)流水線的Pentium M
超標(biāo)量
超標(biāo)量(superscalar)是指在CPU中有一條以上的流水線,并且每時(shí)鐘周期內(nèi)可以完成一條以上的指令,這種設(shè)計(jì)就叫超標(biāo)量技術(shù)。?其實(shí)質(zhì)是以空間換取時(shí)間。而超流水線是通過細(xì)化流水、提高主頻,使得在一個(gè)機(jī)器周期內(nèi)完成一個(gè)甚至多個(gè)操作,其實(shí)質(zhì)是以時(shí)間換取空間。
將一條指令分成若干個(gè)周期處理以達(dá)到多條指令重疊處理,從而提高cpu部件利用率的技術(shù)叫做標(biāo)量流水技術(shù)。超級(jí)標(biāo)量是指cpu內(nèi)一般能有多條流水線,這些流水線能夠并行處理。在單流水線結(jié)構(gòu)中,指令雖然能夠重疊執(zhí)行,但仍然是順序的,每個(gè)周期只能發(fā)射(issue)或退休(retire)一條指令。超級(jí)標(biāo)量結(jié)構(gòu)的cpu支持指令級(jí)并行,每個(gè)周期可以發(fā)射多條指令(2-4條居多)。可以使得cpu的IPC(InstructionPerClock)>,從而提高cpu處理速度。超級(jí)標(biāo)量機(jī)能同時(shí)對若干條指令進(jìn)行譯碼,將可以并行執(zhí)行的指令送往不同的執(zhí)行部件,在程序運(yùn)行期間,由硬件(通常是狀態(tài)記錄部件和調(diào)度部件)來完成指令調(diào)度。超級(jí)標(biāo)量機(jī)主要是借助硬件資源重復(fù)(例如有兩套譯碼器和ALU等)來實(shí)現(xiàn)空間的并行操作。熟知的pentium系列(可能是p-II開始),還有SUNSPARC系列的較高級(jí)型號(hào),以及MIPS若干型號(hào)等都采用了超級(jí)標(biāo)量技術(shù)。
超長指令字
超常指令字(VLIW:VeryLongInstructionWord)是由美國Yale大學(xué)教授Fisher提出的。它有點(diǎn)類似于超級(jí)標(biāo)量,是一條指令來實(shí)現(xiàn)多個(gè)操作的并行執(zhí)行,之所以放到一條指令是為了減少內(nèi)存訪問。通常一條指令多達(dá)上百位,有若干操作數(shù),每條指令可以做不同的幾種運(yùn)算。那些指令可以并行執(zhí)行是由編譯器來選擇的。通常VLIW機(jī)只有一個(gè)控制器,每個(gè)周期啟動(dòng)一條長指令,長指令被分為幾個(gè)字段,每個(gè)字段控制相應(yīng)的部件。由于編譯器需要考慮數(shù)據(jù)相關(guān)性,避免沖突,并且盡可能利用并行,完成指令調(diào)度,所以硬件結(jié)構(gòu)較簡單。
VLIW機(jī)器較少,可能不太容易實(shí)現(xiàn),業(yè)界比較有名的VLIW公司之一是Transmeta,在加州硅谷SantaClara(硅谷圣地之一,還有SanJose,PaloAlto)。它做的機(jī)器采用X86指令集,VLIW實(shí)現(xiàn),具體資料可以去訪問公司的網(wǎng)站。
向量機(jī)
平時(shí)接觸的計(jì)算機(jī)都是標(biāo)量機(jī),向量機(jī)都是大型計(jì)算機(jī),一般用于軍事工業(yè),氣象預(yù)報(bào),以及其他大型科學(xué)計(jì)算領(lǐng)域,這也說明了向量機(jī)都很貴。國產(chǎn)的銀河計(jì)算機(jī)就是向量機(jī)普通的計(jì)算機(jī)所做的計(jì)算,例如加減乘除,只能對一組數(shù)據(jù)進(jìn)行操作,被稱為標(biāo)量運(yùn)算。向量運(yùn)算一般是若干同類型標(biāo)量運(yùn)算的循環(huán)。向量運(yùn)算通常是對多組數(shù)據(jù)成批進(jìn)行同樣運(yùn)算,所得結(jié)果也是一組數(shù)據(jù)。很多做科學(xué)計(jì)算的大(巨)型機(jī)都是向量機(jī),例如國產(chǎn)銀河。
SIMD技術(shù)
單指令多數(shù)據(jù)(SingleInstructionMultipleData)簡稱SIMD。SIMD結(jié)構(gòu)的CPU有多個(gè)執(zhí)行部件,但都在同一個(gè)指令部件的控制下。SIMD在性能優(yōu)勢呢:以加法指令為例,單指令單數(shù)據(jù)(SISD)的CPU對加法指令譯碼后,執(zhí)行部件先訪問內(nèi)存,取得第一個(gè)操作數(shù);之后再一次訪問內(nèi)存,取得第二個(gè)操作數(shù);隨后才能進(jìn)行求和運(yùn)算。而在SIMD型CPU中,指令譯碼后幾個(gè)執(zhí)行部件同時(shí)訪問內(nèi)存,一次性獲得所有操作數(shù)進(jìn)行運(yùn)算。這個(gè)特點(diǎn)使得SIMD特別適合于多媒體應(yīng)用等數(shù)據(jù)密集型運(yùn)算。AMD公司的3DNOW!技術(shù)其實(shí)質(zhì)就是SIMD,這使K6-2處理器在音頻解碼、視頻回放、3D游戲等應(yīng)用中顯示出優(yōu)異性能。
總結(jié)
以上是生活随笔為你收集整理的流水线、超流水线、超标量(superscalar)技术对比(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试(十二)—— 界面测试和易用性测
- 下一篇: QQ空间自动点赞代码