MeshKit
1.0
|
00001 #ifndef RCOUNTER_H 00002 #define RCOUNTER_H 00003 00004 #include <sys/time.h> 00005 00006 class RegisterCounter 00007 { 00008 public: 00009 typedef unsigned long long int register_counter_t; 00010 RegisterCounter() { rtotal = 0; } 00011 00012 void reset() { rtotal = 0; } 00013 void start() { rbegin = rdtsc(); } 00014 00015 void stop() 00016 { 00017 rend = rdtsc(); 00018 rtotal += rend-rbegin; 00019 } 00020 register_counter_t getCount() { return rtotal; } 00021 00022 private: 00023 register_counter_t rtotal, rbegin, rend; 00024 register_counter_t rdtsc() 00025 { 00026 register_counter_t x; 00027 __asm__ volatile(".byte 0x0f,0x31" : "=A" (x)); 00028 return x; 00029 } 00030 }; 00031 00032 class StopWatch 00033 { 00034 public: 00035 StopWatch(){ rtotal = 0; } 00036 00037 void reset(){ rtotal = 0; } 00038 00039 void start() { 00040 gettimeofday(&tp, 0); 00041 rbegin = (double)tp.tv_sec + (1.E-06)*tp.tv_usec; 00042 } 00043 00044 void stop() 00045 { 00046 gettimeofday(&tp, 0); 00047 rend = (double)tp.tv_sec + (1.E-06)*tp.tv_usec; 00048 rtotal += rend-rbegin; 00049 } 00050 00051 double getSeconds() { return rtotal; } 00052 00053 private: 00054 struct timeval tp; 00055 double rtotal, rbegin, rend; 00056 }; 00057 00058 00059 #endif 00060