我是非程序员,试图评估在(opencv-)函数中花费的时间。我们有一个AD转换器,它带有一个计数器,能够计算频率为1 MHz =1μs分辨率的外部信号(例如来自函数发生器)。可以使用函数cbIn32(...,unsigned long * pointertovalue)查询实际计数器状态。
所以我的想法是在调用感兴趣的函数之前和之后查询计数器状态,然后计算差异。然而,当我在没有函数调用的情况下对这个差异进行评估时出现了疑问,这显示了rel。高波动(值在80到400μs左右)。我想知道,如果计算调用cbIn32()的平均时间(大约180μs)并从感兴趣的函数中花费的假定时间减去这是一个有效的解决方案。
所以我的前两个问题是:
或者,我们尝试使用getTickCount(),它似乎提供了合理的值。但是检查论坛显示它具有大约10毫秒的低分辨率,这将是令人不满意的(100μs分辨率将被赞赏)。但是,我们得到的值是在sub-ms范围内。 这让我想到了下一个问题:
我也尝试过用gprof,但它给了我“没有时间累积”,虽然我确信在包含opencv相关调用的函数中花费的时间至少是几毫秒。我甚至尝试使用ENABLE_PROFILING = ON重建opencv,但结果相同。我在某处读到你需要构建静态opencv库来启用分析,但我不确定这是否会改善这种情况。所以这里的问题是:
下一个替代方案是WINAPI的QueryPerformanceCounter()函数。我不知道如何使用它,但如果你推荐的话我会坚持到底。对这种方法的质疑:
我也尝试过verysleepy,但它以某种方式退出到早期(与其他.exe工作正常)。
新手友好的答案将非常非常感谢。我的目标是找到最精确的最简单的方法。我正在研究Win7 64bit,Eclipse和MinGW。
谢谢你的帮助......