RicardasSim

profiling linux code nanosec

Jan 3rd, 2019
602
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.64 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <time.h>
  5.  
  6. /*
  7. struct timespec {
  8.     time_t tv_sec;  //seconds
  9.     long tv_nsec;   //nanoseconds
  10. };
  11.  
  12. CLOCK_REALTIME
  13. CLOCK_PROCESS_CPUTIME_ID
  14. CLOCK_THREAD_CPUTIME_ID
  15.  
  16. startTime = clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&t1);
  17. endTime = clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&t2);
  18. elapsed CPU time: endTime - startTime;
  19.  
  20. */
  21.  
  22. // profiling code using clock_gettime article https://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime/
  23.  
  24. struct timespec diff(struct timespec start,struct timespec end)
  25. {
  26.     struct timespec temp;
  27.    
  28.     if ((end.tv_nsec-start.tv_nsec)<0) {
  29.         temp.tv_sec = end.tv_sec-start.tv_sec-1;
  30.         temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec;
  31.     } else {
  32.         temp.tv_sec = end.tv_sec-start.tv_sec;
  33.         temp.tv_nsec = end.tv_nsec-start.tv_nsec;
  34.     }
  35.    
  36.     return temp;
  37. }
  38.  
  39.  
  40. int
  41. main (int argc, char **argv)
  42. {
  43.  
  44.     struct timespec time1, time2;
  45.    
  46.     int a = 0;
  47.    
  48.     clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
  49.  
  50.     for(int i = 0;i<100;i++)
  51.     {
  52.         a++;
  53.     }
  54.    
  55.     clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
  56.    
  57.     printf("a: %d\n", a);
  58.    
  59.     //printf("%ld:%ld\n",diff(time1,time2).tv_sec, diff(time1,time2).tv_nsec);
  60.     printf("%ld:%09ld\n",diff(time1,time2).tv_sec, diff(time1,time2).tv_nsec);
  61.    
  62.     clock_gettime(CLOCK_REALTIME, &time1);
  63.  
  64.     sleep(1);
  65.    
  66.     clock_gettime(CLOCK_REALTIME, &time2);
  67.    
  68.     //printf("%ld:%ld\n",diff(time1,time2).tv_sec, diff(time1,time2).tv_nsec);
  69.     printf("%ld:%09ld\n",diff(time1,time2).tv_sec, diff(time1,time2).tv_nsec);
  70.    
  71.     return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment