Windows中单个C++函数的简单评测
Simple profiling of single C++ function in Windows
有时,特别是在编写新函数时,我想评测一段代码,但实际上并不需要完整的评测,而且可能太慢。
我使用的是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>
标头中的计时器。
请注意,您应该始终在发布版本而不是调试版本中进行测量,以获得正确的时间。
- 在c++中用vector填充一个简单的动态数组
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的简单if-else语句是如何无法访问的代码
- 使用简单类型列表实现的指数编译时间.为什么
- 如何在BST的这个简单递归实现中消除警告
- 一种在C++中读取TXT配置文件的简单方法
- 关于简单C++函数(is_palindrome)的逻辑的问题
- 显示错误输出的简单数组排序程序
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 退出简单while循环时出现问题
- 为什么简单的算术减法在"if"条件下不起作用?
- C++-字符串是否包含一个带有简单循环的单词
- 关于 c++ 函数中指针赋值的简单问题
- 从函数返回任意简单类型的数据
- 如何在没有函数的情况下编写此代码并使C++更简单?
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- 在简单示例中,Python3 + ctypes 回调会导致内存泄漏
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- Windows中单个C++函数的简单评测