体系结构_流水线相关和指令调度实验【问题整理】

由于水平有限,在完成体系结构实验过程中对部分问题进行了整理,参考文章链接已经附在问题下。若有解释不当之处,还望各位朋友不吝赐教。

实验环境:

实验工具: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...;

 

 

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