ARM體系結(jié)構(gòu)之:流水線
2.2 流水線
2.2.1 流水線的概念與原理
處理器按照一系列步驟來執(zhí)行每一條指令。典型的步驟如下:
① 從存儲器讀取指令(fetch);
② 譯碼以鑒別它是屬于哪一條指令(dec);
③ 從指令中提取指令的操作數(shù)(這些操作數(shù)往往存在于寄存器中)(reg);
④ 將操作數(shù)進行組合以得到結(jié)果或存儲器地址(ALU);
⑤ 如果需要,則訪問存儲器以存儲數(shù)據(jù)(mem);
⑥ 將結(jié)果寫回到寄存器堆(res)。
并不是所有的指令都需要上述每一個步驟,但是,多數(shù)指令需要其中的多個步驟。這些步驟往往使用不同的硬件功能,例如,ALU可能只在第4步中用到。因此,如果一條指令不是在前一條指令結(jié)束之前就開始,那么在每一步驟內(nèi)處理器只有少部分的硬件在使用。
有一種方法可以明顯改善硬件資源的使用率和處理器的吞吐量,這就是當前一條指令結(jié)束之前就開始執(zhí)行下一條指令,即通常所說的流水線(Pipeline)技術(shù)。流水線是RISC處理器執(zhí)行指令時采用的機制。使用流水線,可在取下一條指令的同時譯碼和執(zhí)行其他指令,從而加快執(zhí)行的速度??梢园蚜魉€看作是汽車生產(chǎn)線,每個階段只完成專門的處理器任務。
采用上述操作順序,處理器可以這樣來組織:當一條指令剛剛執(zhí)行完步驟①并轉(zhuǎn)向步驟②時,下一條指令就開始執(zhí)行步驟①。圖2.1說明了這個過程。從原理上說,這樣的流水線應該比沒有重疊的指令執(zhí)行快6倍,但由于硬件結(jié)構(gòu)本身的一些限制,實際情況會比理想狀態(tài)差一些。
2.2.2 流水線的分類
從Acorn Computer公司在1983~1985年間開發(fā)的第一個3µm器件,到ARM公司在1990~1995年間開發(fā)的ARM6和ARM7,ARM整數(shù)處理器核的組織結(jié)構(gòu)變化很小,這些處理器都是采用3級流水線,而這一時期CMOS工藝的發(fā)展,幾乎將特征尺寸減少了一個數(shù)量級。因此,核的性能提高很快,但基本的操作原理大部分沒有變化。
圖2.1 流水線的指令執(zhí)行過程
從1995年以來,ARM公司推出了幾個新的ARM核。它們采用5級流水線和哈佛架構(gòu),獲得了顯著的高性能。例如,ARM9增加了存儲器訪問段和回寫段,這使得ARM9的處理能力可達到平均1.1 Dhrystone1 MISP/MHz,與ARM7相比,指令吞吐量提高了約13%。
注意 | 在許多高性能處理器內(nèi)部,一級Cache一般都設置有兩個,其中,一個是指令Cache,另一個是數(shù)據(jù)Cache。這樣可以減少取指令和讀操作數(shù)的訪問沖突,這種結(jié)構(gòu)被稱為哈佛架構(gòu)。 把主存儲器分成兩個獨立編址的存儲器,一個專門存放指令,稱為指令存儲器,簡稱指存;另一個專門存放操作數(shù),稱為數(shù)據(jù)存儲器,簡稱數(shù)存。兩個存儲器可以同時訪問,這樣就解決了取指令和讀操作數(shù)的沖突。如果在此基礎上規(guī)定在執(zhí)行指令階段產(chǎn)生的運算結(jié)果只寫到通用寄存器中,不寫到主存,那么取指令、分析指令和執(zhí)行指令就可以同時進行。 |
ARM10更是把流水線增加到6級。ARM10的平均處理能力達到1.3 Dhrystone MISP/MHz,與ARM7相比,指令吞吐量提高了約34%。
注意 | 雖然ARM9和ARM10的流水線不同,但它們都使用了與ARM7相同的流水線執(zhí)行機制,因此ARM7上的代碼也可以在ARM9和ARM10上運行。 |
存儲器相關(guān)文章:存儲器原理
評論