自顶向下微架构分析
自顶向下微架构分析(Top-down Microarchitecture Analysis,TMA)方法论是一种用于识别程序中 CPU 瓶颈的强大技术。该方法论最大的优点在于,开发者无需深入了解系统中的微架构和性能监控计数器(PMC),仍然能够高效地找到 CPU 瓶颈。
从概念层面来看,TMA 用于识别是什么在阻碍程序的执行。图 TMA_concept 展示了 TMA 的核心思想。下面简要介绍如何解读该图。如我们在 [uarch] 中所了解的,CPU 内部存在缓冲区,用于跟踪正在执行的微操作(μops)的相关信息。每当一条新指令被取指并解码时,这些缓冲区中就会分配新的条目。如果某条指令的 μop 在某个执行周期内未能被分配,原因只有两种:要么是无法取指并解码(前端受限(Frontend Bound)),要么是后端(Backend)工作过载,无法为新的 μop 分配资源(后端受限(Backend Bound))。如果一个 μop 已被分配并调度执行,但最终未能退休(retire),则说明它来自一条被错误预测的执行路径(错误推测(Bad Speculation))。最后,退休(Retiring) 代表正常执行,这是我们希望所有 μops 所处的分类,尽管存在一些例外,后文会加以说明。
![TMA 顶层分类背后的概念。*© 来源:[TMA_ISPASS]*](../../../img/pmu-features/TMAM_diag.png)
在实践中,分析并不是以这种方式进行的,因为逐一分析每个微操作(μop)会非常缓慢。TMA 实际上是通过监控一组特定的性能事件来观察程序的执行,然后根据预定义的公式计算指标。利用这些指标,TMA 将程序归入四个高层分类之一。这四个高层分类各自又有若干嵌套层级,CPU 厂商可以选择不同的实现方式。每一代处理器计算这些指标的公式可能不同,因此最好借助工具来完成分析,而不是尝试手动计算。
在接下来的章节中,我们将分别讨论 AMD、Arm 和 Intel 处理器中的 TMA 实现。