timerutil.h

来自「gmeans-- Clustering with first variation」· C头文件 代码 · 共 131 行

H
131
字号
// Steven Farago// Drew Lamar//// Numerical Analysis -- Linear Algebra// Final Project////// Defines the TimerUtil class.  Used in the main code to determine the  // runtime of the parser.//#include <unistd.h>#include <iostream.h>#include <sys/types.h>#include <sys/time.h>#include <sys/resource.h>class TimerUtil { private:  timeval startTime;    timeval stopTime;  long sec;  long microsec;  timeval usrStartTime, sysStartTime; public:  // Note: constructor automatically sets start time  TimerUtil() {    setStartTime();  }  // Call this at the time you wish to start timing.  void setStartTime() {    sec = microsec = 0;    gettimeofday(&startTime, NULL);    struct rusage r_usage;    getrusage(RUSAGE_SELF, &r_usage);    usrStartTime.tv_sec = r_usage.ru_utime.tv_sec;    usrStartTime.tv_usec = r_usage.ru_utime.tv_usec;    sysStartTime.tv_sec = r_usage.ru_stime.tv_sec;    sysStartTime.tv_usec = r_usage.ru_stime.tv_usec;  }    // Call this at the time you wish to end timing.  void setStopTime() {    gettimeofday(&stopTime, NULL);        sec = stopTime.tv_sec - startTime.tv_sec;    microsec = stopTime.tv_usec - startTime.tv_usec;        if (microsec < 0) {      microsec+=1000000;      sec--;    }  }      void setStopTime(ostream& os, const char* notes) {    struct rusage r_usage;    getrusage(RUSAGE_SELF, &r_usage);        long usec = r_usage.ru_utime.tv_sec - usrStartTime.tv_sec;    long umsec = r_usage.ru_utime.tv_usec - usrStartTime.tv_usec;    if (umsec < 0) {      umsec += 1000000;      usec--;    }    long ssec = r_usage.ru_stime.tv_sec - sysStartTime.tv_sec;    long smsec = r_usage.ru_stime.tv_usec - sysStartTime.tv_usec;    if (smsec < 0) {      smsec += 1000000;      ssec--;    }    setStopTime();    os << notes << endl;    os << "CPU Usage: user = " << usec       << " seconds " << umsec << " us, system = " << ssec        << " seconds " << smsec << "us" << endl;    os << "ELAPSED Time: " << sec << " seconds "       << microsec << " us" << endl;  }void setStopTime(ostream& os, const char* notes, const int iter) {    struct rusage r_usage;    getrusage(RUSAGE_SELF, &r_usage);        long usec = r_usage.ru_utime.tv_sec - usrStartTime.tv_sec;    long umsec = r_usage.ru_utime.tv_usec - usrStartTime.tv_usec;    if (umsec < 0) {      umsec += 1000000;      usec--;    }    long ssec = r_usage.ru_stime.tv_sec - sysStartTime.tv_sec;    long smsec = r_usage.ru_stime.tv_usec - sysStartTime.tv_usec;    if (smsec < 0) {      smsec += 1000000;      ssec--;    }    setStopTime();    os << notes << endl;    os << "CPU Usage: user = " << usec       << " seconds " << umsec << " us, system = " << ssec        << " seconds " << smsec << "us" << endl;    os << "Time per iteration = "<<(usec+umsec/1e6)/iter<<endl;    os << "ELAPSED Time: " << sec << " seconds "       << microsec << " us" << endl;  }  void getTotalElapsedSec(ostream & os){    struct rusage r_usage;    getrusage(RUSAGE_SELF, &r_usage);    os << "CPU Usage: user = " << r_usage.ru_utime.tv_sec       << " seconds " << r_usage.ru_utime.tv_usec << " us, system = " << r_usage.ru_stime.tv_sec       << " seconds " << r_usage.ru_stime.tv_usec << "us" << endl;  }  // Returns the seconds between calls to setStartTime and setEndTime  long getElapsedSec() {return sec;}    // Returns any extra microseconds after taking to account elapsed   // seconds  long getElapsedMicrosec() {return microsec;}   };

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?