优化计算(Optimizing Computations)

在上一章中,我们讨论了如何为高效内存访问清除障碍。完成之后,是时候关注 CPU 如何处理从内存中取回的数据了。现代应用程序需要大量的 CPU 计算,尤其是涉及复杂图形、人工智能、加密货币挖矿和大数据处理的应用程序。在本章中,我们将重点介绍优化计算的方法,这些方法可以减少 CPU 的工作量,并提升程序的整体性能。

当应用 TMA 方法论时,低效的计算通常体现在 Core Bound 以及在一定程度上体现在 Retiring 类别中。Core Bound 类别代表 CPU 乱序执行(out-of-order execution)引擎中所有非内存问题导致的停顿。主要分为两大类:

  • 软件指令之间的数据依赖(data dependencies)限制了性能。例如,一长串相互依赖的操作可能导致指令级并行度(Instruction Level Parallelism,ILP)较低,浪费了大量执行槽位。下一节将更详细地讨论数据依赖链。
  • 硬件计算资源不足。这表明某些执行单元(execution units)过载(也称为执行端口竞争,execution port contention)。当工作负载频繁执行大量同类型指令时就会发生这种情况。例如,AI 算法通常需要大量乘法操作,科学计算应用可能需要大量除法和开方操作。然而,任何给定的 CPU 核心中乘法器和除法器的数量是有限的。因此,当发生端口竞争时,指令会排队等待执行机会。这类性能瓶颈与特定的 CPU 微架构密切相关,通常没有通用的解决方案。

本章将介绍函数内联(function inlining)、向量化(vectorization)和循环优化(loop optimizations)等常见技术。这些代码变换旨在减少已执行指令的总量,或将其替换为更高效的指令。

results matching ""

    No results matching ""