gpt4 book ai didi

performance - 在 x86 上获取当前时间的指令

转载 作者:行者123 更新时间:2023-12-04 12:49:54 25 4
gpt4 key购买 nike

是否有 x86 指令来获取当前时间?

基本上......类似于clock_get_time的替代品......具有最小开销的东西......我并不真正关心以任何特定格式获取时间......只要它是我可以使用的格式。

基本上我正在做一些工作来“检测多少物理现实生活时间”已经过去了......我希望能够尽可能频繁地测量时间!

我想你可以想象我正在做类似分析应用程序的事情...... :)

我真的需要积极有效地访问硬件时间。所以理想情况下......一些ASM来获取时间......将它存储在某个地方......然后稍后将其按摩成我可以实际处理的某种格式。

我对 _rdtsc 不感兴趣,因为它衡量经过的周期数。我需要知道执行了多少物理时间......而不是可能因热波动等而变化的周期......

最佳答案

对于分析,通常根据 CPU 时钟周期而不是挂钟时间进行分析最有用。 CPU 动态时钟(涡轮增压和节能)使得在测量周期开始之前让 CPU 加速到全速很烦人。

如果之后您仍然需要挂钟时间:

最近的 x86 CPU 有一个以固定速率运行的 TSC,不管 CPU 频率调整以节省电量。此外,当 CPU 停止时,TSC 不会停止。 (即没有工作要做,所以它运行 HLT 指令以在低功耗模式下等待中断。)

事实证明,在硬件中有效访问有用的时间源比实际的时钟周期计数器更有用,所以这就是 RDTSC在推出后演变为几代 CPU。现在我们又回到使用硬件性能计数器来测量时钟周期。

在 Linux 中,查找 constant_tscnonstop_tsc在 CPU 功能标志中 /proc/cpuinfo . IDK如果有CPUID那些位。如果没有,请使用 Linux 的代码(如果您可以使用 GPL 代码)。

在具有这两个关键特性的 CPU 上,Linux 使用 TSC 作为其时钟源 IIRC。

获取用户空间当前时间的最低开销方法是计算 RDTSC 之间的转换。滴答和实时。在分析时,您可能只存储 64 位 TSC 快照,然后转换为实时。 (所以你可以处理 TSC 环绕)。 RDTSC只需要大约 24 个周期(Agner Fog 的指令表,Intel Haswell)。我认为系统调用的开销将比这高一个数量级。 (无论如何,内核将不得不在某处执行 RDTSC)。

阿格纳雾有 documented his profiling / timing methods ,并有一些示例代码。我最近没看过,但它可能对这个应用程序有用。

关于performance - 在 x86 上获取当前时间的指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31830314/

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