Miracl库中的执行时间

时间:2016-08-08 20:24:04

标签: c performance

在bmark程序中,执行时间计算如下:

例如,对于EC点乘法:

#define MIN_TIME 10.0
#define MIN_ITERS 20 
start=clock();
do {
ecurve_mult();
iterations++;
elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
} while (elapsed<MIN_TIME || iterations<MIN_ITERS);
elapsed=1000.0*elapsed/iterations;
printf("ER - %8d iterations",iterations);
printf(" %8.2lf ms per iteration\n",elapsed);

问题是:为什么不简单地使用:

start=clock();
ecurve_mult();
elapsed=(clock()-start)/(double)CLOCKS_PER_SEC;
printf("%f\n",elapsed*1000.0);

换句话说,使用MIN_TIME和MIN_ITERS

的目的是什么

注意:两个代码给出不同的输出。

2 个答案:

答案 0 :(得分:0)

此代码多次运行ecurve_mult函数以获得平均运行时间。

MIN_ITERS指定运行该函数的最少次数,而MIN_TIME指定最小累计运行时间。

因此,在这种情况下,该函数必须运行20次或总共10秒,以先发生者为准。

相反,第二个代码片段只运行一次代码。

顺便说一句,以下是无效的:

printf(elapsed*1000.0);

应该是:

printf("%f\n",elapsed*1000.0);

答案 1 :(得分:0)

代码试图执行ecurv_mult()足够的时间来弥补时间测量中缺乏精确性。所以循环确保它至少执行20次并持续至少10秒。

由于某些机器可能如此之快以至于执行20次并不足以获得准确的精确度,因此我们确保这些机器至少持续10秒,无论我们执行20次这么快的速度。

如果我们只做一次,由于时钟的分辨率太高(例如,当基准测试在500us运行时时钟给我们1ms),我们的性能测量不会非常准确。