计组实验---流水线冒险

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

前言

看了龙哥的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值