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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【ARM】ARM流水线技术

發(fā)布時間:2024/4/24 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ARM】ARM流水线技术 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 流水線概述
    • 02. 流水線分類
    • 03. 影響流水線性能的因素
    • 04. 附錄

01. 流水線概述

處理器按照一系列步驟來執(zhí)行每一條指令,典型的步驟如下:

(1)從存儲器讀取指令(Fetch)。

(2)譯碼以鑒別它屬于哪一條指令(Decode)。

(3)從指令中提取指令的操作數(shù)(這些操作數(shù)往往存在于寄存器 Reg 中)。

(4)將操作數(shù)進行組合以得到結(jié)果或存儲器地址(ALU)。

(5)如果需要,則訪問存儲器以存儲數(shù)據(jù)(Mem)。

(6)將結(jié)果寫回到寄存器堆(Res)。

并不是所有的指令都需要上述每一個步驟,但是,多數(shù)指令需要其中的多個步驟。這些步驟往往使用不同的硬件功能,如 ALU 可能只在

第 4 步中用到。因此,如果一條指令不是在前一條指令結(jié)束之前就開始,那么在每一步驟內(nèi)處理器只有少部分的硬件在使用。

有一種方法可以明顯改善硬件資源的使用率和處理器的吞吐量,這就是在當前一條指令結(jié)束之前就開始執(zhí)行下一條指令,即通常所說的流

水線(Pipeline)技術(shù)。流水線是 RISC處理器執(zhí)行指令時采用的機制。使用流水線,可在取下一條指令的同時譯碼和執(zhí)行其他指令,從而

加快執(zhí)行的速度。可以把流水線看作是汽車生產(chǎn)線,每個階段只完成專門的處理器任務。

采用上述操作順序,處理器可以這樣來組織:當一條指令剛剛執(zhí)行完步驟(1)并轉(zhuǎn)向步驟(2)時,下一條指令就開始執(zhí)行步驟(1)。

從原理上說,這樣的流水線應該比沒有重疊的指令執(zhí)行快 6 倍,但由于硬件結(jié)構(gòu)本身的一些限制,實際情況會比理想狀態(tài)差一些。

02. 流水線分類

2.1 3級流水線

到 ARM7 為止的 ARM 處理器使用簡單的 3 級流水線,它包括下列流水線級。

(1)取指令(Fetch):從寄存器裝載一條指令。

(2)譯碼(Decode):識別被執(zhí)行的指令,并為下一個周期準備數(shù)據(jù)通路的控制信號。在這一級,指令占有譯碼邏輯,不占用數(shù)據(jù)通

路。

(3)執(zhí)行(Excute):處理指令并將結(jié)果寫回寄存器。

下圖 所示為 3 級流水線指令的執(zhí)行過程。

當處理器執(zhí)行簡單的數(shù)據(jù)處理指令時,流水線使得平均每個時鐘周期能完成1條指令。但1條指令需要3個時鐘周期來完成,因此,有3

個時鐘周期的延時(Latency),但吞吐率(Throughput)是每個周期1條指令。

2.2 5 級流水線

所有的處理器都要滿足對高性能的要求,直到 ARM7 為止,在 ARM 核中使用的 3 級流水線的性價比是很高的。但是,為了得到更高的性

能,需要重新考慮處理器的組織結(jié)構(gòu)。有兩種方法來提高性能。

(1)提高時鐘頻率。時鐘頻率的提高,必然引起指令執(zhí)行周期的縮短,所以要求簡化流水線每一級的邏輯,流水線的級數(shù)就要增加。

(2)減少每條指令的平均指令周期數(shù) CPI。這就要求重新考慮 3 級流水線 ARM 中多于 1 個流水線周期的實現(xiàn)方法,以便使其占有較少的

周期,或者減少因指令相關造成的流水線停頓,也可以將兩者結(jié)合起來。

3 級流水線 ARM 核在每一個時鐘周期都訪問存儲器,或者取指令,或者傳輸數(shù)據(jù)。只是抓緊存儲器不用的幾個周期來改善系統(tǒng)性能,效

果并不明顯。為了改善 CPI,存儲器系統(tǒng)必須在每個時鐘周期中給出多于一個的數(shù)據(jù)。方法是在每個時鐘周期從單個存儲器中給出多于 32

位數(shù)據(jù),或者為指令或數(shù)據(jù)分別設置存儲器。

