一文讀懂處理器流水線
掃描二維碼
隨時(shí)隨地手機(jī)看文章
本文將討論處理器的一個(gè)重要的基礎(chǔ)知識(shí):“流水線”。熟悉計(jì)算機(jī)體系結(jié)構(gòu)的讀者一定知道,言及處理器微架構(gòu),幾乎必談其流水線。處理器的流水線結(jié)構(gòu)是處理器微架構(gòu)最基本的一個(gè)要素,猶如汽車底盤對(duì)于汽車一般具有基石性的作用,它承載并決定了處理器其他微架構(gòu)的細(xì)節(jié)。本文將簡(jiǎn)要介紹處理器的一些常見流水線結(jié)構(gòu),讓您真正讀懂處理器流水線。
從經(jīng)典的五級(jí)流水線說(shuō)起
流水線的概念來(lái)源于工業(yè)制造領(lǐng)域,以汽車裝配為例來(lái)解釋流水線的工作方式,假設(shè)裝配一輛汽車需要四個(gè)步驟:
第一步?jīng)_壓:制作車身外殼和底盤等部件。
第二步焊接:將沖壓成形后的各部件焊接成車身。
第三步涂裝:將車身等主要部件清洗、化學(xué)處理、打磨、噴漆和烘干。
第四步總裝:將各部件(包括發(fā)動(dòng)機(jī)和向外采購(gòu)的零部件)組裝成車。
汽車裝配則同時(shí)對(duì)應(yīng)需要沖壓、焊接、涂裝和總裝四個(gè)工人。最簡(jiǎn)單的方法是一輛汽車依次經(jīng)過(guò)上述四個(gè)步驟裝配完成之后,下一輛汽車才開始進(jìn)行裝配,最早期的工業(yè)制造就是采用的這種原始的方式,即同一時(shí)刻只有一輛汽車在裝配。不久之后人們發(fā)現(xiàn),某個(gè)時(shí)段中一輛汽車在進(jìn)行裝配時(shí),其它三個(gè)工人都處于閑置狀態(tài),顯然這是對(duì)資源的極大浪費(fèi),于是思考出能有效利用資源的新方法,即在第一輛汽車經(jīng)過(guò)沖壓進(jìn)入焊接工序的時(shí)候,立刻開始進(jìn)行第二輛汽車的沖壓,而不是等到第一輛汽車經(jīng)過(guò)全部四個(gè)工序后才開始,這樣在后續(xù)生產(chǎn)中就能夠保證四個(gè)工人一直處于運(yùn)行狀態(tài),不會(huì)造成人員的閑置。這樣的生產(chǎ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ì)算類型都已得知,并且已經(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í)行”階段的最常見部件為算術(shù)邏輯部件運(yùn)算器(ArithmeTIc Logical Unit,ALU),作為實(shí)施具體運(yùn)算的硬件功能單元。
訪存:
存儲(chǔ)器訪問(wèn)指令往往是指令集中最重要的指令類型之一,訪存(Memory Access)是指存儲(chǔ)器訪問(wèn)指令將數(shù)據(jù)從存儲(chǔ)器中讀出,或者寫入存儲(chǔ)器的過(guò)程。
寫回:
寫回(Write-Back)是指將指令執(zhí)行的結(jié)果寫回通用寄存器組的過(guò)程。如果是普通運(yùn)算指令,該結(jié)果值來(lái)自于“執(zhí)行”階段計(jì)算的結(jié)果;如果是存儲(chǔ)器讀指令,該結(jié)果來(lái)自于“訪存”階段從存儲(chǔ)器中讀取出來(lái)的數(shù)據(jù)。
在工業(yè)制造中采用流水線可以提高單位時(shí)間的生產(chǎn)量,同樣在處理器中采用流水線設(shè)計(jì)也有助于提高處理器的性能。以上述的五級(jí)流水線為例,由于前一條指令在完成了“取指”進(jìn)入“譯碼”階段后,下一條指令馬上就可以進(jìn)入“取指”階段,依次類推,如圖2所示,如果流水線沒(méi)有停頓,理論上可以取得每個(gè)時(shí)鐘周期都完成一條指令的性能。