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

文章目录前言实验内容实验说明一、 调整指令序列二、 Forwarding功能开启三、 结构相关优化要求指令序列调整方案实验中修改后的高效率代码数据冒险结构冒险选做题前言看了龙哥的blog,感觉实验报告的内容变了一点,这里就更新一下龙哥的blog实验内容观察一段代码并运行,观察其中的流水线冒险,并记录统计统计信息。对所给的代码进行指令序列的调整,以期避免数据相关,并记录统计信息。启动forward功能,以获得性能提升,并且记录统计信息。(选做:用perf记录x86中的数据相关于指令序列调
摘要由CSDN通过智能技术生成

前言

看了龙哥的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,r17,1
	j loop1
exit1: halt

实验前请保证winMIPS64配置中“Enable Forwarding”没有选中。将这段代码加载到WinMIPS64中,运行后观察结果(提供Statistic窗口截图)。从Statistic窗口记录:本程序运行过程中总共产生了多少次RAW的数据相关。接下来,我们对产生数据相关的代码逐个分析,请列出产生数据相关的代码,并在下一步中进行分析和优化。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值