【发布时间】:2010-10-13 09:13:30
【问题描述】:
我有一个要优化的 C++ 程序。 因为我希望它运行得快,所以我没有使用很多函数调用。我见过的大多数分析工具都可以在函数调用分辨率中为您提供分析信息。但是,我希望它具有逐行分辨率。有这样的选择吗?
我在 Windows 上使用 Visual Studio 2010。
谢谢。
【问题讨论】:
-
只使用 VS2010 或者其他工具可以吗?
-
我想我可以使用其他东西,虽然我想花一点时间来尝试找出其他东西在技术上是如何工作的,弄乱编译器选项等等。
-
请注意。优化器处理您的代码后,汇编指令和源代码中的行之间不再存在明确的一对一关系。一行可以对应多个不相近的汇编操作,一条汇编指令可能同时来自多行。
-
“不使用大量函数调用”——如果你有像数学计算这样的小步骤,并且你真的专注于一个函数,那么分析可能会破坏你的并行性和性能——尝试一下,但也要运行核心循环几千/几百万次并测量经过的时间,然后尝试你能想到的所有替代实现。您可能会考虑移植到 Linux 并尝试使用 valgrind,因为您可能会发现一些 CPU/内存架构等固有的性能问题。
-
规则 8:不要过早优化 (gotw.ca/publications/c++cs.htm)。使用您的分析器并确认函数调用会减慢您的速度,然后再担心消除它们。函数可帮助您对计算进行分组,并可能在算法中找到更大的优化。优化器通常可以在较小的代码块上做得更好。
标签: c++ visual-studio-2010 profiling