【发布时间】:2013-09-17 16:36:11
【问题描述】:
我目前正在测试不同的算法,这些算法确定整数是否是实数正方形。在我的研究中,我在 SOF 发现了这个问题: Fastest way to determine if an integer's square root is an integer
我对编程场景比较陌生。在测试问题中提出的不同算法时,我发现这是一个
bool istQuadratSimple(int64 x)
{
int32 tst = (int32)sqrt(x);
return tst*tst == x;
}
实际上比 A. Rex 在我发布的问题中提供的更快。我使用 NS-Timer 对象进行此测试,并使用 NSLog 打印我的结果。
我现在的问题是:如何以专业的方式进行速度测试?如何获得与我在上面发布的问题中提供的结果相同的结果?
【问题讨论】:
-
创建一个循环调用函数几千次。
-
So You Want To Write Your Own Benchmark presentation(Java,但足够接近)。 Top benchmarking question on StackOverflow(也是 Java,但包含有用的通用技巧)。
-
调用函数的次数足够多,至少需要 1 秒的实时时间。这也将允许其他进程执行,模拟真实环境。否则,您可能看不到缓存未命中的影响。
-
鉴于今天的机器每秒能够进行数百万次计算以可视化不同算法速度之间的巨大差异,因此您应该运行所需的代码片段数百或可能数千次,然后取总运行时间的平均值。唯一可以看到的速度有相当大的差异。希望对您有所帮助。
标签: c performance profiling benchmarking micro-optimization