当前位置:  开发笔记 > 运维 > 正文

如何准确测量c ++函数使用的时钟周期?

如何解决《如何准确测量c++函数使用的时钟周期?》经验,为你挑选了1个好方法。

我知道我必须使用:rdtsc.测量的函数是确定性的,但结果远非可重复(我从运行到运行得到5%的振荡).可能的原因是:

上下文切换

缓存未命中

你知道其他原因吗?如何消除它们?



1> Eduard - Gab..:

TSC(rdtsc使用的)通常在多处理器系统上不同步.设置CPU亲和性以将进程绑定到单个CPU可能会有所帮助.

您还可以从HPET计时器获取时间戳(如果可用),这些计时器不会出现同样的问题.

至于可重复性,这些差异是正确的.您可以禁用缓存,为进程提供实时优先级和/或(如果在Linux或类似的情况下)使用较低的固定定时器中断频率(执行时间分片的那个)重新编译内核.你不能完全消除差异,至少不容易消除,而不是常规的CPU + OS组合.

一般而言,为了便于编码,可靠性和可移植性,我建议您使用操作系统提供的功能.如果它提供高精度计时器,请使用适当的OS助手.

(以防万一你正在尝试对加密系统进行时间攻击,好吧,你将不得不忍受1.这种随机性和2.一般防御使得系统因各种原因无法预测,所以功能可能不会在时间上是确定性的.)

编辑:添加了关于操作系统可提供的计时器的段落.

编辑:这是指Linux.要将进程绑定到单个CPU(从RDTSC获得准确的读取),可以使用sched_setaffinity(2).而这里的从我的项目之一,将其用于其他目的(映射线程CPU)的一些代码.这应该是你的第一次尝试.对于HPET,只要内核和机器支持这些定时器,就可以使用这些常规POSIX调用.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有