国产肉体XXXX裸体137大胆,国产成人久久精品流白浆,国产乱子伦视频在线观看,无码中文字幕免费一区二区三区 国产成人手机在线-午夜国产精品无套-swag国产精品-国产毛片久久国产

新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 關(guān)于處理器流水線(xiàn),此流水線(xiàn)非彼流水線(xiàn)

關(guān)于處理器流水線(xiàn),此流水線(xiàn)非彼流水線(xiàn)

作者: 時(shí)間:2018-03-27 來(lái)源:網(wǎng)絡(luò) 收藏

  本文將討論的一個(gè)重要的基礎(chǔ)知識(shí):“”。熟悉計(jì)算機(jī)體系結(jié)構(gòu)的讀者一定知道,言及微架構(gòu),幾乎必談其。結(jié)構(gòu)是處理器微架構(gòu)最基本的一個(gè)要素,猶如汽車(chē)底盤(pán)對(duì)于汽車(chē)一般具有基石性的作用,它承載并決定了處理器其他微架構(gòu)的細(xì)節(jié)。本文將簡(jiǎn)要介紹處理器的一些常見(jiàn)流水線(xiàn)結(jié)構(gòu),讓您真正讀懂處理器流水線(xiàn)。

本文引用地址:http://m.ptau.cn/article/201803/377449.htm

  1 從經(jīng)典的五級(jí)流水線(xiàn)說(shuō)起

  流水線(xiàn)的概念來(lái)源于工業(yè)制造領(lǐng)域,以汽車(chē)裝配為例來(lái)解釋流水線(xiàn)的工作方式,假設(shè)裝配一輛汽車(chē)需要四個(gè)步驟:

  第一步?jīng)_壓:制作車(chē)身外殼和底盤(pán)等部件。

  第二步焊接:將沖壓成形后的各部件焊接成車(chē)身。

  第三步涂裝:將車(chē)身等主要部件清洗、化學(xué)處理、打磨、噴漆和烘干。

  第四步總裝:將各部件(包括發(fā)動(dòng)機(jī)和向外采購(gòu)的零部件)組裝成車(chē)。

  汽車(chē)裝配則同時(shí)對(duì)應(yīng)需要沖壓、焊接、涂裝和總裝四個(gè)工人。最簡(jiǎn)單的方法是一輛汽車(chē)依次經(jīng)過(guò)上述四個(gè)步驟裝配完成之后,下一輛汽車(chē)才開(kāi)始進(jìn)行裝配,最早期的工業(yè)制造就是采用的這種原始的方式,即同一時(shí)刻只有一輛汽車(chē)在裝配。不久之后人們發(fā)現(xiàn),某個(gè)時(shí)段中一輛汽車(chē)在進(jìn)行裝配時(shí),其它三個(gè)工人都處于閑置狀態(tài),顯然這是對(duì)資源的極大浪費(fèi),于是思考出能有效利用資源的新方法,即在第一輛汽車(chē)經(jīng)過(guò)沖壓進(jìn)入焊接工序的時(shí)候,立刻開(kāi)始進(jìn)行第二輛汽車(chē)的沖壓,而不是等到第一輛汽車(chē)經(jīng)過(guò)全部四個(gè)工序后才開(kāi)始,這樣在后續(xù)生產(chǎn)中就能夠保證四個(gè)工人一直處于運(yùn)行狀態(tài),不會(huì)造成人員的閑置。這樣的生產(chǎn)方式就好似流水川流不息,因此被稱(chēng)為流水線(xiàn)。

  計(jì)算機(jī)體系結(jié)構(gòu)教材中被提及最多的經(jīng)典MIPS五級(jí)流水線(xiàn)如圖1所示。在此流水線(xiàn)中一條指令的生命周期分為:

  取指:

  指令取指(Instruction Fetch)是指將指令從存儲(chǔ)器中讀取出來(lái)的過(guò)程。

  譯碼:

  指令譯碼(Instruction Decode)是指將存儲(chǔ)器中取出的指令進(jìn)行翻譯的過(guò)程。經(jīng)過(guò)譯碼之后得到指令需要的操作數(shù)寄存器索引,可以使用此索引從通用寄存器組(Register File,Regfile)中將操作數(shù)讀出。

  執(zhí)行:

  指令譯碼之后所需要進(jìn)行的計(jì)算類(lèi)型都已得知,并且已經(jīng)從通用寄存器組中讀取出了所需的操作數(shù),那么接下來(lái)便進(jìn)行指令執(zhí)行(Instruction Execute)。指令執(zhí)行是指對(duì)指令進(jìn)行真正運(yùn)算的過(guò)程。譬如,如果指令是一條加法運(yùn)算指令,則對(duì)操作數(shù)進(jìn)行加法操作;如果是減法運(yùn)算指令,則進(jìn)行減法操作。

  在“執(zhí)行”階段的最常見(jiàn)部件為算術(shù)邏輯部件運(yùn)算器(Arithmetic Logical Unit,ALU),作為實(shí)施具體運(yùn)算的硬件功能單元。

  訪存:

  存儲(chǔ)器訪問(wèn)指令往往是指令集中最重要的指令類(lèi)型之一,訪存(Memory Access)是指存儲(chǔ)器訪問(wèn)指令將數(shù)據(jù)從存儲(chǔ)器中讀出,或者寫(xiě)入存儲(chǔ)器的過(guò)程。

  寫(xiě)回:

  寫(xiě)回(Write-Back)是指將指令執(zhí)行的結(jié)果寫(xiě)回通用寄存器組的過(guò)程。如果是普通運(yùn)算指令,該結(jié)果值來(lái)自于“執(zhí)行”階段計(jì)算的結(jié)果;如果是存儲(chǔ)器讀指令,該結(jié)果來(lái)自于“訪存”階段從存儲(chǔ)器中讀取出來(lái)的數(shù)據(jù)。

  在工業(yè)制造中采用流水線(xiàn)可以提高單位時(shí)間的生產(chǎn)量,同樣在處理器中采用流水線(xiàn)設(shè)計(jì)也有助于提高處理器的性能。以上述的五級(jí)流水線(xiàn)為例,由于前一條指令在完成了“取指”進(jìn)入“譯碼”階段后,下一條指令馬上就可以進(jìn)入“取指”階段,依次類(lèi)推,如圖2所示,如果流水線(xiàn)沒(méi)有停頓,理論上可以取得每個(gè)時(shí)鐘周期都完成一條指令的性能。


  圖1 MIPS五級(jí)流水線(xiàn)結(jié)構(gòu)圖


  圖2 MIPS五級(jí)流水線(xiàn)運(yùn)行圖

  2 可不可以不要流水線(xiàn)——流水線(xiàn)和狀態(tài)機(jī)的關(guān)系

  言及處理器微架構(gòu),幾乎必談流水線(xiàn)。那么,我們能否挑戰(zhàn)一下權(quán)威提出一個(gè)有意思的問(wèn)題:處理器難道就一定需要流水線(xiàn)嗎?可否不要流水線(xiàn)呢?

  在回答這個(gè)問(wèn)題之前,我們先探討下流水線(xiàn)的本質(zhì):

  流水線(xiàn)并不限于處理器設(shè)計(jì),在所有的ASIC電路實(shí)現(xiàn)中都廣泛采用流水線(xiàn)的思想。流水線(xiàn)本質(zhì)上可以理解為是一種以面積換性能(Trade Area for Performance)、以空間換時(shí)間(Trade Space for Timing)的手段。

  譬如,以5級(jí)流水線(xiàn)為例,其增加了5組寄存器,每一個(gè)流水線(xiàn)級(jí)數(shù)內(nèi)部都有各自的組合邏輯數(shù)據(jù)通路,彼此之間沒(méi)有復(fù)用資源,因此,其面積開(kāi)銷(xiāo)是比較大的,但是由于可以讓不同的流水線(xiàn)級(jí)數(shù)同時(shí)做不同的事情,而達(dá)到流水的效果,提高了性能,優(yōu)化了時(shí)序,增加了吞吐率。

  與流水線(xiàn)相對(duì)應(yīng)的另外一種策略是狀態(tài)機(jī),狀態(tài)機(jī)是流水線(xiàn)的“取反”,同樣在所有的ASIC電路實(shí)現(xiàn)中都廣泛采用。狀態(tài)機(jī)本質(zhì)上可以理解為是一種以性能換面積(Trade Performance for Area)、以時(shí)間換空間(Trade Timing for Space)的手段。

  “流水線(xiàn)”和“狀態(tài)機(jī)”的關(guān)系,還有一種說(shuō)法稱(chēng)之為“展開(kāi)”和“折疊”的關(guān)系。本質(zhì)上都是一種電路設(shè)計(jì)時(shí),選擇側(cè)重時(shí)間(性能)還是空間(面積)的一種取舍。

  通過(guò)上述分析,假設(shè)處理器不采用流水線(xiàn),而是使用一個(gè)狀態(tài)機(jī)來(lái)完成,則需要多個(gè)時(shí)鐘周期才能完成一條指令的所有操作,每個(gè)時(shí)鐘周期完成狀態(tài)機(jī)的一個(gè)狀態(tài)(譬如分別為取指、譯碼、執(zhí)行、訪存和寫(xiě)回)。通過(guò)使用狀態(tài)機(jī),可以省掉上述流水線(xiàn)中的寄存器開(kāi)銷(xiāo),還可以復(fù)用組合邏輯數(shù)據(jù)通路,因此面積開(kāi)銷(xiāo)比較小,但是每條指令都需要5個(gè)周期才能完成,吞吐率和性能很差。

  談及此處,就不得不提及8位單片機(jī)時(shí)代的傳奇老炮兒8051內(nèi)核,早期原始的8051內(nèi)核微架構(gòu)就是采用了類(lèi)似狀態(tài)機(jī)的實(shí)現(xiàn)方式而不是流水線(xiàn)。因此,回到最開(kāi)始我們提出的問(wèn)題,處理器可否不要流水線(xiàn),答案是:當(dāng)然可以,傳奇老炮兒8051內(nèi)核就沒(méi)有流水線(xiàn)。

  所以說(shuō)從功能能上來(lái)講,處理器完全可以不使用流水線(xiàn),而使用狀態(tài)機(jī)的方式來(lái)實(shí)現(xiàn),只不過(guò)由于這種方式性能比較差,在現(xiàn)代處理器設(shè)計(jì)中比較罕見(jiàn)而已。

  3 深處種菱淺種稻,不深不淺種荷花——流水線(xiàn)的深度

  流水線(xiàn)的級(jí)數(shù)(又稱(chēng)深度)多少最好呢?要回答這個(gè)問(wèn)題,就需要了解流水線(xiàn)的深淺各自的優(yōu)劣。此處有一個(gè)常見(jiàn)面試題,題目便是:處理器的流水線(xiàn)是否越深越好?在此我們給出答案:

  早期的經(jīng)典流水線(xiàn)是5級(jí)流水線(xiàn),分別為取指、譯碼、執(zhí)行、訪存和寫(xiě)回。現(xiàn)代的處理器往往具有極深的流水線(xiàn)級(jí)數(shù),譬如高達(dá)十幾級(jí),或者二十幾級(jí)的深度。流水線(xiàn)就像一根黃瓜,切五刀下去得到的每一截長(zhǎng)度和切二十到下去得到的每一截長(zhǎng)度肯定是不一樣的。當(dāng)流水線(xiàn)的級(jí)數(shù)越多,那么意味著流水線(xiàn)被切的很細(xì),每一級(jí)流水線(xiàn)內(nèi)容納的硬件邏輯便越少,熟悉數(shù)字同步電路設(shè)計(jì)的讀者應(yīng)該比較熟悉,在兩級(jí)寄存器(每一級(jí)流水線(xiàn)由寄存器組成)之間的硬件邏輯越少,則意味能夠運(yùn)行到更高的主頻。因此現(xiàn)代的處理器流水線(xiàn)極深主要是由于處理器追求高頻的指標(biāo)所驅(qū)使,高端的ARM Cortex-A系列由于有十幾級(jí)的流水線(xiàn),所以能夠運(yùn)行到高達(dá)2GHz的主頻,而Intel的x86處理器甚至采用幾十級(jí)的流水線(xiàn)深度將主頻推到3-4GHz的高度。主頻越高也意味著流水線(xiàn)的吞吐率越高從而性能越高,這是流水線(xiàn)加深的正面意義。

  由于每一級(jí)流水線(xiàn)都由寄存器組成,那么意味著更多的流水線(xiàn)級(jí)數(shù)要消耗更多的寄存器,也意味著更多的面積開(kāi)銷(xiāo)。這是流水線(xiàn)加深的負(fù)面意義。

  同時(shí)流水線(xiàn)越深,由于每一級(jí)流水線(xiàn)需要進(jìn)行握手,流水線(xiàn)最后一級(jí)的反壓信號(hào)可能會(huì)一直串?dāng)_到最前一級(jí)造成嚴(yán)重的時(shí)序問(wèn)題,需要使用一些比較高級(jí)的技巧來(lái)解決此類(lèi)反壓時(shí)序問(wèn)題。這是流水線(xiàn)加深的負(fù)面意義。

  較深的處理器流水線(xiàn)還有一個(gè)問(wèn)題,由于在流水線(xiàn)的取指令階段無(wú)法得知條件跳轉(zhuǎn)的結(jié)果是跳還是不跳,因此只能進(jìn)行預(yù)測(cè),而到了流水線(xiàn)的末端才能夠通過(guò)實(shí)際的運(yùn)算得知該分支是真的該跳還是不該跳,如果發(fā)現(xiàn)真實(shí)的結(jié)果(譬如該跳)與之前預(yù)測(cè)的結(jié)果(譬如預(yù)測(cè)為不跳)不相符,則意味著預(yù)測(cè)失敗,需要將所有預(yù)取的錯(cuò)誤指令流全部丟棄掉,而重新取正確的指令流,這個(gè)過(guò)程叫做流水線(xiàn)沖刷(Pipeline Flush),雖然可以使用分支預(yù)測(cè)器來(lái)保證前期的分支預(yù)測(cè)盡可能的準(zhǔn)確,但是也無(wú)法做到萬(wàn)無(wú)一失。那么,流水線(xiàn)的深度越深,則意味著已經(jīng)預(yù)取了很多的錯(cuò)誤指令流,需要將其全部拋棄然后重啟,不僅白白的浪費(fèi)了功耗,還造成了性能的損失。流水線(xiàn)越深則意味著浪費(fèi)和損失越嚴(yán)重,流水線(xiàn)越淺則浪費(fèi)和損失越少。這是流水線(xiàn)加深的另一個(gè)主要的負(fù)面意義。

  綜上,所謂深處種菱淺種稻,不深不淺種荷花,流水線(xiàn)的不同深度皆有其優(yōu)缺點(diǎn),需要根據(jù)不同的應(yīng)用背景合理地進(jìn)行選擇。

  由于處理器流水線(xiàn)深淺的不同優(yōu)劣,根據(jù)不同的應(yīng)用場(chǎng)景,當(dāng)今處理器的流水線(xiàn)深度在向著兩個(gè)不同的極端發(fā)展,一方面級(jí)數(shù)越來(lái)越深,另一方面又越來(lái)越淺,下面我們結(jié)合不同的商用處理器例子予以探討。

  4 向上生長(zhǎng)——越來(lái)越深的流水線(xiàn)

  現(xiàn)代的高性能處理器相比最早期的處理器明顯存在著流水線(xiàn)越來(lái)越深的現(xiàn)象,其驅(qū)動(dòng)因素很簡(jiǎn)單,那就是追求更高的主頻以獲取更高的吞吐率和性能。

  以最知名的ARM Cortex-A系列處理器IP為例,Cortex-A7主打的低功耗前提下的能效比,其流水線(xiàn)級(jí)數(shù)為8級(jí);而Cortex-A15主打高性能,其流水線(xiàn)深度為15級(jí)。

  當(dāng)然流水線(xiàn)越來(lái)越深也需有其限度,曾有某些商業(yè)處理器產(chǎn)品一味地追求極端流水線(xiàn)深度(達(dá)到幾十級(jí))反而遭遇失敗的例子。目前最新的Intel處理器和ARM 高性能Cortex-A系列處理器的流水線(xiàn)深度都在十幾級(jí)的范圍左右。

  5 向下生長(zhǎng)——越來(lái)越淺的流水線(xiàn)

  現(xiàn)代低功耗處理器的另外一個(gè)趨勢(shì)也存在著流水線(xiàn)越來(lái)越淺的現(xiàn)象,其驅(qū)動(dòng)因素同樣很簡(jiǎn)單,那就是在性能夠用的前提下追求極低的功耗。

  以最知名的ARM Cortex-M系列處理器IP為例,2004年發(fā)布的Cortex-M3處理器核的流水線(xiàn)級(jí)數(shù)只有3級(jí),2009年發(fā)布的Cortex-M0處理器核的流水線(xiàn)級(jí)數(shù)也只有3級(jí),而2012年發(fā)布的Cortex-M0+處理器核的流水線(xiàn)級(jí)數(shù)反而只有2級(jí),變得越來(lái)越少了,正因?yàn)榇薃RM也宣傳Cortex-M0+處理器核為世界上能效比最高的處理器核。

  2級(jí)的流水線(xiàn)深度似乎已經(jīng)淺到底了,讀者可能會(huì)問(wèn),那是不是接下來(lái)要發(fā)布只有1級(jí)深度的流水線(xiàn)了?當(dāng)深度變?yōu)?之后也就談不上流水線(xiàn)了,其整體也就變成一個(gè)單周期的組合邏輯了,在眾多的計(jì)算機(jī)體系結(jié)構(gòu)教學(xué)案例中我們確實(shí)見(jiàn)到過(guò)很多流水線(xiàn)深度為1的處理器核,從功能上來(lái)說(shuō)其仍然可以完成處理器的所有功能,只不過(guò)主頻相當(dāng)之低而已。

  6 處理器流水線(xiàn)中的反壓

  隨著流水線(xiàn)越深,由于每一級(jí)流水線(xiàn)都需要進(jìn)行握手,流水線(xiàn)最后一級(jí)的反壓信號(hào)可能會(huì)一直串?dāng)_到最前一級(jí)造成嚴(yán)重的反壓(Back-pressure)時(shí)序問(wèn)題,需要使用一些比較高級(jí)的技巧來(lái)解決這些時(shí)序問(wèn)題。在現(xiàn)代處理器設(shè)計(jì)中,通常有如下若干種方法:

  取消握手:此方法能夠徹底杜絕反壓的發(fā)生,時(shí)序表現(xiàn)非常好。但是取消握手即意味著流水線(xiàn)中的每一級(jí)并不會(huì)與其下一級(jí)進(jìn)行握手,因此可能會(huì)造成功能錯(cuò)誤或者指令丟失。因此這種方法往往需要配合其他的機(jī)制,譬如重執(zhí)行(Replay),預(yù)留大緩存等等。簡(jiǎn)而言之,此方法比較激進(jìn),輔以一系列其他的配置機(jī)制,硬件總體的復(fù)雜度會(huì)比較大。只有在一些非常高級(jí)的處理器設(shè)計(jì)中才會(huì)用到。

  加入乒乓緩存:加入乒乓緩存(Ping-pong Buffer)是一種用面積換時(shí)序的方法,也是解決反壓最簡(jiǎn)單的方法。通過(guò)使用乒乓緩存(有兩個(gè)表項(xiàng))替換普通的一級(jí)流水線(xiàn)(只有一個(gè)表項(xiàng)),可以使得此級(jí)流水線(xiàn)向上一級(jí)流水線(xiàn)的握手接受信號(hào)僅僅需要關(guān)注乒乓緩存中是否有一個(gè)以上有空的表項(xiàng)即可,而無(wú)需將下一級(jí)的握手接受信號(hào)串?dāng)_至上一級(jí)。

  加入前向旁路緩存:加入前向旁路緩存(Forward Bypass Buffer)也是一種用面積換時(shí)序的方法,這是在解決反壓時(shí)一種非常巧妙的方法。旁路緩存僅有一個(gè)表項(xiàng),由于增加了這一個(gè)額外的緩存表項(xiàng),可以將后向的握手信號(hào)時(shí)序路徑砍斷,但是對(duì)前向路徑不產(chǎn)生影響,因此,可以廣泛使用于握手接口。蜂鳥(niǎo)E200即于設(shè)計(jì)中采用此方法,有效地解決了多處反壓造成的時(shí)序瓶頸。

  以上解決反壓的技術(shù)方法,不僅在處理器設(shè)計(jì)中能夠用到,而且在普通的ASIC電路設(shè)計(jì)中也會(huì)經(jīng)常用到。

  7 處理器流水線(xiàn)中的沖突

  處理器的流水線(xiàn)設(shè)計(jì)中另外一個(gè)問(wèn)題便是流水線(xiàn)中的沖突(Hazards),主要分為資源沖突和數(shù)據(jù)沖突。

  7.1 流水線(xiàn)中的資源沖突

  資源沖突是指流水線(xiàn)中硬件資源的沖突,最常見(jiàn)的是運(yùn)算單元的沖突,譬如除法器需要多個(gè)時(shí)鐘周期才能完成運(yùn)算,因此在前一條除法指令運(yùn)算完成之前,新的除法指令如果也需要除法器則會(huì)存在著資源沖突。在處理器的流水線(xiàn)中硬件資源沖突種類(lèi)還有較多,在此不做一一贅述。解決資源沖突的方法可以通過(guò)復(fù)制硬件資源或者流水線(xiàn)停頓等待硬件資源的方法解決。

  7.2 流水線(xiàn)中的數(shù)據(jù)沖突

  數(shù)據(jù)沖突是指不同的指令之間的操作數(shù)存在數(shù)據(jù)相關(guān)性造成的沖突。常見(jiàn)的數(shù)據(jù)相關(guān)性包括:

  WAR(Write-After-Read)相關(guān)性,又稱(chēng)先讀后寫(xiě)相關(guān)性:表示“后序執(zhí)行的指令需要寫(xiě)回的結(jié)果寄存器索引”與“前序執(zhí)行的指令需要讀取的源操作數(shù)寄存器索引”相同造成的數(shù)據(jù)相關(guān)性。因此,從理論上來(lái)講,在流水線(xiàn)中“后序指令”一定不能比和它有WAR相關(guān)性的“前序指令”先執(zhí)行,否則“后序指令”先寫(xiě)回了結(jié)果至通用寄存器組中,“前序指令”再讀取操作數(shù)時(shí),就會(huì)讀到錯(cuò)誤的數(shù)值。

  WAW(Write-After-Write)相關(guān)性,又稱(chēng)先寫(xiě)后寫(xiě)相關(guān)性:表示“后序執(zhí)行的指令需要寫(xiě)回的結(jié)果寄存器索引”與“前序執(zhí)行的指令需要寫(xiě)回的結(jié)果寄存器索引”相同造成的數(shù)據(jù)相關(guān)性。因此,從理論上來(lái)講,在流水線(xiàn)中“后序指令”一定不能比和它有WAW相關(guān)性的“前序指令”先執(zhí)行,否則“后序指令”先寫(xiě)回了結(jié)果至通用寄存器組中,“前序指令”再寫(xiě)回結(jié)果至通用寄存器組中就會(huì)將其覆蓋。

  RAW(Read-After-Write)相關(guān)性,又稱(chēng)先寫(xiě)后讀相關(guān)性:表示“后序執(zhí)行的指令需要讀取的源操作數(shù)寄存器索引”與“前序執(zhí)行的指令需要寫(xiě)回的結(jié)果寄存器索引”相同造成的數(shù)據(jù)相關(guān)性。因此,從理論上來(lái)講,在流水線(xiàn)中“后序指令”一定不能比和它有RAW相關(guān)性的“前序指令”先執(zhí)行,否則“后序指令”便會(huì)從通用寄存器組中讀回錯(cuò)誤的源操作數(shù)。

  以上的三種相關(guān)性中,RAW屬于真數(shù)據(jù)相關(guān)。

  解決數(shù)據(jù)沖突的常見(jiàn)方法如下:

  WAW和WAR可以通過(guò)寄存器重命名的方法將相關(guān)性去除,從而無(wú)需擔(dān)心其執(zhí)行順序。

  寄存器重命名技術(shù)在Tomasulo算法中通過(guò)保留站和ROB(Re-Order Buffer)完成,或者采用純物理寄存器(而不用ROB)的方式完成。

  之所以RAW稱(chēng)之為真數(shù)據(jù)相關(guān),是因?yàn)槠錄](méi)有辦法通過(guò)寄存器重命名的方法將相關(guān)性去除。一旦產(chǎn)生RAW相關(guān)性,后序的指令一定要使用和它有RAW數(shù)據(jù)相關(guān)性的前序指令執(zhí)行完成的結(jié)果,從而造成流水線(xiàn)的等待停頓。為了能夠盡可能的減少流水線(xiàn)停頓帶來(lái)的性能損失,可以使用“動(dòng)態(tài)調(diào)度”的方法。動(dòng)態(tài)調(diào)度的思想本質(zhì)上可以歸結(jié)于以下方面:

  一方面采用數(shù)據(jù)旁路傳播(Data Bypass and Forward)技術(shù)盡可能的讓前序指令的計(jì)算結(jié)果更快的旁路傳播給后序相關(guān)指令的操作數(shù);

  另一方面盡可能的讓后序相關(guān)指令在等待的過(guò)程中不阻塞流水線(xiàn)而讓其他無(wú)關(guān)的指令能夠繼續(xù)順利執(zhí)行。

  早期的Tomasulo算法中通過(guò)保留站可以達(dá)到這兩方面的功效,但是保留站由于保存了操作數(shù)無(wú)法做到很大的深度(否則面積和時(shí)序的開(kāi)銷(xiāo)巨大)。

  最新的高性能處理器普遍采用在每個(gè)運(yùn)算單元前配置亂序發(fā)射隊(duì)列(Issue Queue)的方式,發(fā)射隊(duì)列僅追蹤RAW相關(guān)性而并不存放操作數(shù),因此可以做的很深(譬如16個(gè)表項(xiàng))。在發(fā)射隊(duì)列中的指令一旦相關(guān)性解除之后,再?gòu)陌l(fā)射隊(duì)列中發(fā)射出來(lái)讀取物理寄存器組(Physical Register File),然后發(fā)送給運(yùn)算單元開(kāi)始計(jì)算。

  有關(guān)處理器的數(shù)據(jù)相關(guān)性問(wèn)題和包括動(dòng)態(tài)調(diào)度技術(shù)在內(nèi)的解決方法,如果闡述清楚幾乎可以單獨(dú)成書(shū),本文限于篇幅只能提綱挈領(lǐng)式的予以簡(jiǎn)述,感興趣的讀者可以自行查閱。

  本文試圖以最通俗化的方式對(duì)處理器流水線(xiàn)進(jìn)行介紹,首先討論了處理器流水線(xiàn)概述,包括:從經(jīng)典的五級(jí)流水線(xiàn)說(shuō)起、可不可以不要流水線(xiàn)——流水線(xiàn)和狀態(tài)機(jī)的關(guān)系、深處種菱淺種稻,不深不淺種荷花——流水線(xiàn)的深度、向上生長(zhǎng)——越來(lái)越深的流水線(xiàn)、向下生長(zhǎng)——越來(lái)越淺的流水線(xiàn)。然后本文介紹了處理器流水線(xiàn)設(shè)計(jì)的兩大難題及其多種解決方法:處理器流水線(xiàn)中的反壓、處理器流水線(xiàn)中的沖突。





關(guān)鍵詞: 處理器 流水線(xiàn)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