前言
看了龙哥的blog,感觉实验报告的内容变了一点,这里就更新一下
龙哥的blog
实验内容
观察一段代码并运行,观察其中的流水线冒险,并记录统计统计信息。
对所给的代码进行指令序列的调整,以期避免数据相关,并记录统计信息。
启动forward功能,以获得性能提升,并且记录统计信息。
(选做:用perf记录x86中的数据相关于指令序列调整后的时间统计、
调整指令,以避免连续乘法间的阻塞。)
实验说明
首先,我们给出一段C代码,该段代码实现的是两个矩阵相加。
设有44矩阵A和44矩阵B相加,得到4*4矩阵C:
for(inti = 0; i< 4; i++)
For(int j = 0; j < 4; j++)
C[i][j] = A[i][j] + B[i][j];
根据上述的C代码,我们将其转换成MIPS语言,然后运行,并进行分析。
MIPS代码如下:
.data
a: .word 1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4
b: .word 4,4,4,4,3,3,3,3,2,2,2,2,1,1,1,1
c: .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
len: .word 4
control: .word32 0x10000
data: .word32 0x10008
.text
start:daddi r17,r0,0
daddi r21,r0,a
daddi r22,r0,b
daddi r23,r0,c
ld r16,len(r0)
loop1: slt r8,r17,r16
beq r8,r0,exit1
daddi r19,r0,0
loop2: slt r8,r19,r16
beq r8,r0,exit2
dsll r8,r17,2
dadd r8,r8,r19
dsll r8,r8,3
dadd r9,r8,r21
dadd r10,r8,r22
dadd r11,r8,r23
ld r9,0(r9)
ld r10,0(r10)
dadd r12,r9,r10
sd r12,0(r11)
daddi r19,r19,1
j loop2
exit2:daddi r17

本文介绍了MIPS流水线实验,分析了数据冒险和结构冒险,通过调整指令序列和启用Forwarding功能减少RAW相关。实验中,通过优化代码避免了数据冲突,显著提升了性能。此外,针对除法指令造成的结构相关,提出了指令重排序的优化策略。
最低0.47元/天 解锁文章
3242

被折叠的 条评论
为什么被折叠?



