CSAPP练习题5.5和5.6 课后习题答案解释

本文解析了CSAPP书中5.5和5.6两道习题的答案,详细阐述了每道习题中涉及的指令流水线操作过程及所需周期数,并通过表格形式展示了迭代过程中各变量的变化情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSAPP练习题5.5和5.6

看到这篇文章的一定是对练习题5.5和5.6的课后习题答案有疑惑的人。铺垫我就不多说了,直接上我自己的理解吧。
我认为课后习题的答案应该是没有问题的,可以这么去理解
1、首先,对于5.5题的代码,CEP是5

result += a[i] * xpwr
xpwr = x * xpwr

假设a[i] * xpwr的计算结果保存在tmp中,大部分人的疑惑肯定是a[i] * xpwr和x * xpwr计算需要5个周期,然后算完的结果tmp再加回到result中,那不就是8个周期吗。
其实,我们不难发现,a[i] * xpwr和x * xpwr的计算和result无关,所以当前次迭代result更新不更新,完全不影响下一次迭代计算中这两个乘法的进行,所以我们可以把result的加法放到下一次迭代中,这样来看,每一次迭代就是两个乘法和一个加法并行,需要5个周期了,如下图所示。(忽略i的加法)
在这里插入图片描述

下面这个表格说明了每次迭代完成后,各个变量的值,其中第0次迭代完表示初始状态

迭代次数ia[i]tmpxpwrresult
01 a 1 a_1 a10x a 0 a_0 a0
12 a 2 a_2 a2 a 1 x a_1x a1x x 2 x^2 x2 a 0 a_0 a0
23 a 3 a_3 a3 a 2 x 2 a_2x^2 a2x2 x 3 x^3 x3 a 0 + a 1 x a_0+a_1x a0+a1x
34 a 4 a_4 a4 a 3 x 3 a_3x^3 a3x3 x 4 x^4 x4 a 0 + a 1 x + a 2 x 2 a_0+a_1x+a_2x^2 a0+a1x+a2x2

2、对于5.6来说

result = a[i] + x * result

可以看到x * result的计算是和result有关的,所以一次新迭代的开始必须要等上一次迭代result更新完毕,所以需要先做x * result的乘法,再将结果和a[i]相加,赋给result,需要8个周期。
在这里插入图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值