什么是性能分析?

曾经和同事辩论过某段代码的性能吗?那么你可能知道要预测哪段代码会表现最佳有多么困难。在现代处理器内部有如此多的运作部件,即使对代码进行微小的调整也可能触发显著的性能变化。这就是为什么本书的第一个建议是:始终进行测量分析(Measure)。许多人在尝试优化他们的应用程序时依赖直觉。而通常情况下,最终会在各处随意修复,而对应用程序的性能没有产生任何真正的影响。

经验不足的开发人员经常在源代码中进行更改,并希望它会改善程序的性能。一个这样的例子是在代码库中到处用 i++ 替换为 ++i,假设之前的 i 值未被使用。在一般情况下,这种更改对生成的代码不会有任何影响,因为任何像样的优化编译器都会认识到之前的 i 值未被使用,并会消除多余的副本。

许多围绕世界流传的微优化技巧在过去是有效的,但现在的编译器已经学会了它们。此外,一些人倾向于过度使用传统的位操作技巧。其中一个例子是使用XOR交换算法2,而事实上,简单的std::swap会产生更快的代码。这种意外的更改可能不会改善应用程序的性能。找到正确的修复位置应该是经过仔细的性能分析得出的结果,而不是靠直觉和猜测。

有许多性能分析方法可能会或可能不会带领你发现问题。本书介绍的针对特定CPU的性能分析方法有一个共同点:它们都基于收集有关程序执行方式的特定信息。在程序源代码中做出的任何更改都是通过分析和解释收集的数据来驱动的。

找到性能瓶颈只是工程师工作的一半。第二半部分是正确地修复它。有时,在程序源代码中更改一行代码可能会带来显著的性能提升。性能分析和调优就是要找到并修复这行代码。错过这样的机会可能会是一种巨大的浪费。

2. xor交换算法-https://en.wikipedia.org/wiki/XOR_swap_algorithm

results matching ""

    No results matching ""