一.實驗目的
(1)加深對指令調度技術的理解。
(2)加深對延遲分支技術的理解。
(3)熟練掌握用指令調度技術解決流水線中的數據衝突的方法。
(4)進一步理解指令調度技術對CPU性能的改進。
(5)進一步理解延遲分支技術對CPU性能的改進。
MIPS 360雲盤分享https://yunpan.cn/cRLzwTkYc3TEt 訪問密碼 f9a6
二.實驗內容和步驟:
(1)、啓動MIPSsim。
(2)、根據前面的相關知識中關於流水線各段操作的描述,進一步理解流水線窗口中各段的功能,掌握各流水寄存器的含義。
(3)、選擇“配置”->“流水方式”選項,使模擬器工作於流水方式下。
(4)、用指令調度技術解決流水線中的數據衝突。
1)啓動MIPSsim。
2)加載schedule.s。
3)關閉定向功能。
4)執行所載入的程序。通過查看統計數據和時鐘週期圖,找出並記錄程序執行過程中各種衝突發生的次數、發生衝突的指令組合以及程序執行的總時鐘週期數。
.text
main:
ADDIU $r1,$r0,A
LW $r2,0($r1)
ADD $r4,$r0,$r2
SW $r4,0($r1)
LW $r6,4($r1)
ADD $r8,$r6,$r1
MUL $r12,$r10,$r1
ADD $r16,$r12,$r1
ADD $r18,$r16,$r1
SW $r18,16($r1)
LW $r20,8($r1)
MUL $r22,$r20,$r14
MUL $r24,$r26,$r14
TEQ $r0,$r0
.data
A:
.word 4,6,8
第1對指令組合
LW $r2,0($r1)
ADD $r4,$r0,$r2
第2對指令衝突
ADD $r4,$r0,$r2
SW $r4,0($r1)
第3對指令衝突
SW $r4,0($r1)
LW $r6,4($r1)
第4對指令衝突
ADD $r8,$r6,$r1
MUL $r12,$r10,$r1
第5對指令衝突
ADD $r16,$r12,$r1
ADD $r18,$r16,$r1
第6對指令衝突
ADD $r18,$r16,$r1
SW $r18,16($r1)
第7對指令衝突
SW $r18,16($r1)
LW $r20,8($r1)
第8對指令衝突
MUL $r22,$r20,$r14
MUL $r24,$r26,$r14
5)採用指令調度技術對程序進行指令調度,消除衝突。將調度後的程序存到after-schedule.s中。
6)載入after-schedule.s。
.text
main:
ADDIU $r1,$r0,A
MUL $r22,$r20,$r14
LW $r2,0($r1)
MUL $r24,$r26,$r14
ADD $r4,$r0,$r2
LW $r6,4($r1)
SW $r4,0($r1)
ADD $r8,$r6,$r1
MUL $r12,$r10,$r1
ADD $r18,$r16,$r1
ADD $r16,$r12,$r1
SW $r18,16($r1)
LW $r20,8($r1)
TEQ $r0,$r0
.data
A:
.word 4,6,8
7)執行該程序。觀察程序在流水線中的執行情況,記錄程序執行的總時鐘週期數。
8)根據記錄結果,比較調度前和調度後的性能。論述指令調度對於提高CPU性能的作用。
<2>:用延遲分支減少分支指令對性能的影響。
1)啓動MIPSsim。
2)載入branch.s。
3)關閉延遲分支功能。
4)執行該程序。觀察並記錄發生分支延遲的時刻。
6 9 13 21 24 28
5)記錄執行該程序所用的總時鐘週期數。
6)假設延遲槽有1個,對branch.s進行指令調度,然後保存到“delayed-branch.s”中。
沒有調度前:
.text
main:
ADDI $r2,$r0,1024
ADD $r3,$r0,$r0
ADDI $r4,$r0,8
loop:
LW $r1,0($r2)
ADDI $r1,$r1,1
SW $r1,0($r2)
ADDI $r3,$r3,4
SUB $r5,$r4,$r3
BGTZ $r5,loop
ADD $r7,$r0,$r6
TEQ $r0,$r0
7)載入delayed-branch.s。
.text
main:
ADDI $r2,$r0,1024
ADD $r3,$r0,$r0
ADDI $r4,$r0,8
loop:
LW $r1,0($r2)
ADDI $r3,$r3,4
ADDI $r1,$r1,1
SUB $r5,$r4,$r3
SW $r1,0($r2)
BGTZ $r5,loop
ADD $r7,$r0,$r6
TEQ $r0,$r0
8)打開延遲分支功能。
9)執行該程序。觀察其時鐘週期圖。
10)記錄執行該程序所用的總時鐘週期數。
11)對比上述兩種情況下的時鐘週期圖。
調度前:
調度後
12)根據記錄結果,比較沒采用延遲分支和採用了延遲分支的性能之間的不同。論述延遲分支對於提高CPU性能的作用。
在沒有采用延遲分支之前
採用延遲分支之後
使用延遲槽後,指令在運行到跳轉bgezal指令,在期望概率上很大部分可能不會出現延遲等待,能夠稍微提高CPU性能,本實驗跳轉指令過少,在跳轉指令過多的情況下更爲明顯;
三.結果分析
通過本次實驗的對比,知道了對於一些代碼的調度,可以使得引起的衝突相對減少,在分支實驗中,增加了一些延遲槽的延遲技術也可以使得使得cpu效率更加好;在很多跳轉指令的代碼中,引用這種技術確實可以增加效率;
所以在以後的過程中除了在計算機組成原理之流水線及流水線中的衝突中解決問題之外,我們可以對其進行延遲與調度改進;
四.實驗總結
在還沒有深研究實驗之前,通過計算機組成原理之流水線及流水線認識了數據結構衝突,本課題研究的是調度技術,延遲分支技術;當看到代碼調度時候,知道了對於一些相互影響不大的代碼在邏輯結構不變的情況下可以進行順序的變動;這樣數據衝突、結構衝突會有所減少,並且也提高的cpu的效率;對於一些分支比較多的執行代碼中,除了應用調度之外,增加量延遲槽這一技術,使得cpu也有了提高,不過這是針對分支比較多的情況下,分支較小的差距並不是很大;