ARM9五级流水线
Arm9的流水線分為:
五級流水線技術的問題:如果當前指令(A)?的目的操作數(shù)寄存器(也就是寫寄存器的操作)和下一條指令(B)?的源操作數(shù)寄存器(也就是度寄存器的操作)一致,B?指令就需要等A?回寫之后才能譯碼。這就是五級流水線中的寄存器沖突,所以應該避免寫這一種程序。為了解決這個問題,就采用了互鎖。來解決這個問題。如圖所示:
由于指令LDR的目的地址和他的下一條指令的源地址都是R9,第一條指令對R9的寫要發(fā)生在回寫階段,也只有第一條指令會寫后第二條指令才能進行譯碼。所以會產(chǎn)生上述的情況。
通常采用的解決的辦法是改變程序的順序就可以了。
例如:現(xiàn)在要實現(xiàn)的是:把0x00001000和0x00002000處的內(nèi)容放到地址是0x00008000和0x00009000的位置。
其中0x00001000里面的內(nèi)容是:??H E L L O W O R L D
實現(xiàn)的過程是:
全部拷貝過程由兩個結(jié)構(gòu)相同的循環(huán)各自獨立完成,分別實現(xiàn)兩塊數(shù)據(jù)的拷貝,并且兩個拷貝過程極為類似,分析其中一個即可。
T1~?T3?是3?個單獨的時鐘周期; T4?~?T11?是一個循環(huán),在時空圖中描述了第一次循環(huán)的執(zhí)行情況。在T12?的時候?qū)慙R?的同時,開始對循環(huán)的第一條語句進行取指,所以總的流水線周期數(shù)為3 + 10?×10 + 2?×9 = 121?。整個拷貝過程需要121?×2 + 2 = 244個時鐘周期完成。考慮到通過減少流水線的沖突可以提高流水線的執(zhí)行效率,而流水線的沖突主要來自寄存器沖突和分支指令,因此對代碼作如下兩方面調(diào)整:
①將兩個循環(huán)合并成一個循環(huán)能夠充分減少循環(huán)跳轉(zhuǎn)的次數(shù),減少跳轉(zhuǎn)帶來的流水線停滯;
②調(diào)整代碼的順序,將帶有與臨近指令不相關的寄存器插到帶有相關寄存器的指令之間,能夠充分地避免寄存器沖突導致的流水線阻塞
對代碼調(diào)整和流水線的時空圖如圖所示
。
調(diào)整之后, T1?~?T5?是5?個單獨的時鐘周期, T6~?T13是一個循環(huán),同樣在T14的時候BNE?指令在寫LR?的同時,循環(huán)的第一條指令開始取指,所以總的指令周期數(shù)為5 + 10?×10 + 2?×9 + 2= 125?。
通過兩段代碼的比較可看出:調(diào)整之前整個拷貝過程總共使用了244?個時鐘周期,調(diào)整了循環(huán)內(nèi)指令的順序后,總共使用了125?個時鐘周期就完成了同樣的工作,時鐘周期減少了119?個,縮短了119/ 244 = 48. 8 % ,效率提升十分明顯。
???因此流水線的優(yōu)化問題主要應從兩方面考慮:
①通過合并循環(huán)等方式減少分支指令的個數(shù),從而減少流水線的浪費;
②通過交換指令的順序,避免寄存器沖突造成的流水線停滯。
總結(jié)
- 上一篇: adr和ldr的区别
- 下一篇: 诺依曼体系结构、哈佛体系结构与改进型哈佛