誰有張晨曦《計算機系統結構》第四章習題答案?請發一份

2021-07-03 15:02:56 字數 5720 閱讀 4549

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級 該級的程式設計工具是微...

計算機系統漏洞有什麼危害,計算機系統漏洞有什麼危害

漏洞是在硬體 軟體 協議的具體實現或系統安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權的情況下訪問或破壞系統。也就是黑客攻擊計算機所利用的通道,所以如果掃描出了漏洞一定要補好,不然你的電腦很容易中毒。各種防毒軟體都有漏洞掃描。但是隨著研究的人多了,很多未公佈的漏洞也就讓有心人在補丁出來之前就利用...