ARM體系結構之:流水線(xiàn)
在圖2.6中的指令序列中,處理器的每個(gè)邏輯單元在每個(gè)指令都是活動(dòng)的??梢钥闯?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/流水線(xiàn)">流水線(xiàn)的執行與存儲器訪(fǎng)問(wèn)密切相關(guān)。存儲器訪(fǎng)問(wèn)限制了程序執行必須花費的指令周期數。
ARM的流水線(xiàn)執行模式導致了一個(gè)結果,就是程序計數器PC(對使用者而言為r15)必須在當前指令執行前計數。例如,指令在其第一個(gè)周期為下下條指令取指,這就意味著(zhù)PC必須指向當前指令的后8個(gè)字節(其后的第2條指令)。
當程序中必須用到PC時(shí),程序員要特別注意這一點(diǎn)。大多數正常情況下,不用考慮這一點(diǎn),它由匯編器或編譯器自動(dòng)處理這些細節。
例2.3顯示了流水線(xiàn)下程序計數器PC的使用情況。
【例2.3】
指令序列為:
0x8000 LDR pc,[pc,#0]
0x8004 NOP
0x8008 DCD jumpAdress
當指令LDR處于執行階段時(shí),pc=address+8即0x8008。
2.5級流水線(xiàn)ARM組織
所有的處理器都要滿(mǎn)足對高性能的要求。直到ARM7為止,在A(yíng)RM核中使用的3級流水線(xiàn)的性?xún)r(jià)比是很高的。但是,為了得到更高的性能,需要重新考慮處理器的組織結構。執行一個(gè)給定的程序需要的時(shí)間由下式?jīng)Q定:
Tprog = (Ninst×CPI)/ fclk
式中:
Ninst:表示在程序中執行的ARM指令數;
CPI:表示每條指令的平均時(shí)鐘周期;
fclk:表示處理器的時(shí)鐘頻率。
因為對給定程序(假設使用給定的優(yōu)化集并用給定的編譯器來(lái)編譯)Ninst是常數,所以,僅有兩種方法來(lái)提供性能。
第一,提高時(shí)鐘頻率。時(shí)鐘頻率的提高,必然引起指令執行周期的縮短,所以要求簡(jiǎn)化流水線(xiàn)每一級的邏輯,流水線(xiàn)的級數就要增加。
第二,減少每條指令的平均指令周期數CPI。這就要求重新考慮3級流水線(xiàn)ARM中多于1個(gè)流水線(xiàn)周期的實(shí)現方法,以便使其占有較少的周期,或者減少因指令相關(guān)造成的流水線(xiàn)停頓,也可以將兩者結合起來(lái)。
3級流水線(xiàn)ARM核在每一個(gè)時(shí)鐘周期都訪(fǎng)問(wèn)存儲器,或者取指令,或者傳輸數據。只是抓緊存儲器不用的幾個(gè)周期來(lái)改善系統系統性能,效果是不明顯的。為了改善CPI,存儲器系統必須在每個(gè)時(shí)鐘周期中給出多于一個(gè)的數據。方法是在每個(gè)時(shí)鐘周期從單個(gè)存儲器中給出多于32位數據,或者為指令或數據分別設置存儲器。
基于以上原因,較高性能的ARM核使用了5級流水線(xiàn),而且具有分開(kāi)的指令和數據存儲器。把指令的執行分割為5部分而不是3部分,進(jìn)而可以使用更高的時(shí)鐘頻率,分開(kāi)的指令和數據存儲器使核的CPI明顯減少。
注意 | 分開(kāi)的指令和數據存儲器。一般是分開(kāi)的Cache連接到統一的指令和數據存儲器上。 |
存儲器相關(guān)文章:存儲器原理
評論