gpt4 book ai didi

android - 如何在 Android native 代码中获取高分辨率计时器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:57:47 34 4
gpt4 key购买 nike

我正在寻找一种在 Android 上获取高分辨率计时器(时钟源)的方法。这必须是 native 代码,并且可能相当不可移植。我想要微秒分辨率,或者更好。对于我的特定应用,分辨率比精度更重要,单调的计时器是最好的。我一直在使用 Android 4.0.3 在特定的 ARMv7 芯片组上进行测试。

到目前为止我尝试了什么:

  • clock_gettime(CLOCK_MONOTONIC):在目标硬件上以 1ms 为单位递增(EDIT 最初我认为是 10ms,因为我的代码中有错误,1ms 是正确的但仍然不是很好)
  • gettimeofday():类似于clock_gettime

我还没有尝试过的:

另见(相关问题,但没有答案):

最佳答案

您可以使用 CPU 周期计数器来测量两个时刻之间的周期数,然后将其转换为秒。为了保证 CPU 以其标称频率运行,将其缩放调节器切换到“性能”模式(Play 商店中有许多应用程序可以执行此操作,但需要根访问权限)。您还必须很好地冷却您的设备,以确保 CPU 不会节流(这对手机来说尤其重要)。最后,您必须将您的代码绑定(bind)到单个核心(最好是核心 0,因为其他核心可以被系统置于离线状态)。

有两种方法可以访问 ARM 上的循环计数器:使用 Linux 中的 perf_event 子系统或直接从 CP15 协处理器读取循环计数器。 perf_event 方法仅在 Linux 内核编译时支持此子系统(文件/proc/sys/kernel/perf_event_paranoid 存在)并且读取事件计数器不受限制(文件/proc/sys/kernel/perf_event_paranoid 包含 0 或 - 1;使用 root 访问权限,您可以覆盖此文件中的值)。 CP15 方法只有在启用用户模式访问性能计数器时才有效(默认情况下它始终被禁用,并且您必须修补内核或使用内核驱动程序来启用它)。 Yeppp! library (我是作者)能够在任何可用的情况下使用任何一种方法,并且包括一个内核模式驱动程序以启用用户模式访问性能计数器。你可能会发现 this example有帮助。

关于android - 如何在 Android native 代码中获取高分辨率计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14975349/

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