gpt4 book ai didi

ios - 来自 mach_absolute_time() 的不稳定计时结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:48:09 27 4
gpt4 key购买 nike

我正在尝试在 iOS 上优化一个函数(FFT),并且我已经设置了一个测试程序来计算它在数百次调用中的执行时间。我在函数调用前后使用 mach_absolute_time() 来计时。我正在运行 iOS 6 的第四代 iPod touch 上进行测试。

大多数计时结果彼此大致一致,但有时一次运行会比其他运行时间长得多(长 100 倍)。

我很确定这与我的实际功能无关。每次运行都有相同的输入数据,并且是纯数值计算(即没有系统调用或内存分配)。如果我用一个空的 for 循环替换 FFT,我也可以重现这一点。

有没有其他人注意到这样的事情?

我目前的猜测是我的应用程序的线程以某种方式被操作系统中断了。如果是这样,有什么办法可以防止这种情况发生? (这不是将在 App Store 上发布的应用程序,因此非公开 API 也可以。)

我不再拥有 iOS 5.x 设备,但我很确定在更新到 iOS 6 之前不会发生这种情况。

编辑:这是一种更简单的重现方法:

for (int i = 0; i < 1000; ++i)
{
uint64_t start = mach_absolute_time();
for (int j = 0; j < 1000000; ++j);
uint64_t stop = mach_absolute_time();
printf("%llu\n", stop-start);
}

在调试中编译它(因此 for 循环没有被优化掉)并运行;大多数值都在 220000 左右,但偶尔会有 10 倍或更多的值。

最佳答案

根据我的经验,mach_absolute_time 并不可靠。现在我改用 CFAbsoluteTime。它以秒为单位返回当前时间,精度比秒高得多。

const CFAbsoluteTime newTime = CFAbsoluteTimeGetCurrent();

关于ios - 来自 mach_absolute_time() 的不稳定计时结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12775645/

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