基于以上原因,較高性能的 ARM 核使用了 5 級流水線,而且具有分開的指令和數(shù)據(jù)存儲器。把指令的執(zhí)行分割為 5 部分而不是 3 部分,

進而可以使用更高的時鐘頻率,分開的指令和數(shù)據(jù)存儲器使核的 CPI 明顯減少。

在 ARM9TDMI 中使用了典型的 5 級流水線,5 級流水線包括下面的流水線級。

(1)取指令(Fetch):從存儲器中取出指令,并將其放入指令流水線。

(2)譯碼(Decode):指令被譯碼,從寄存器堆中讀取寄存器操作數(shù)。在寄存器堆有 3 個操作數(shù)讀端口,因此,大多數(shù) ARM 指令能在

1 個周期內(nèi)讀取其操作數(shù)。

(3)執(zhí)行(Execute):將其中 1 個操作數(shù)移位,并在 ALU 中產(chǎn)生結(jié)果。如果指令是Load 或 Store 指令,則在 ALU 中計算存儲器的地

址。

(4)緩沖/數(shù)據(jù)(Buffer/Data):如果需要則訪問數(shù)據(jù)存儲器,否則 ALU 只是簡單地緩沖 1 個時鐘周期。

(5)回寫(Write-Back):將指令的結(jié)果回寫到寄存器堆,包括任何從寄存器讀出的數(shù)據(jù)。

下圖所示為 5 級流水線指令的執(zhí)行過程。

在程序執(zhí)行過程中,PC 值是基于 3 級流水線操作特性的。5 級流水線中提前 1 級來讀取指令操作數(shù),得到的值是不同的(PC + 4 而不是

PC + 8)。這里產(chǎn)生代碼不兼容是不容許的。但 5 級流水線 ARM 完全仿真 3 級流水線的行為。在取指級增加的 PC 值被直接送到譯碼級

的寄存器,穿過兩級之間的流水線寄存器。下一條指令的 PC + 4 等于當前指令的PC + 8,因此,未使用額外的硬件便得到了正確的R15。

2.3 13級流水線

在 Cortex-A8 中有一條 13 級的流水線,但是由于 ARM 公司沒有對其中的技術(shù)公開任何相關的細節(jié),這里只能簡單介紹一下,從經(jīng)典

ARM 系列到現(xiàn)在的 Cortex 系列,ARM 處理器的結(jié)構(gòu)在向復雜的階段發(fā)展,但沒改變的是 CPU 的取指指令和地址關系,不管是幾級流水

線,都可以按照最初的 3 級流水線的操作特性來判斷其當前的 PC 位置。這樣做主要還是為了軟件兼容性上的考慮,由此可以判斷的是,

后面 ARM 所推出的處理核心都想滿足這一特點,感興趣的讀者可以自行查閱相關資料。

03. 影響流水線性能的因素

3.1 互鎖

在典型的程序處理過程中,經(jīng)常會遇到這樣的情形,即一條指令的結(jié)果被用作下一條指令的操作數(shù)。例如,有如下指令序列:

LDR R0,[R0,#0] ADD R0,R0,R1 ;在 5 級流水線上產(chǎn)生互鎖

從例子可以看出,流水線的操作產(chǎn)生中斷,因為第 1 條指令的結(jié)果在第 2 條指令取數(shù)時還沒有產(chǎn)生。第 2 條指令必須停止,直到結(jié)果產(chǎn)

生為止。

3.2 跳轉(zhuǎn)指令

跳轉(zhuǎn)指令也會破壞流水線的行為,因為后續(xù)指令的取指步驟受到跳轉(zhuǎn)目標計算的影響,因而必須推遲。但是,當跳轉(zhuǎn)指令被譯碼時,在它

被確認是跳轉(zhuǎn)指令之前,后續(xù)的取指操作已經(jīng)發(fā)生。這樣一來,已經(jīng)被預取進入流水線的指令不得不被丟棄。如果跳轉(zhuǎn)目標的計算是在

ALU 階段完成的,那么在得到跳轉(zhuǎn)目標之前已經(jīng)有兩條指令按原有指令流讀取。顯然,只有當所有指令都依照相似的步驟執(zhí)行時,流水線

的效率達到最高。如果處理器的指令非常復雜,每一條指令的行為都與下一條指令不同,那么就很難用流水線實現(xiàn)。

04. 附錄

4.1 ARM處理器開發(fā)詳解筆記

總結(jié)

以上是生活随笔為你收集整理的【ARM】ARM流水线技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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