我正在尝试优化朋友提供给我的代码块,但是我的平均执行时间基线非常不稳定,我不知道为什么/如何解决它。

码:

#include <sys/time.h>
#include <time.h>
#include <stdio.h>
#include "wall.h" /* Where his code is */

int main()
{
    int average;
    struct timeval tv;
    int i;

    for(i = 0; i < 1000; i++) /* Running his code 1,000 times */
    {
        gettimeofday(&tv, NULL); /* Starting time */ 

        start(); /* Launching his code */ 

        int ret = tv.tv_usec; /* Finishing time */ 
        ret /= 1000; /* Converting to milliseconds */ 
        average += ret; /* Adding to the average */ 
    }
    printf("Average execution time: %d milliseconds\n", average/1000);  
    return 0;
}

5种不同运行的输出:

  • 804毫秒
  • 702毫秒
  • 394毫秒
  • 642毫秒
  • 705毫秒

我尝试了多种不同的方法来获取平均执行时间,但是每种方法都不能给我足够准确的答案,或者给我一个完全不稳定的答案。 我不知道该怎么办,任何帮助将不胜感激!

我知道这些基准测试类型很大程度上取决于系统,因此我在下面列出了我的系统规格:

  • Ubuntu 12.10 x64
  • 7.8 GiB内存
  • 英特尔酷睿i7-3770 CPU @ 3.40GHz x 8
  • GeForce GT 620 / PCIe / SSE2

编辑

谢谢大家的投入,但是我决定使用gprof而不是构建自己的gprof。 再一次感谢你!

===============>>#1 票数:5

您的行int ret = tv.tv_usec; /* Finishing time */ int ret = tv.tv_usec; /* Finishing time */没有给您结束时间,它仍然是开始时间。 您应该创建第二个struct timeval ,并使用它调用gettimeofday并将两者进行比较。

但是,使用clock()可能更容易。 当然,如果您想真正分析代码的性能,请使用事件探查器

===============>>#2 票数:1 已采纳

这里存在几个问题,其中包括基准测试正在执行的代码的零细节,以及您使用了“ gettimeofday()”的方式有误(可能是不适当的)。

建议:

1)不要使用“ gettimeofday()”:

http://blog.habets.pp.se/2010/09/gettimeofday-should-never-be-used-to-measure-time

2)用gprof补充您的“经过时间”:

http://www.cs.duke.edu/~ola/courses/programming/gprof.html

  ask by centip3de translate from so

未解决问题?本站智能推荐: