济南网站建设哪家好?大连百度推广怎么做?
摘要:济南的网站建设公司哪家好,大连百度推广怎么做,贵阳做网站费用,十大资本投资公司写在前面的话:此系列文章为笔者学习CSAPP时的个人笔记,分享出来与大家学习交流&#x
济南的网站建设公司哪家好,大连百度推广怎么做,贵阳做网站费用,十大资本投资公司写在前面的话#xff1a;此系列文章为笔者学习CSAPP时的个人笔记#xff0c;分享出来与大家学习交流#xff0c;目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记#xff0c;在复习回看时发现部分内容存在一些小问题#xff0c;因时间紧张来不及再次整理… 写在前面的话此系列文章为笔者学习CSAPP时的个人笔记分享出来与大家学习交流目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记在复习回看时发现部分内容存在一些小问题因时间紧张来不及再次整理总结希望读者理解。 《深入理解计算机系统(CSAPP)》第3章 程序的机器级表示 - 学习笔记_友人帐_的博客-CSDN博客
《深入理解计算机系统(CSAPP)》第5章 优化程序性能 - 学习笔记_友人帐_的博客-CSDN博客
《深入理解计算机系统(CSAPP)》第6章 存储器层次结构 - 学习笔记_友人帐_的博客-CSDN博客
《深入理解计算机系统(CSAPP)》第7章 链接- 学习笔记_友人帐_的博客-CSDN博客
《深入理解计算机系统(CSAPP)》第8章 异常控制流 - 学习笔记_友人帐_的博客-CSDN博客
《深入理解计算机系统(CSAPP)》第9章虚拟内存 - 学习笔记_友人帐_的博客-CSDN博客 第五章 优化程序性能
1. 编译器优化的能力和局限性
1编译器能做的优化
优化选项-Oxg-基本优化1~3 - 更高级优化。
寄存器分配代码选择与排序(调度)消除死代码消除轻微的低效率问题
2优化的局限性 要在基本约束下运行不能引起程序功能的任何改变不去优化畸形情况下的程序行为。 只在单个文件中进行优化分析不做文件间的代码优化分析代价太大。 大多数分析都是基于静态信息难以预测运行时的输入。 遇到问题时必须对程序只使用安全的优化偏保守。
2. 妨碍编译器优化的因素 内存别名两个指针指向同一个内存位置因此编译器必须假设不同的指针可能会指向内存中同一个位置。 函数调用不能确定函数调用是否有副作用因此编译器会假设最糟的情况并保持所有的函数调用不变。
解决方法 对于内存别名 消除不必要的内存引用可以增加局部变量将运算中间值累积在寄存器中在整个过程结束后写回目标内存。 对于函数调用 用内联函数替换优化函数调用将函数调用展开替换为函数体 减少过程调用尽量少地调用函数。
3. 优化方法
1不依赖处理器 代码移动如果某段代码总是产生相同的结果就将其从循环中移出避免重复计算。 复杂运算简化用更简单的方法替换昂贵的操作例如使用移位、加代替乘法、除法。 共享公用子表达式找到多个计算的公共部分重用表达式的一部分。 尽量减少循环边界的检查 消除不必要的内存引用用局部变量累积结果 使用AVX2编程使用向量指令计算
2实现指令级并行
循环展开
通过增加每次迭代计算的元素的数量减少循环的迭代次数。减少了不直接有助于程序结果的操作的数量例如循环索引计算和条件分支。它提供了一些方法可以进一步变化代码减少整个计算中关键路径上的操作数量。 k × 1 k\times 1 k×1展开
limit length - k 1;
for (i 0; i limit; i k)
{// 对元素i到ik-1合并运算
}
for (; i length; i)
{// 以每次处理一个元素的方式处理最后0~k-1个元素
}提高并行性
利用更多的功能单元来执行比单个完全流水线化的功能单元更快打破延迟界限。
使用多个累积量对于可结合和可交换的合并运算可以通过将一组合并运算分割成两个或更多的部分并在最后合并结果来提高性能。 k × n k\times n k×n展开k次循环展开n路并行
limit length - k 1;for (i 0; i limit; i k)
{// 对元素i到ik-1合并运算// 使用n个累积量
}// 处理最后0~k-1个元素// n个累积量运算结果合并最好使用 k × k k\times k k×k展开且对于延迟为 L L L容量为 C C C的操作而言循环展开因子 k ≥ C ⋅ L k\ge C·L k≥C⋅L时达到最大吞吐量。
展开变换时必须考虑实现的功能是否与原来相同。要考虑运算是否可交换、可结合溢出情况下是否保证结果与原来相同等。(浮点加法和乘法不可结合原因在于四舍五入和溢出)
同时k不能过大否则会出现寄存器溢出的情况k的个数超过了机器的寄存器个数会将变量分配在栈上运行速度反而会降低。
