【问题标题】:C - Measure Function Time ExecutionC - 测量功能时间执行
【发布时间】:2015-07-25 10:30:46
【问题描述】:

我想测量 insert_sort 函数的已用时间。但是,结果是 0.0000000 秒。我能做些什么?我尝试了其他时间库。不幸的是,它没有......谢谢。我又写了。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

int main(void) 
{
  int number=1;
  if(number == 1)
  {
     struct timeval start, end;
     gettimeofday(&start, NULL);

     for(int i=0; i<5;i++)
     {
     insertion_sort( kelime, n );   
     }
     gettimeofday(&end, NULL);

     printf("Elapsed time is %.10f",(end.tv_sec * 1000000 + end.tv_usec)-   (start.tv_sec * 1000000 + start.tv_usec));
 }

【问题讨论】:

  • 查看rdtsc 内在函数。

标签: c function time execution measure


【解决方案1】:

你的计算和打印是:

 printf("Elapsed time is %.10f",
        (end.tv_sec * 1000000 + end.tv_usec) -
        (start.tv_sec * 1000000 + start.tv_usec));

您正在尝试使用浮点格式打印整数值;这不会导致幸福。假设整数运算没有溢出,那么可以使用:

 printf("Elapsed time is %.6f",
        ((end.tv_sec * 1000000 + end.tv_usec) -
        (start.tv_sec * 1000000 + start.tv_usec)) / 1000000.0);

这会给你一个浮点值以浮点格式打印。当gettimeofday() 仅支持 6 位小数时,请求 10 位小数是没有意义的(并且 6 位小数是默认的,但明确性通常很好)。

你也可以使用:

 printf("Elapsed time is %.6f",
        ((end.tv_sec * 1000000.0 + end.tv_usec) -
         (start.tv_sec * 1000000.0 + start.tv_usec)) / 1000000);

关键是要确保足够的计算是在浮点运算中完成的。

【讨论】:

  • @Mr.Gurbuz:尝试对 5,000 个元素进行排序,而不仅仅是 5 个。或者大胆地选择 50,000,甚至 500,000。不要走得更高,否则您可能会用完堆栈空间(如果您在 Wijndows 上,我不确定您在 500.000 时是否安全)。基本上,对 5 个元素进行排序并不会花费足够长的时间来注册。
【解决方案2】:

time 只有秒粒度。而您的代码最坏的情况可能是微秒或毫秒。请改用gettimeofday,它具有微秒级粒度。

但请注意,timegettimeofday 都会为您提供挂墙时间。如果你想要CPU时间clock可以使用。

【讨论】:

  • 我试过了。但是,我没有工作代码。我该怎么办?
  • Error] 't0' undeclared (第一次在这个函数中使用) [注意] 每个未声明的标识符对于它出现在 [Error] 't1' undeclared 中的每个函数只报告一次(第一次在这个函数中使用)
  • 显示所有代码。您尚未在该代码 sn-p 中声明 t0t1。如果这确实是您的所有代码,那么如果不是编译错误,您还期望什么?
  • 您需要将 t0 和 t1 声明为 struct timevals。请注意,Windows 没有此功能。您可以使用时钟,但对于 Windows,自动收报机仅以 64hz 运行,因此分辨率仅为 15.625 毫秒。您可以使用QueryPerformanceCounter,但这仅适用于 Windows。
  • %.10f。这些字段不是浮点数,而是长整数(通常)。试试%ld
猜你喜欢
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
相关资源
最近更新 更多