gpt4 book ai didi

linux - 在组装中测量时间

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:42:19 25 4
gpt4 key购买 nike

这几个小时以来,我一直在努力寻找一种方法来测量汇编代码中的时间间隔。到目前为止,我所看到的是我可以查询 CPU 周期数,但当然,我需要知道 CPU 频率才能将周期数转换为时间。我找到了 rdmsr 指令,但它是 ring0 指令,ring0 不是我可以放入我的代码的东西。

我找到的一些示例为此调用了 Windows Query* 函数,但我没有在 Windows 上运行。我有什么办法可以测量用户级别的时间间隔吗?还有其他获取频率的方法,或者我可以直接访问的其他时钟吗?一秒分辨率的系统时钟当然是不可能的:)

最佳答案

我花了很长时间使用周期计数器,并最终得出(可能是显而易见的)结论:RDTSC 计算的是周期,而不是时间。它永远不会计算时间,因为电源管理单元不断地提高和降低计算机的时钟。因此,循环计数器对于测量循环非常精确,以实时单位随机数量可怕地关闭。我相信英特尔最终通过将周期计数器锁定到不受 PMU 影响的时钟来解决这个问题,但我没有对此进行调查。

Windows Query* 函数实际上并不使用 RDTSC 循环计数器。我一直以为他们这样做了,直到我尝试测量真的小周期并发现它有一个 14MHz(?)的滴答声,结果证明是 PCI 数据总线时钟。

最重要的是,每个内核都有自己的循环计数器。因此在执行 RDTSC 操作码时必须注意您使用的是哪个内核。每个内核都有自己的 PMU。

Windows 用户模式下最好的计时器是 QueryPerformanceCounter() 和 QueryPerformanceFrequency()。

关于linux - 在组装中测量时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33265677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com