CSAPP第五章家庭作业(原书第二版)

5.15
A.关键路径是%xmm1更新路径上的加法。
在这里插入图片描述

B.CPE下界是浮点加法的延迟。
C. 两个load操作的吞吐量界限。
D.乘法不在关键路径上,是通过流水线实现的,两个版本的CPE都为3.00,其限制因素都是浮点数加法的延迟。

5.17

void inner4(vec_ptr u, vec_ptr v, data_t *dest)
{
    long int i;
    int length = vec_length(u);
    data_t *udata = get_vec_start(u);
    data_t *vdata = get_vec_start(v);
	int limit = length - 2;
	data_t sum1 = (data_t) 0;
	data_t sum2 = (data_t) 0;
	data_t sum3 = (data_t) 0;
    for (i = 0; i < limit; i+=3) {
        sum1 = sum1 + udata[i] * vdata[i];
        sum2 = sum2 + udata[i+1] * vdata[i+1];
        sum3 = sum3 + udata[i+2] * vdata[i+2];
    }
    
    for(; i<length;i++)
        sum1 = sum1 + udata[i] * vdata[i];
    *dest = sum1+sum2+sum3;
}

A. load执行单元的吞吐量
B. 因为程序在执行中需要7个寄存器来保存变量i、sum1、sum2、sum3、limit、udata、vdata,而IA32只有6个通用寄存器,多于的变量只能存到内存中,这会涉及到内存的读写,导致了速度慢,而只做4路循环展开只需要5个寄存器来保存变量i、sum、limit、udata、vdata,,使得变量值更新不会再去访问内存。因而该版本的CPE比只做4路循环展开时的CPE还要差。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值