CSAPP第五章家庭作业参考答案
(CSAPP第三版系列)导航篇传送门
5.14编写5.13的6*1循环展开版本
代码如下:
/* Inner product. Accumulate in temporary */
void inner4(vec_ptr u,vec_ptr v,data_t *dest)
{long i;long length = vec_length(u);long limit = length - 5;data_t *udata = get_vec_start(u);data_t *vdata = get_vec_start(v);data_t sum = (data_t)0;for(i = 0;i < limit;i = i + 6){sum = sum + udata[i] * vdata[i];sum = sum + udata[i+1] * vdata[i+1];sum = sum + udata[i+2] * vdata[i+2];sum = sum + udata[i+3] * vdata[i+3];sum = sum + udata[i+4] * vdata[i+4];sum = sum + udata[i+5] * vdata[i+5];}for(;i < length;i++){sum = sum + udata[i] * vdata[i];}*dest = sum;
}
A. 原因:6*1循环展开标量版本的内积过程的关键路径仍然是n个加法操作,而在Haswell架构上整数加法的延迟为1个周期,所以这种方式编写程序的CPE不可能小于1.00。
B. 原因:在Hawell架构上浮点数加法操作的延迟为3个周期,而在使用6*1循环展开之前程序的CPE已经达到了3.01,所以即使使用6*1循环展开也是不可能突破这个下界的。
5.16 编写5.13的6*1a循环展开版本
代码如下:
/* Inner product. Accumulate in temporary */
void inner4(vec_ptr u,vec_ptr v,data_t *dest)
{long i;long length = vec_length(u);long limit = length - 5;data_t *udata = get_vec_start(u);data_t *vdata = get_vec_start(v);data_t sum = (data_t)0;for(i = 0;i < limit;i = i + 6){sum = sum + (udata[i] * vdata[i] + udata[i+1] * vdata[i+1] + udata[i+2] * vdata[i+2] + udata[i+3] * vdata[i+3] + udata[i+4] * vdata[i+4] + udata[i+5] * vdata[i+5]);;}for(;i < length;i++){sum = sum + udata[i] * vdata[i];}*dest = sum;
}
5.18优化多项式求值任务
若要使CPE接近于机器的吞吐量界限,可以使用10*10(浮点乘法延迟为5,容量为2)的并行累计方式编写程序。
代码如下:
/*使用直接求值方法*/
double poly(double a[],double x,long degree)
{long i;long limit = degree - 9;double result = a[0];double result_1 = 0;double result_2 = 0;double result_3 = 0;double result_4 = 0;double result_5 = 0;double result_6 = 0;double result_7 = 0;double result_8 = 0;double result_9 = 0;double xpwr = x;double xpwr_1 = x*x;double xpwr_2 = x*x*x;double xpwr_3 = x*x*x*x;double xpwr_4 = x*x*x*x*x;double xpwr_5 = x*x*x*x*x*x;double xpwr_6 = x*x*x*x*x*x*x;double xpwr_7 = x*x*x*x*x*x*x*x;double xpwr_8 = x*x*x*x*x*x*x*x*x;double xpwr_9 = x*x*x*x*x*x*x*x*x*x;for(i = 1;i <= limit;i++){result += a[i] * xpwr;result_1 += a[i+1] * xpwr_1;result_2 += a[i+2] * xpwr_2;result_3 += a[i+3] * xpwr_3;result_4 += a[i+4] * xpwr_4;result_5 += a[i+5] * xpwr_5;result_6 += a[i+6] * xpwr_6;result_7 += a[i+7] * xpwr_7;result_8 += a[i+8] * xpwr_8;result_9 += a[i+9] * xpwr_9;xpwr = xpwr * xpwr_9;xpwr_1 = xpwr_1 * xpwr_9;xpwr_2 = xpwr_2 * xpwr_9;xpwr_3 = xpwr_3 * xpwr_9;xpwr_4 = xpwr_4 * xpwr_9;xpwr_5 = xpwr_5 * xpwr_9;xpwr_6 = xpwr_6 * xpwr_9;xpwr_7 = xpwr_7 * xpwr_9;xpwr_8 = xpwr_8 * xpwr_9;xpwr_9 = xpwr_9 * xpwr_9;}for(;i <= degree;i++){result += a[i] * xpwr;xpwr = x * xpwr;}return (result + result_1 + result_2 + result_3 + result_4 + result_5 + result_6 + result_7 + result_8 + result_9);
}
CSAPP第五章家庭作业参考答案相关推荐
- CSAPP第7章家庭作业参考答案
7.6 buf 有 m.o 外部 .data bufp0 有 swap.o 全局 .data bufp1 有 swap.o 局部 .bss incr 有 swap.o 局部 .text count 有 ...
- CSAPP第4章家庭作业参考答案
4.45 不正确 push %rsp的指令会将rsp减8之前的old value压栈 应该是如下代码: movq REG, -8(%rsp) sub $8, %rsp 4.46 不正确 应该改为 ad ...
- CSAPP第二章家庭作业参考答案
(CSAPP第三版系列)导航篇传送门 2.56 用不同的示例值运行show_bytes的代码. #include <stdio.h>typedef unsigned char *byte_ ...
- matlab胡良剑第五章,MATLAB习题参考答案(胡良剑,孙晓君)
MATLAB习题参考答案 第一章 MATLAB入门 4.求近似解 解:>> x=-2:0.05:2;y=x.^4-2.^x 两个近似解:y1=f(-0.85)= -0.0328; y2=f ...
- 《软件工程教程》(第2版) 主编:吴迪 马宏茹 丁万宁 第五章课后习题参考答案
第5章 总详细设计 课后习题参考答案 一.填空题 (1)结构化程序设计方法的要点是使用 顺序.选择和循环 结构,自顶向下.逐步求精地构造算法或程序 (2)为了产生结构化的流程图,应由三种基本控制 ...
- c语言第五次上机作业,大连理工c语言第五次上机作业参考答案(5页)-原创力文档...
第五次上机作业:(请用指针实现) 数据移位 有n(n<=10)个整数,使前面各数顺序向后移m(m<=n)个位置,最后m个数变成最前面的m个数,如图所示.编写函数shift(a,n,m)实现 ...
- [第五章] 深入理解计算机系统第三版 家庭作业参考答案
5.13 A. 画图: 关键路径为第三幅图加粗部分 B. 下界为浮点加法的延迟界限,CPE 为 3.00 C. 整数加法的延迟界限,CPE 为 1.00 D. 关键路径上只有浮点加法 5.14 voi ...
- [第三章] 深入理解计算机系统第三版 家庭作业参考答案
人非圣贤孰能无过,欢迎大家提问与纠错 3.58 long decode2(long x, long y, long z) {y -= z;x *= y;return ((y << 63) ...
- [第六章] 深入理解计算机系统第三版 家庭作业参考答案
6.22 磁道数 d 与 r - x * r 成正比 设 d = k(r - x * r) = kr(1 - x) 总容量 c = 2πxk(r^2)(1 - x) = 2πk(r^2)(x - x^ ...
最新文章
- matlan数据分析库函数
- Matrix工作室第六届纳新AI组考核题(A卷)
- 从大学生到职场人,一段深刻的思维认知升级补丁
- 读名老中医之路笔记(二)
- Java线程类核心方法
- 在搜索框自动输入文本_selenium自动化测试之常见的定位元素
- [vscode] c++ debugging
- 高效Redis Client多线程操作的并发吞吐设计
- 842. 将数组拆分成斐波那契序列
- Python学习之路day02——007字典的嵌套
- Java项目:企业固定资产管理系统(java+SpringBoot+VUE+maven+mysql)
- 机器学习笔记—模式识别与智能计算(一)模式识别概述
- 傻码农嘚瑟啥,HR才是国内公司真正的中流砥柱!
- 学习正则表达式 - 用 HTML 标记文本
- C#去除字符串中的换行符回车符空格符等
- 量子理论学习:概率幅
- 关于浏览器隐私/无痕模式下localStorage的判断
- 2010-2019,我,一个普通职场人的十年变迁
- 高精度地图lanelet2或opendrive转vectormap
- tableau连接不上oracle,Oracle