The C `clock()` function just returns a zero

前端 未结 6 696
醉话见心
醉话见心 2020-11-30 07:58

The C clock() function just returns me a zero. I tried using different types, with no improvement... Is this a good way to measure time with good precision?

相关标签:
6条回答
  • 2020-11-30 08:19

    Calling sleep() isn't going to use up any CPU time. You should see a little difference, though. I corrected your printf type mismatch bug in this line:

    printf("start = %.20f\nend   = %.20f\n", start, end);
    

    And it gave reasonable results on my machine:

    start = 1419
    end   = 1485
    delta = 66
    cpu_time_used  = 0.000066000000000
    CLOCKS_PER_SEC = 1000000
    

    You might try gettimeofday() to get the real time spent running your program.

    0 讨论(0)
  • 2020-11-30 08:26

    man clock. It's not returning what you think it is. Also man gettimeofday - it's more likely what you want.

    0 讨论(0)
  • 2020-11-30 08:27
     printf("start = %.20f\nend   = %.20f\n", start, end);
    

    should be:

     printf("start = %d\nend   = %d\n", start, end);
    
    0 讨论(0)
  • 2020-11-30 08:30

    clock_t is an integer type. You can't print it out with %f. See Fred's answer for why the difference is 0.

    0 讨论(0)
  • 2020-11-30 08:33

    clock() reports CPU time used. sleep() doesn't use any CPU time. So your result is probably exactly correct, just not what you want.

    0 讨论(0)
  • 2020-11-30 08:33

    You probably need

    double get_wall_time(){ struct timeval time; if (gettimeofday(&time,NULL)){ return 0; } return (double)time.tv_sec + (double)time.tv_usec * .000001; } and usage something like

    double wall0 = get_wall_time(); double cpu0 = get_cpu_time(); for(long int i = 0; i<=10000000;i++){ func1(); } double wall1 = get_wall_time(); double cpu1 = get_cpu_time(); cout << "Wall Time = " << wall1 - wall0 << endl; cout << "CPU Time = " << cpu1 - cpu0 << endl;

    instead of clock()

    as clock only and only counts time spent in CPU only based on performance counters. but you can get result by using above function. just to verify your application run it with time command

    like time ./a.out

    output of time command :

    real 0m5.987s user 0m0.674s sys 0m0.134s

    and output of custom function Wall Time = 5.98505 CPU Time = 0.8

    0 讨论(0)
提交回复
热议问题