![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
现代CPU性能分析与优化 Bakhvalov
文章平均质量分 79
从系统级别介绍CPU代码优化流程。
高性能计算工程师
做一个极客!
展开
-
附录A和B
动态频率调节是一种在运行苛刻任务时通过自动提高CPU频率来提高系统性能的技术。Intel CPU的Turbo Boost就是此类。原创 2023-08-24 02:00:00 · 143 阅读 · 0 评论 -
第11章 优化多线程应用程序
1. 应用软件为多核做好准备;2. 线程通信可能会产生负加速效果。优化多线程应用程序的性能还涉及检测和缓存争用和一致性问题。原创 2023-08-23 23:00:00 · 181 阅读 · 2 评论 -
第10章 其他调优
如果程序中包含不依赖输入的计算,那么这些计算就可以提起在编译时计算而不是在运行时计算。C++14标准提供了constexpr函数,C++17标准通过了if constexpr提供编译时分支。原创 2023-08-23 03:00:00 · 110 阅读 · 0 评论 -
第9章 优化错误投机
1. 仅在TMA报告显示错误投机指标高才尝试解决分支预测错误问题;2. 通过查表和断言替换分支是否有收益,一定要测试它是否真的更好。原创 2023-08-23 02:15:00 · 123 阅读 · 0 评论 -
第8章 CPU后端优化
CPU后端低效:当前端完成取指和译码后,后端发生了过载而不能处理新的指令。TMA将后端bound分为存储和计算bound。原创 2023-08-23 02:00:00 · 285 阅读 · 0 评论 -
第7章 CPU前端优化
接下来讨论如何使用CPU监控特性寻找CPU上运行的代码中可被调优的位置。标准的算法和数据结构在性能敏感型工作负载并不总能表现的很好。例如,在“扁平化”数据结构的冲击下,链表基本上快被放弃了。传统链表中的每个节点都是动态分配的,除了引入耗时的内存分配操作,还可能让链表中所有元素分散在内存中,导致随机内存访问。二分搜索在排序数组中查找元素方面是最优的,但是该算法经常会有很多分支预测错误的问题,这就是为何线性搜索在小型(少于20个元素)整型数组上表现得最好。原创 2023-08-21 23:00:00 · 420 阅读 · 0 评论 -
第3章 CPU微架构
地址中的最低顺序位定义了块内偏移量,组则是基于索引位来选择,一旦组被选定,就可以使用标签位来与该组中的所有标签进行比较。如果不匹配,则缓存未命中。硬件多线程CPU支持专用硬件资源以独立地跟踪CPU中每个线程的状态,目的是线程由于长时延活动(如内存引用)而被阻塞时,以最小的延迟从一个上下文切换到另一个上下文(不会产生保存和恢复线程上下文的成本)。指令的动态调度是通过复杂的硬件结构(记分板)和诸如寄存器重命名之类的技术实现的。软件预取是对硬件预取的补充,开发者可以通过特定的硬件指令提前指定需要的内存位置。原创 2023-08-18 23:00:00 · 557 阅读 · 3 评论 -
第4章 性能分析中的术语和指标
Linux perf和Intel VTune Profiler工具。原创 2023-08-19 02:00:00 · 211 阅读 · 0 评论 -
第6章 性能分析相关的CPU特性
为什么如此关注分支指令?因为分支控制着程序的控制流。如果我们记录了每个分支的输出,就有可能逐行重建程序的执行路径。这也就是Intel Processor Trace技术所做的。硬件记录每条分支跳转指令的“起点”和“终点”地址以及一些附加的元数据。这些硬件寄存器像环形缓冲区,会被持续地覆写,只提供最近32个分支跳转输出。如果能够采集足够长时间的起始和终点对,就可以展开程序的控制流,类似一个有限深度的调用栈。并不是所有被执行分支跳转指令都能被检查到,通常CPU执行得太快以至于LBR有时并不能正常工作。原创 2023-08-21 02:00:00 · 526 阅读 · 0 评论 -
第5章 性能分析方法
1.时延和吞吐量通常是衡量性能的最终指标。2. 代码插桩帮我们跟踪程序中许多内容,但有较大开销。3. 跟踪有助于探索系统中异常。跟踪捕获完整的事件序列,且每个事件都附有时间戳。4. 负载表征是一种根据运行时行为比较和分组应用程序的方法。5. 采样会跳过程序执行的大部分时间,只取一个假定可以代表整个采样间隔的样本,但是它仍然能给出足够精确的样本分布。不需要重新编译,开销小,所以它是非常流行的性能分析方法。6. 计数和采样会产生非常低的运行时开销(通常低于2%)。原创 2023-08-19 16:47:09 · 259 阅读 · 0 评论 -
第2章 性能测量
理解应用程序性能的第一步是学会对它进行测量。与绝大多数功能问题相比,性能问题通常很难跟踪和复现。任何关注过性能评估的人可能都知道公允地进行性能测量并从中得到准确结论是多么困难。因为在测量中存在误差,性能分析通常需要统计方法进行处理。开展公允地性能实验是获得精确及有意义结果的基本步骤。设计性能测试和配置测试环境都是性能评估工作的重要组成部分。原创 2023-08-17 23:00:00 · 280 阅读 · 0 评论 -
第1章 导读
在当前单核性能已经达到峰值,增长趋势趋于平缓时,把应用程序分布式运行于多个计算核是很有必要的,而这要求程序的不同线程之间能高效通信、排除不需要的资源并规避多线程程序的典型问题。性能优化是一场无尽的游戏,因为总是存在值得优化的地方,但是进一步的改进需要非常高的工程成本,但是优化成本很高。典型的通用多线程应用程序的性能并不总是随着分配到任务的CPU核数量的增长而线性增长,了解发生这种情况的原因及可能得解决方案对产品的未来发展至关重要。合理的性能调优工作总是要先定义性能目标,论述清楚达到的结果以及这样做的原因。原创 2023-08-16 21:26:49 · 178 阅读 · 0 评论