日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

超标量处理器设计 姚永斌 前言 摘录

發(fā)布時間:2024/8/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超标量处理器设计 姚永斌 前言 摘录 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目前的通用處理器從指令集方面可分為RISC和CISC。CISC伴隨著處理器的誕生,最開始的處理器都是使用這種指令集,力求在一條指令內(nèi)完成很多事情,并且使用盡可能多的指令,覆蓋到各種各樣的操作,這就可以降低對存儲器的需求,并且簡化編譯器的設(shè)計。

當(dāng)存儲器和編譯器不在是問題時,RISC產(chǎn)生了。因為80%的CISC指令只在20%被使用,則可以將經(jīng)常使用的20%的CISC指令使用硬件來實現(xiàn),剩余80%的指令可以使用軟件來模擬,于是簡化硬件的設(shè)計,也便于使用流水線。

不像可以變化長度的CISC指令,RISC指令采用32位等長方法。如此可以降低解碼難度,易于流水線的設(shè)計。使得RISC指令集有著更高的頻率,同時功耗和成本相對也更低。

標(biāo)量處理器是指:每周期最多只能執(zhí)行一條指令,它一般都是按照程旭中指定的順序來執(zhí)行指令,這稱為順序執(zhí)行(in-order)。這制約了處理器性能的提高。

超標(biāo)量處理器:一個周期執(zhí)行多條指令。處理器可以按照程旭中指定的順序來執(zhí)行,也可以不遵守這個順序。只要指令的源操作數(shù)都準(zhǔn)備好了,它就可以被執(zhí)行,被稱為亂序執(zhí)行(out-of-order)。當(dāng)然有一些方法使這些亂序執(zhí)行的指令看起來仍然按照程序中指定的順序更改處理器的狀態(tài),在超標(biāo)量處理器中的這些功能注定了它的復(fù)雜性,以及更多的硬件資源和更高的功耗,目的就是性能提升。

上述的CISC和RISC、以及scalar和superscalar是相互正交的。產(chǎn)生四種組合:

Scalar CISC:處理器最開始的時候采用的結(jié)構(gòu),這種結(jié)構(gòu)一般會直接對CISC指令進(jìn)行解碼,甚至可能不使用流水線,目前已逐漸淘汰。

Scalar RISC:這是RISC處理器剛剛出現(xiàn)的時候采用的結(jié)構(gòu)。由于RISC指令級降低了對硬件的要求,并且便于流水線的實現(xiàn),所以此結(jié)構(gòu)處理器多使用流水線來提高性能,它的主頻一般比較高,成本也低。嵌入式低功耗領(lǐng)域的處理器均采用這種結(jié)構(gòu)。

Supercalar RISC:隨著對處理器性能需求越來越高,每周期執(zhí)行一條指令的處理器已經(jīng)不能滿足需求了。為什么首先出現(xiàn)在RISC處理器呢?因為RISC指令級比較規(guī)整,便于硬件實現(xiàn)。主要服務(wù)于嵌入式的高性能應(yīng)用領(lǐng)域。

Superscalar CISC:盡管CISC并不容易使用流水線來實現(xiàn),更難直接使用超標(biāo)量結(jié)構(gòu)來實現(xiàn),但是Intel和AMD在處理器內(nèi)部使用硬件將一條CISC的指令轉(zhuǎn)換為RISC指令,這樣充分使用了RISC指令集的優(yōu)勢。當(dāng)然,比普通的RISC處理器要付出更多的硬件資源,功耗也會偏大。

在上述4種結(jié)構(gòu)中,本文重點關(guān)注Superscalar RISC處理器設(shè)計。該處理器的流水線則貫穿本書的主線,一條指令從程序存儲器中取出來之后,需要經(jīng)過流水線的各個階段,最后才能得到結(jié)果,并更新處理器的狀態(tài)。

本書內(nèi)容按指令的軌跡來組織:

第1章:介紹普通處理器和超標(biāo)量處理器的一些背景知識。

第2章: Cache,這是由于一般的指令都是從I-Cache中取出來并送到流水線中,因此流水線始于I-Cache。當(dāng)然,處理器也存在D-Cache。不同結(jié)構(gòu)的Cache對處理器的性能有著重要的影響,尤其在超標(biāo)量處理器中,每周期需要同時執(zhí)行多條指令,這給Cache的設(shè)計帶來一些挑戰(zhàn)。

第3章:虛擬存儲器(Virtual Memory),因為處理器在取指令的時候,如果送出來的是虛擬地址,那么首先需要轉(zhuǎn)化為物理地址,然后才能取到指令,對數(shù)據(jù)的訪問也是類似的,虛擬存儲器是現(xiàn)代操作系統(tǒng)運行的基礎(chǔ),在處理器中需要軟硬件配合工作,才可以對虛擬存儲器提供完整的支持。

第4章:分支預(yù)測(Branch Prediction),也是取指令階段發(fā)生的事情,因為超標(biāo)量處理器的流水線一般比較深,導(dǎo)致分支指令的結(jié)果在很晚的時間才可以得到,一旦發(fā)現(xiàn)這個結(jié)果跟預(yù)想的不一樣,那么流水線中很多指令都是沒有用的,需要抹掉并從正確的地址取指令,這樣就降低了處理器的執(zhí)行效率,因此需要對分支指令使用比較準(zhǔn)確的預(yù)測算法,從而在取指令階段就得到可以提前知道分支指令的結(jié)果。

