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

5.15
A.关键路径是%xmm1更新路径上的加法。
CSAPP第五章家庭作业(原书第二版)

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还要差。

上一篇:迁移 dotnet 6 提示必须将目标平台设置为 Windows 平台


下一篇:项目模板