统计程序运行时间的错误示范

Motivation:对程序实现测速。

初始想法是使用两点计时的方式,在程序运行语句之前设置时间点,程序运行语句之后设置时间点,然后计算二者的差值。

考虑到程序执行时间的不确定性,设置程序执行1K次。

代码如下:

  //Time
  clock_t first, second;

  // Run
  printf("rknn_run\n");

  double statistics = 0;
  double num = 0;
  for (int i = 0; i < 1000; i++) {
    first = clock();
    ret = rknn_run(ctx, nullptr); #程序运行语句
    second = clock();
    num = (double)(second-first)/CLOCKS_PER_SEC;
    printf("%d  %f seconds\n", i, num);
    statistics += num;
  }
  printf("Statistics: %f \n", statistics/1000);  

发现实际上记录的时间并不正确。后面尝试寻找原因。

可以采用最原始的方法,程序循环执行一个比较大的次数,统计循环执行的总时间,然后求平均。

参考链接:

  1. #include 库函数详解_大米粒ing的博客-CSDN博客_#include time.h 有人总结成这么几句,的确是经典,自己好好编程试试效果吧,两个类型:time_t:表示距离 UTC 时间 1970-01-01 00:00:00 的秒数。也叫做日历时。struct tm:通常用于存储本地时。几个函数:time:获取当前系统时间(UTC时间)的time_t值。ctime:将time_t值转换为表示本地时间的字符串。gmttime:将thttps://blog.csdn.net/chenyiming_1990/article/details/8682552
  2. null头文件#include clock_t start, end;//定义/*开始时间*/start = clock();......end = clock();/*结束时间*/得到运行时间double time = (double)(end - start)/CLOCKS_PER_SEC;...https://blog.csdn.net/dsbss/article/details/120937234
  3. #include <time.h>_迷糊小旋风的博客-CSDN博客_#include #include clock_t clock(void);这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数。clock_t是用来保存时间的长整形数据类型。还定义了一个常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个clock tick,一般取值为1000。核心代码: double TheTimes; printf("做%ld次空循环需要的时间为",i)https://blog.csdn.net/weixin_49828466/article/details/117333648

你可能感兴趣的:(c++,开发语言)