第5章:指令集體系(ISA),一旦指令在從存儲器中取出來之后,下一步就需要進(jìn)行解碼,不同的指令集需要不同的解碼方式,因此本書在介紹指令的解碼之前,首先對基本的RISC指令集進(jìn)行介紹這樣便于對后續(xù)流水線的理解。

第6章:指令解碼(Decode),在超標(biāo)量處理器中,由于每周期需要對多條指令進(jìn)行解碼,這會引入一些新的問題,比如指令之間的相關(guān)性,以及一些復(fù)雜指令的處理等,相比于普通的處理器,它的解碼過程要復(fù)雜一些,但是相比于超標(biāo)量CISC處理器這種解碼過程仍然是比較簡單的。

第7章:硬件的寄存器重命名(Register Renaming),指令經(jīng)過解碼之后,就可以得到它的源寄存器和目的寄存器了,但是為了盡量并行地執(zhí)行指令,需要消除指令之間存在的假的相關(guān)性,這些相關(guān)性都是和寄存器的名字相關(guān)的,通過使用不同的寄存器名字,可以消除這些相關(guān)性,于是在處理器內(nèi)部使用了數(shù)量多于指令級中定義的寄存器,稱之為物理寄存器,而指令集中定義的寄存器則稱為邏輯寄存器,寄存器重命名的過程就是將邏輯寄存器動態(tài)地映射到不同的物理寄存器,以消除指令之間存在的假的相關(guān)性,從而使這些指令可以并行執(zhí)行。

第8章:指令發(fā)射(Issue),當(dāng)指令經(jīng)過寄存器重命名后,就可以在處理器內(nèi)部的功能單元(FU)中執(zhí)行了。但是為了獲得更高性能,超標(biāo)量處理器多采用亂序執(zhí)行的方式,只要一條指令的操作數(shù)準(zhǔn)備好了,即使它之前的指令還沒有準(zhǔn)備好,它也可以送到FU中執(zhí)行,這種方式可以最大限度地利用處理器內(nèi)部的硬件資源,從而提高處理器的執(zhí)行效率,而發(fā)射階段正式用來實現(xiàn)此功能的。所有經(jīng)過寄存器重命名的指令都會放到一個緩存中,這個緩存稱為發(fā)射隊列(Issue Queue),在其中檢測每條指令是否已經(jīng)準(zhǔn)備好了,并按照一定算法,從那些已經(jīng)準(zhǔn)備好的指令中選擇合適的指令送到FU中執(zhí)行,這個過程就成為發(fā)射,指令到了這個階段,就變成亂序執(zhí)行了。而在此階段之前,都遵循著程序中指定的順序。

第9章:指令在功能單元的執(zhí)行(Execute),指令被發(fā)射之后,就會到相應(yīng)的FU中開始執(zhí)行,不同種類的指令需要不同的FU,在超標(biāo)量處理器中,都會使用多個FU,它們可以并行地執(zhí)行不同的指令。本章除了介紹常見的FU之外,還會介紹旁路網(wǎng)絡(luò)(Bypassing Network),它可以縮短相關(guān)指令之間執(zhí)行的時間,但是卻使處理器內(nèi)部的布線資源變得更復(fù)雜,因此現(xiàn)代的一些處理器采用了Cluster結(jié)構(gòu)來緩解這種矛盾,同時,訪問存儲器的load/store指令也需要一些特殊的方法來加速它們的執(zhí)行速度。

第10章:流水線最后階段:提交(Commit),指令經(jīng)過FU的執(zhí)行而得到結(jié)果后,并不會馬上使用這個結(jié)果對處理器轉(zhuǎn)態(tài)進(jìn)行更新,這是由于指令的執(zhí)行是按照亂序來進(jìn)行的,由于分支預(yù)測失敗(mis-prediction)和異常(exception)等原因,一條指令的結(jié)果未必是正確的。而且,為了使程序在處理器內(nèi)部的執(zhí)行看起來和程序指定的順序是一樣的(這是串行程序必須的),也需要這些亂序執(zhí)行的指令按照程序中指定的順序?qū)μ幚砥鬓D(zhuǎn)態(tài)進(jìn)行更新。為了實現(xiàn)這個功能,一條指令在FU中執(zhí)行完畢后,并不會馬上對處理器的狀態(tài)進(jìn)行更新,而是先將它的結(jié)果寫到一個緩存中,這個緩存稱為重排序緩存(Reorder Buffer, ROB)。在流水線的寄存器重命名階段,每條指令都已經(jīng)按照程序中指定的順序?qū)懙絉OB中,當(dāng)一條指令在FU中執(zhí)行完畢,就可以將結(jié)果寫到ROB對應(yīng)的地方,當(dāng)ROB中最舊的那條指令(或者幾條指令)已經(jīng)得到結(jié)果,并且不存在分支預(yù)測失敗或者異常等特殊情況,它就可以離開ROB,使用它的結(jié)果對處理器的狀態(tài)進(jìn)行更新,這個過程稱為指令的退休(retire),一旦指令經(jīng)過這個狀態(tài),它就在不能被撤銷了。

第11章:RISC處理器案例:Alpha 21264處理器。

總結(jié)

以上是生活随笔為你收集整理的超标量处理器设计 姚永斌 前言 摘录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。