1

有时,特别是当我正在编写一个新函数时,我想分析一段代码,但完整的分析运行并不是真正必要的,而且可能太慢了。

我正在使用 VS 2008 并在 C++ 上使用 AMD 分析器并取得了不错的效果,但我正在寻找更轻量级的东西。

您使用哪些工具来分析单个功能?也许是一个宏,当您不在调试模式下时会被排除在外。我可以自己写,但我想知道是否有任何我缺少的内置内容。我在想类似的事情:

void FunctionToTest()
{
    PROFILE_ENTER("FunctionToTest")
    // Do some stuff
    PROFILE_EXIT()
}

这将简单地在调试输出窗口中打印该函数花费了多长时间。

4

3 回答 3

1

如果我想从一个特定的函数中获得最大的速度,我将它包装在一个很好的长时间运行的循环中并使用这个技术。我真的不太在乎它所花费的时间。这就是结果。我真正需要知道的是我必须做些什么来减少时间。看到不同?在找到并修复速度错误后,当移除外循环时,它会飞。

此外,我不遵循只调整优化代码的正统观念,因为这假设代码已经尽可能紧凑。事实上,在任何显着规模的程序中,通常都会发生一些愚蠢的事情,例如使用相同的参数一遍又一遍地调用子函数,或者new在可以重用先前的副本时反复 -ing 对象。编译器的优化器或许能够清理一些这样的问题,但我需要清理每一个,因为留下的将占主导地位。它可以做的是通过打乱代码使它们更难找到。当我把所有愚蠢的东西都拿出来(让它变得更快),我就打开了优化器。

你可能会想“好吧,我永远不会在我的代码中放入愚蠢的东西”。正确的。而且你也永远不会加入错误。我们没有人会尝试犯错误,但如果我们正在工作,我们都会这样做。

于 2013-07-24T11:48:47.357 回答
0

Jeff Preshing 的这段代码应该可以解决问题:-

http://preshing.com/20111203/ac-profiling-module-for-multithreaded-apis

于 2013-07-24T06:57:40.947 回答
0

clock()使用操作系统提供的高分辨率计时器中的一个或一个来测量时间——链接中的代码也是如此。使用 C++11,您可以使用<chrono>标题中的计时器。

请注意,您应该始终在发布版本而不是调试版本中进行测量,以获得正确的时间。

于 2013-07-24T07:44:26.953 回答