C函数的平均执行时间不稳定

cen*_*3de 0 c linux time execution-time

我正在尝试优化朋友给我的一大堆代码,但我的平均执行时间的基线是非常不稳定的,我迷失了为什么/如何修复它.

码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

输出5个不同的运行:

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

我已经尝试了多种不同的方法来获得平均执行时间,但每一种方法要么不能给我一个足够精确的答案,要么给我一个完全不稳定的答案.我迷失了现在该做什么,任何帮助将不胜感激!

我知道这些类型的基准测试与系统有很大关系,所以我在下面列出了我的系统规格:

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

编辑

谢谢大家的意见,但我决定选择gprof而不是构建自己的.再一次谢谢你!

Kni*_*nug 5

你的线路int ret = tv.tv_usec; /* Finishing time */没有给你完成时间,它仍然是开始时间.你应该做一下struct timeval,gettimeofday用它来打电话并比较两者.

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