优化程序性能
写程序最主要的目标就是使它在所有可能的情况下都正确工作。
代码剖析程序是测量程序各个部分性能的工具。
程序性能分析
度量标准:每元素的周期数(Cycles Per Element, CPE)
优化编译器的性能
- 内存别名使用:两个指针可能指向同一个内存位置的情况
- 消除循环的低效率
- 代码移动:为了改进代码,程序员必须经常帮助编译器显式地完成代码的移动
- 一个有经验的程序员工作的一部分就是避免引入渐进低效率代码
- 减少过程调用
- 消除不必要的内存引入
- 引入临时变量
- 循环展开
- 展开因子与延迟界限有一定的关系
- 提高并行性
- 并行因子与延迟界限和处理单元的数目油一定关系
- 多个累计变量
- 重新结合变换
- 用向量指令达到更高的并行度
- 低级优化,结构化代码以利用硬件功能
现代处理器
- 指令级并行
- 两个界限
- 延迟界限
- 吞吐量界限
寄存器
- 现代 x86-64 处理器有 16 个寄存器
分支预测和预测错误处罚
- 不要过分关心可预测的分支
- 书写适合用条件传送实现的代码
- 用功能性的风格重写条件操作,使得编译采用条件数据传送
内存性能
- 加载
- 例如 L1 级 cache 的 4 周期访问时间
- 存储
- 读/写相关操作:指令需要一条一条顺序执行
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 知识碰撞!
评论