體系結構_流水線相關和指令調度實驗【問題整理】

由於水平有限,在完成體系結構實驗過程中對部分問題進行了整理,參考文章鏈接已經附在問題下。若有解釋不當之處,還望各位朋友不吝賜教。

實驗環境:

實驗工具:WinMIPS64;

操作系統:Windows10 64位;

所用指令集:MIPS64(注意與MIPS32的區別)

 

1,MIPS指令集中add,addi,addu,dadd,add.d,add.s有什麼區別?

參考@ Follow_My_Heart 【MIPS 指令集(共31條)】@frozenshore 【mips指令與寄存器詳解】@Wo_der 【MIPS64寄存器與指令集】

指令 功能 示例 描述
add 普通加法 add $1, $2, $3 $1 = $2 + $3
addi 第二個操作數是立即數 addi $1, $2, 100 $1 = $2 + 100
addu 無符號數相加 addu $1, $2, $3 $1 = $2 + $3
dadd MIPS64指令集中add變爲dadd dadd $1, $2, $3 $1 = $2 + $3
add.d 把一個雙精度浮點數加上一個單精度浮點數,結果是雙精度浮點數 add.d f0, f1, f2 $f0 = $f1 + $f2
add.s 把一個單精度浮點數加上一個雙精度浮點數,結果是單精度浮點數 add.s f0, f1, f2 $f0 = $f1 + $f2

總結一下就是:add的i/u表示是立即數/無符號數;add的d表示用的是MIPS64指令集;add.後的d/s表示浮點數相加結果是雙精度/單精度;

 

2,Rs、Rt、Rd分別指什麼?

$Rd表示目的寄存器Destination Register , $Rs表示源寄存器Source Register ,$Rt表示作爲中間緩存的目標寄存器Target Register ;

 

3,MIPS中的結構衝突具體怎麼表現?

主要包括訪存衝突:即同時訪問存儲器,比如一條指令準備從存儲器中取出數據時,另一條指令準備從存儲器中取出指令,或者是兩條指令同時使用存儲器【如張晨曦老師教材《計算機體系結構》第2版中,P69介紹】

在WinMIPS64中,相鄰兩條除法指令也會導致Structural Hazard(可以在Configure/Architecture中修改Division Latency,來改變結構衝突的週期數);

此外,流水線寄存器的限制也會導致Structural Hazard,比如(不需要勾選Enable Forwarding)

.data
A: .double 8
B: .double 2
C: .double 0
.text
main:
l.d f0,A(r0)
l.d f1,B(r0)
mul.d f3, f0, f1
mul.d f4, f0, f1
mul.d f5, f0, f1
mul.d f6, f0, f1
s.d f3,C(r0)
halt

注意:結構衝突不僅需要考慮MEM是否衝突,而且需要考慮涉及到的其他資源,比如流水線寄存器(爲了保證存儲每一步輸出結果)

比如,算術類指令雖然沒有用到MEM,但還是使用了寄存器來暫存一個階段的值,這時由於流水線寄存器的資源限制(ALU/MEM.ALUo),仍會產生結構衝突。

 

4,Cycles窗口中“Str”什麼意思?

Structural Hazard結構衝突

 

5,MIPS指令集中s.d rt,imm(rs)中imm(rs)是什麼意思?

參考【CSDN問答頻道】

將rt寄存器中存放的值保存到rs寄存器中存放的值加上立即數imm進行符號擴展後得到的擴展立即數所得的內存地址的內存單元中,即
memory[rs + (SignExtend)immediate] 《-- rt;(其中rs經常取值爲r0)

 

6,數據段.data中定義數據,什麼時候用.word什麼時候用.double?

整數運算的時候使用.word,並且指令格式爲ld、sd、dadd、dmul...;

浮點運算的時候使用.double,並且指令格式爲l.d、s.d、add.d、mul.d...;

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章