Windows中单个C++函数的简单评测

Simple profiling of single C++ function in Windows

本文关键字:简单 评测 函数 C++ 单个 Windows      更新时间:2023-10-16

有时,特别是在编写新函数时,我想评测一段代码,但实际上并不需要完整的评测,而且可能太慢。

我使用的是VS2008,并且在C++上使用了AMD探查器,结果很好,但我正在寻找更轻量级的东西。

您使用哪些工具来评测单个函数?也许是一个宏,当你不在调试模式时会被排除在外。我可以自己写,但我想知道是否有我缺少的内置功能。我在想:

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

它只需在调试输出窗口中打印函数所用的时间。

如果我想从一个特定的函数中获得最大的速度,我会将它包装在一个漂亮的长时间运行的循环中,并使用此技术。我真的不太在乎花多少时间。这只是结果。我真正需要知道的是,我必须做些什么才能减少时间。看到区别了吗?在发现并修复速度错误后,当外环被移除时,它就会飞起来。

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

你可能会认为"我永远不会把愚蠢的东西放在我的代码中。"正确的而且你也永远不会放虫子。我们中没有人试图犯错误,但如果我们在工作,我们都会犯。

Jeff Preshing的这段代码应该能做到这一点:-

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

使用clock()或操作系统提供的一个高分辨率计时器测量时间(链接中的代码也会这样做)。使用C++11,您可以使用<chrono>标头中的计时器。

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