深入理解计算机系统
楚谷雨
这个作者很懒,什么都没留下…
展开
-
csapp阶段性学习心得
像是吃了巧克力一样的屎。 第六章摘录: 为了写出缓存友好的代码,可以看看以下规则 ①将注意力放在内循环中。 ②通过按照数据对象存储在内存中顺序、以为1的步长读取数据,从而使得程序中的空间局部性最大。 ③一旦从存储器中读取了一个数据对象,尽可能多的使用它,从而使程序的时间局部性最大。 ——————————————————————————— 学习csapp的感觉十分糟糕。 大量的理论知识,无法验证的实...原创 2020-03-24 21:02:00 · 200 阅读 · 0 评论 -
5.13---5.5---5.6 深入理解计算机系统
#include <iostream> #include <windows.h> //微秒计时器 #include <time.h> //clock函数 using namespace std; //旨在验证5.5\5.6的指令级并行,减少循环次数,减少内存访问次数对于运算时间的影响; //验证结果: //与预期严重不符!!!version2...原创 2020-03-23 21:52:45 · 268 阅读 · 0 评论 -
5.8并行的理解
将每个长等式拆分为两个操作数的短整式。R表示第几个周期;F表示在第几个周期下计算出的tmp。以A1为例,tmp1,r都是不能计算的:计算r的乘数tmp2在同一周期下才被计算出来。计算tmp1又依赖于r。可见,A1中不存在并行。A3在周期3之后,三个式子可以并行,每个式子的操作数都可以在前一个式子中计算得出。 (没搞懂关键路径,暂时也无意学汇编) ...原创 2020-03-22 12:04:27 · 143 阅读 · 0 评论 -
习题5.5、5.6
高屋建瓴 优化程序性能的最基本策略: ①高级设计。为问题选择合适的算法以及数据结构。避免产生渐进糟糕性能高的算法。 ②基本编码原则。避免限制优化的因素,方便编译器产生高效的代码。 a,消除连续的函数调用。在可能时,将计算移动到循环之外。有选择的妥协程序的模块性以获得更大的效率。 b,消除不必要的内存引用。引用临时变量来保存中间结果(私以为:可以在C++中用寄存器变量达到这一效果),在最后的值计算出...原创 2020-03-21 13:09:33 · 343 阅读 · 0 评论 -
位移操作相关习题2.64/2.61/2.62
先来复习一些位操作与逻辑操作; 逻辑操作: !— 返回值为true/false。非0,返回true;非非零,返回false; &&—返回true/false。真&&真,返回true,其余返回false; 系统自动判定,左值为false直接返回false; ||—不在赘述。 位操作: :右移,相当于除以一个数;涉及到最高位补零补一的问题; <<:左移,...原创 2020-03-17 23:27:36 · 324 阅读 · 0 评论 -
课后习题2.31—2.32
关于溢出 ——课后习题2.31、2.32; c语言中分无符号数,有符号数;两者都存在溢出。这里结合模的概念图解溢出,见下图: 上图以有符号八位数为例,简单的理解了这一思想。这样一个环上共有两个 ”128“(即2^8),0—128:-128— -0。为了使这样一个环均分,将0分给正数,128分给负数。于是乎,就有了0——127 :-128—— -1。这样正好对应了一个字节大小有符号整数的取值范围:...原创 2020-03-14 08:51:56 · 219 阅读 · 0 评论 -
抽取最高有效字节
摘取参数的最高有效字节 代码如下: 代码功能:抽取参数x的最高有效字节。 分析:shift_val为24,x算术右移24位,原来的最高有效字节变为xright的最低有效字节,与操作&0xff,保留最低有效字节。这里最需要注意的就是移位操作:①对于有符号而言:正数右移,高位补0;负数右移,高位补1;②对无符号而言:右移高位补0;③所有数左移时,低位补0; 在这里蒙住的原因:十六进制,十进制,...原创 2020-03-16 15:57:05 · 564 阅读 · 0 评论