vtlmks

timertests

Sep 9th, 2021 (edited)
1,563
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.49 KB | None | 0 0
  1. //
  2. // clang -O2 -march=native timetest.c -o timetest
  3. //
  4.  
  5. #include <time.h>
  6. #include <stdint.h>
  7. #include <stdio.h>
  8. #include <limits.h>
  9.  
  10. static long diff_nano(struct timespec *start, struct timespec *end) {
  11.     return ((end->tv_sec * (1000000000)) + (end->tv_nsec)) - ((start->tv_sec * 1000000000) + (start->tv_nsec));
  12. }
  13.  
  14. int main(int argc, char **argv) {
  15.     struct timespec start, now, delay_time;
  16.     long t;
  17.  
  18.     delay_time.tv_sec = 0;
  19.     delay_time.tv_nsec = 9000000;       // 9ms
  20.  
  21.     long lowest = LONG_MAX;
  22.     long highest = 0;
  23.     long tt = 0;
  24.  
  25.     volatile uint64_t a[4096];
  26.  
  27.     clock_gettime(CLOCK_MONOTONIC_RAW, &start);
  28.     while(1) {
  29.  
  30.         //
  31.         // DO THE STUFF
  32.         //
  33.         for(size_t i = 0; i < 4096; ++i) {
  34.             a[i]++;
  35.         }
  36.  
  37.  
  38.         //
  39.         // NOTE(peter): Wait for 10ms
  40.         //
  41.         clock_nanosleep(CLOCK_MONOTONIC_RAW, 0, &delay_time, 0);    // 9ms
  42.         clock_gettime(CLOCK_MONOTONIC_RAW, &now);
  43.         while(diff_nano(&start, &now) < 10000000) {                         // remaining 1ms
  44.             clock_gettime(CLOCK_MONOTONIC_RAW, &now);
  45.         }
  46.         t = diff_nano(&start, &now);
  47.         start.tv_sec = now.tv_sec;
  48.         start.tv_nsec = now.tv_nsec;
  49.  
  50.         // NOTE(peter): Print result on change
  51.         if(t < lowest) {
  52.             lowest = t;
  53.             printf("%ld ns (l: %ld  h: %ld)\n", t, lowest, highest);
  54.         }
  55.         if(t > highest) {
  56.             highest = t;
  57.             printf("%ld ns (l: %ld  h: %ld)\n", t, lowest, highest);
  58.         }
  59.  
  60.         // NOTE(peter): Print result every 100 frames...
  61.         if(tt++ == 100) {
  62.             printf("%ld ns (l: %ld  h: %ld)\n", t, lowest, highest);
  63.             tt = 0;
  64.         }
  65.     }
  66.  
  67.     return 0;
  68. }
  69.  
Add Comment
Please, Sign In to add comment