diff --git a/ldgm-coding/ldgm-session-cpu.cpp b/ldgm-coding/ldgm-session-cpu.cpp index cfd15cae6..23bd2d57b 100644 --- a/ldgm-coding/ldgm-session-cpu.cpp +++ b/ldgm-coding/ldgm-session-cpu.cpp @@ -23,7 +23,7 @@ #include #include "ldgm-session-cpu.h" -//#include "timer-util.h" +#include "timer-util.h" using namespace std; @@ -256,8 +256,8 @@ LDGM_session_cpu::decode_frame ( char* received, int buf_size, int* frame_size, { // printf ( "buf_size: %d\n", buf_size ); - //struct timeval t0,t1; - //gettimeofday(&t0, 0); + Timer_util interval; + interval.start(); Tanner_graph graph; @@ -434,11 +434,11 @@ LDGM_session_cpu::decode_frame ( char* received, int buf_size, int* frame_size, *frame_size = 0; - //gettimeofday(&t1,0); - //long elapsed = (t1.tv_sec-t0.tv_sec)*1000000 + t1.tv_usec-t0.tv_usec; + interval.end(); + long elapsed = interval.elapsed_time_us(); //printf("time: %e\n",elapsed/1000.0 ); - //this->elapsed_sum2+=elapsed/1000.0; - //this->no_frames2++; + this->elapsed_sum2+=elapsed/1000.0; + this->no_frames2++; if(this->no_frames==150){ //printf("TIME: %f ms\n",this->elapsed_sum/(double)this->no_frames ); diff --git a/ldgm-coding/ldgm-session-gpu.cpp b/ldgm-coding/ldgm-session-gpu.cpp index c2cab8186..8d30e383e 100644 --- a/ldgm-coding/ldgm-session-gpu.cpp +++ b/ldgm-coding/ldgm-session-gpu.cpp @@ -32,7 +32,7 @@ #include "ldgm-session-gpu.h" #include "ldgm-session-cpu.h" #include "gpu.cuh" -//#include "timer-util.h" +#include "timer-util.h" #include "tanner.h" #include "crypto/crc.h" @@ -170,9 +170,8 @@ char *LDGM_session_gpu::decode_frame ( char *received_data, int buf_size, int *f { char *received = received_data; - //struct timeval t0, t1; - //gettimeofday(&t0, 0); - + Timer_util interval; + interval.start(); int p_size = buf_size / (param_m + param_k); // printf("%d p_size K: %d, M: %d, buf_size: %d, max_row_weight: %d \n",p_size,param_k,param_m,buf_size,max_row_weight); @@ -367,11 +366,11 @@ char *LDGM_session_gpu::decode_frame ( char *received_data, int buf_size, int *f // printf("CRC NOK\n"); // } - //gettimeofday(&t1, 0); - //long elapsed = (t1.tv_sec - t0.tv_sec) * 1000000 + t1.tv_usec - t0.tv_usec; + interval.end(); + long elapsed = interval.elapsed_time_us(); //printf("time: %e\n",elapsed/1000.0 ); - //this->elapsed_sum2 += elapsed / 1000.0; - //this->no_frames2++; + this->elapsed_sum2 += elapsed / 1000.0; + this->no_frames2++; return received + LDGM_session::HEADER_SIZE; diff --git a/ldgm-coding/ldgm-session.cpp b/ldgm-coding/ldgm-session.cpp index 673df72a7..1fe626247 100644 --- a/ldgm-coding/ldgm-session.cpp +++ b/ldgm-coding/ldgm-session.cpp @@ -24,7 +24,7 @@ #include #include "crypto/crc.h" #include "ldgm-session.h" -//#include "timer-util.h" +#include "timer-util.h" using namespace std; @@ -119,8 +119,8 @@ char* LDGM_session::encode_frame ( char* frame, int frame_size, int* out_buf_size ) { //printf("encode_frame\n"); - //struct timeval t0,t1; - //gettimeofday(&t0, 0); + Timer_util interval; + interval.start(); int buf_size; int ps; @@ -161,11 +161,11 @@ LDGM_session::encode_frame ( char* frame, int frame_size, int* out_buf_size ) this->encode ( (char*)out_buf, ((char*)out_buf)+param_k*ps ); - //gettimeofday(&t1,0); - //long elapsed = (t1.tv_sec-t0.tv_sec)*1000000 + t1.tv_usec-t0.tv_usec; + interval.end(); + long elapsed = interval.elapsed_time_us(); // printf("time: %e\n",elapsed/1000.0 ); - //this->elapsed_sum2+=elapsed/1000.0; - //this->no_frames2++; + this->elapsed_sum2+=elapsed/1000.0; + this->no_frames2++; return (char*)out_buf; @@ -267,21 +267,18 @@ LDGM_session::encode_hdr_frame ( char *my_hdr, int my_hdr_size, char* frame, int assert(LDGM_session::HEADER_SIZE >= 12); #endif - //Timer_util t; - - - //struct timeval t0, t1; - //gettimeofday(&t0, 0); + Timer_util interval; + interval.start(); this->encode ( (char*)out_buf, ((char*)out_buf)+param_k*ps ); - //gettimeofday(&t1,0); - //long elapsed; + interval.end(); + long elapsed; - //elapsed = (t1.tv_sec-t0.tv_sec)*1000000 + t1.tv_usec-t0.tv_usec; + elapsed = interval.elapsed_time_us(); // printf("time: %e\n",elapsed/1000.0 ); - //this->elapsed_sum2+=elapsed/1000.0; - //this->no_frames2++; + this->elapsed_sum2+=elapsed/1000.0; + this->no_frames2++; // gettimeofday(&t1,0); diff --git a/ldgm-coding/timer-util.h b/ldgm-coding/timer-util.h index 473cfa777..61970f876 100644 --- a/ldgm-coding/timer-util.h +++ b/ldgm-coding/timer-util.h @@ -10,72 +10,50 @@ * ===================================================================================== */ -#ifndef WIN32 - #ifndef TIMER_INC #define TIMER_INC -#include +#include + +#if defined __GNUC__ && __GNUC__ == 4 && __GNUC_MINOR__ == 6 // compat, GCC 4.6 didn't have steady_clock +#define steady_clock system_clock +#endif /*! \class Timer_util * \brief This class implements timer utils */ class Timer_util { + private: + std::chrono::time_point start_time; + std::chrono::time_point end_time; + public: - /** Constructor */ - Timer_util () {} - /** Destructor */ - ~Timer_util () {} + inline void start() { + start_time = std::chrono::steady_clock::now(); + } + + inline void end() { + end_time = std::chrono::steady_clock::now(); + } /** - * Computes time elapsed between start and end in second (as a real value) + * Computes time elapsed between start and end in seconds (as a real value) * - * @param start Point in time where timing started - * @param end Point in time where timing stopped * @return Elapsed seconds as double value */ - double - elapsed_time ( timespec start, timespec end) + inline double + elapsed_time () { - timespec ts = dif(start, end); - double temp = ts.tv_nsec/1000000; - temp /= 1000; - double clock = ts.tv_sec + temp; - return clock; + return std::chrono::duration_cast>(end_time - start_time).count(); } - double - elapsed_time_us ( timespec start, timespec end) + inline long + elapsed_time_us () { - timespec ts = dif(start, end); - double temp = ts.tv_nsec/1000; -// temp /= 1000; - double clock = ts.tv_sec + temp; - return clock; + return std::chrono::duration_cast>(end_time - start_time).count(); } - /** - * @param start Point in time where timing started - * @param end Point in time where timing stopped - * @return Elapsed time as timespec structure - */ - timespec - dif(timespec start, timespec end) { - timespec temp; - if ((end.tv_nsec-start.tv_nsec)<0) { - temp.tv_sec = end.tv_sec-start.tv_sec-1; - temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec; - } else { - temp.tv_sec = end.tv_sec-start.tv_sec; - temp.tv_nsec = end.tv_nsec-start.tv_nsec; - } - return temp; - } - - }; /* ----- end of class Timer_util ----- */ #endif /* ----- #ifndef TIMER_INC ----- */ -#endif // WIN32 -