1樓:匿名使用者
4.3 根據需要下面的迴圈並進行指令排程,直到沒有任何延遲。指令的延遲如表4.4。
loop: l.d f0,0(r1)
mul.d f0,f0,f2
l.d f4,0(r2)
add.d f0,f0,f4
s.d f0,0(r2)
dsubi r1,r1,#8
dsubi r2,r2,#8
bnez r1,loop
解:將迴圈兩次,進行指令排程,即可以消除延遲,**如下:
loop: l.d f0,0(r1)
l.d f10,-8(r1)
mul.d f0,f0,f2
mul.d f10,f10,f2
l.d f4,0(r2)
l.d f14,-8(r2)
add.d f0,f0,f4
add.d f10,f10,f14
dsubi r1,r1,16
s.d 0(r2),f0
dsubi r2,r2,16
bnez r1,loop
s.d 8(r2),f10
4.4 假設有一條長流水線,僅僅對條件轉移指令使用分支目標緩衝。假設分支**錯誤的開銷為4個時鐘週期,緩衝不命中的開銷為3個時鐘週期。
假設:命中率為90%,**精度為90%,分支頻率為15%,沒有分支的基本cpi為1。
(1) 求程式執行的cpi。
(2) 相對於採用固定的2個時鐘週期延遲的分支處理,哪種方法程式執行速度更快?
解:(1)程式執行的cpi = 沒有分支的基本cpi(1) + 分支帶來的額外開銷
分支帶來的額外開銷是指在分支指令中,緩衝命中但**錯誤帶來的開銷與緩衝沒有命中帶來的開銷之和。
分支帶來的額外開銷= 15% * (90%命中×10%**錯誤×4 + 10%沒命中×3)= 0.099
所以,程式執行的cpi = 1 + 0.099 = 1.099
(2)採用固定的2 個時鐘週期延遲的分支處理cpi = 1 + 15%×2 = 1.3
由(1)(2)可知分支目標緩衝方法執行速度快。
4.5 假設分支目標緩衝的命中率為90%,程式中無條件轉移指令的比例為5%,沒有無條件轉移指令的程式cpi值為1。假設分支目標緩衝中包含分支目標指令,允許無條件轉移指令進入分支目標緩衝,則程式的cpi值為多少?
解:設每條無條件轉移指令的延遲為x,則有:
1+5%×x=1.1
x=2當分支目標緩衝命中時,無條件轉移指令的延遲為0。
所以 程式的cpi = 1 + 2 × 5% ×(1 -90%) =1.01
4.6 下面的一段mips彙編程式是計算高斯消去法中的關鍵一步,用於完成下面公式的計算:
y = a x + y
其浮點指令延遲如表4.3所示,整數指令均為1個時鐘週期完成,浮點和整數部件均採用流水。整數操作之間以及與其它所有浮點操作之間的延遲為0,轉移指令的延遲為0。
x中的最後一個元素存放在儲存器中的地址為done。
foo: l.d f2,0(r1)
mut.d f4,f2,f0
l.d f6,0(r2)
add.d f6,f4,f6
s.d f6,0[r2]
daddiu r1,r1,#8
daddiu r2,r2,#8
dsubiu r3,r1,#done
bnez r3, foo
(1) 對於標準的mips單流水線,上述迴圈計算一個y值需要多少時間?其中有多少空轉週期?
(2) 對於標準的mips單流水線,將上述迴圈順序4次,不進行任何指令排程,計算一個y值平均需要多少時間?加速比是多少?其加速是如何獲得的?
(3) 對於標準的mips單流水線,將上述迴圈順序4次,優化和排程指令,使迴圈處理時間達到最優,計算一個y值平均需要多少時間?加速比是多少?
(1) 對於採用如圖4.8前瞻執行機制的mips處理器(只有一個整數部件)。當迴圈第二次執行到
bnez r3,foo
時,寫出前面所有指令的狀態,包括指令使用的保留站、指令起始節拍、執行節拍和寫結果節拍,並寫出處理器當前的狀態。
(2) 對於2路超標量的mips流水線,設有兩個指令流出部件,可以流出任意組合的指令,系統中的功能部件數量不受限制。將上述迴圈4次,優化和排程指令,使迴圈處理時間達到最優。計算一個y值平均需要多少時間?
加速比是多少?
(3) 對於如圖4.13結構的超長指令字mips處理器,將上述迴圈4次,優化和排程指令,使迴圈處理時間達到最優。計算一個y值平均需要多少時間?加速比是多少?
解:(1)
l.d f2, 0(r1) 1
stall
mut.d f4, f2, f0 2
l.d f6, 0(r2) 3
stall
stall
add.d f6, f4, f6 4
stall
stall
s.d f6, 0[r2] 5
daddiu r1, r1, #8 6
daddiu r2, r2, #8 7
dsubiu r3, r1, #done 8
bnez r3, foo 9
所以,共有14 個時鐘週期,其中有5 個空轉週期。
(2)迴圈順序4 次,不進行任何指令排程,則指令1~5 及其間的stall 都是必要的,只是指令6~9 只需執行一次,因此,共有 10 × 4 + 4 = 44 個時鐘週期,計算出4 個y 值,所以計算一個y 值需要11 個時鐘週期,加速比為:14/11 = 1.27 。
加速主要是來自減少控制開銷,即減少對r1、r2 的整數操作以及比較、分支指令而來的。
(3)迴圈順序4 次,優化和排程指令,如下:
l.d f2, 0(r1)
l.d f8, 8(r1)
l.d f14, 16(r1)
l.d f20, 24(r1)
mut.d f4, f2, f0
mut.d f10, f8, f0
mut.d f16, f14, f0
mut.d f22, f20, f0
l.d f6, 0(r2)
l.d f12, 8(r2)
l.d f18, 16(r2)
l.d f24, 24(r2)
add.d f6, f4, f6
add.d f12, f10, f12
add.d f18, f16, f18
add.d f24, f22, f24
s.d f6, 0[r2]
s.d f12, 8[r2]
s.d f18, 16[r2]
s.d f24, 24[r2]
daddiu r1, r1, #32
daddiu r2, r2, #32
dsubiu r3, r1, #done
bnez r3, foo
共用了24 個時鐘週期,則計算一個y 值平均需要 24/4 = 6 個時鐘週期,
加速比:14/6 = 2.33
(4)指令 指令執行時鐘
流出 執行 寫結果 確認
l.d f2, 0(r1) 1 2 3 4
mul.d f4, f2, f0 2 4 5 6
l.d f6, 0(r2) 3 4 6 7
add.d f6, f4, f6 4 8 9 10
s.d f6, 0(r2) 5 11 12 13
daddiu r1, r1, #8 6 7 8
daddiu r2, r2, #8 7 8 9
dsubiu r3,r1,#done 8 9 10
bnez r3, foo 9 10
l.d f2, 0(r1) 10 11 13 14
mul.d f4, f2, f0 11 13 14 15
l.d f6, 0(r2) 12 13 15 16
add.d f6, f4, f6 13 17 18 19
s.d f6, 0(r2) 14 20 21 22
daddiu r1, r1, #8 15 16 17
daddiu r2, r2, #8 16 17 18
dsubiu r3,r1,#done 17 18 19
bnez r3, foo 18
名稱 保留站
busy op vj vk qj qk dest a
add1 yes add.d regs[f4] regs[f6 ]
add2 no
add3 no
mult1 yes
mult2 no
項號 rob
busy 指令 狀態 目的 value
1 yes add.d f6, f4, f6 執行 f6 regs[f4]+regs[f6]
2 yes s.d f6, 0(r2) 流出 mem[0+regs[r2]] #2
欄位 浮點暫存器狀態
f0 f2 f4 f6 f8 f10 … f30
rob項編號 1
busy yes …
(5)整數指令 浮點指令 時鐘週期數
l.d f2, 0(r1) 1
l.d f8, 8(r1) 2
l.d f14, 16(r1) mut.d f4, f2, f0 3
l.d f20, 24(r1) mut.d f10, f8, f0 4
l.d f6, 0(r2) mut.d f16, f14, f0 5
l.d f12, 8(r2) mut.d f22, f20, f0 6
l.d f18, 16(r2) add.d f6, f4, f6 7
l.d f24, 24(r2) add.d f12, f10, f12 8
daddiu r1, r1, #32 add.d f18, f16, f18 9
s.d f6, 0(r2) add.d f24, f22, f24 10
s.d f12, 8(r2) 11
s.d f18,16(r2) 12
s.d f24, 24(r2) 13
daddiu r2, r2, #32 14
dsubiu r3, r1, #done 15
bnez r3, foo 16
計算一個y值需要 16/4 = 4 個時鐘週期,加速比 = 14/4 = 3.5
(6)訪存1 訪存2 浮點指令1 浮點指令2 整數指令 時鐘
週期l.df2, 0(r1) l.d f8, 8(r1) 1
l.df14, 16(r1) l.df20, 24(r1)
l.df6, 0(r2) l.df12, 8(r2) mut.df4, f2, f0 mut.df10, f8, f0 3
l.df18, 16(r2) l.df24, 24(r2) mut.df16, f14, f0 mut.df22, f20, f0 4
add.df6, f4, f6 add.df12, f10, f12 5
add.df18, f16, f18 add.df24, f22, f24 daddiu r1, r1, #32 6
daddiu r2, r2, #32 7
dsubiur3, r1, #done 8
bnez r3, foo 9
s.df6, -32(r2) s.df12, -24(r2) 10
s.df18,-16(r2) s.df24, -8(r2) 11
計算一個y值需要 11/4 個時鐘週期,加速比 = 14/(11/4) = 56/11
計算機系統有哪些層次結構,計算機系統的層次結構
計算機系統層次結構,指的是計算機系統由硬體和軟體兩大部分所構成,而如果按功能再細分,可分為7層。把計算機系統按功能分為多級層次結構,就是有利於正確理解計算機系統的工作過程,明確軟體,硬體在計算機系統中的地位和作用。第零級是硬聯邏輯級,這是計算機的核心,由門,觸發器等邏輯電路組成。第一級是微程式級。這...
什麼是計算機系統的層次結構,計算機系統有哪些層次結構?
計算機系統的層次結構 最底層是硬體,硬體之上是軟體,應用軟體位於系統軟體之上,使用者直接操作應用軟體。計算機系統有哪些層次結構?計算機系統的層次結構 最底層是硬體,硬體之上是軟體,應用軟體位於系統軟體之上,使用者直接操作應用軟體。計算機系統的層次結構?1 微程式設計級 第1級 該級的程式設計工具是微...
計算機系統漏洞有什麼危害,計算機系統漏洞有什麼危害
漏洞是在硬體 軟體 協議的具體實現或系統安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權的情況下訪問或破壞系統。也就是黑客攻擊計算機所利用的通道,所以如果掃描出了漏洞一定要補好,不然你的電腦很容易中毒。各種防毒軟體都有漏洞掃描。但是隨著研究的人多了,很多未公佈的漏洞也就讓有心人在補丁出來之前就利用...