Timing
Contents
Timing
The examples in this section assume the following inclusion and namespace declaration:
#include <hippcntl.h> /* The CNTL module of HIPP */
#include <unistd.h> /* sleep() */
using namespace HIPP;
This includes and exposes all the declarations in the CNTL module. For
detailed compilation guide, see the API-ref CNTL Module Overview.
All the example codes in this section can be downloaded
at cntl/timing.cpp.
The Ticker Class
HIPP provides class Ticker for timing the events in the
execution of a program.
At each call of the method tick(),
the ticker produces a record which contains the time duration since the last call
of tick(). For example:
Ticker tk;
for(int i=0; i<4; ++i){
tk.tick(0);
// Perform some time-consuming computation, e.g.,
sleep(1);
tk.tick(1);
}
Where a ticker instance is defined. In the for-loop, tick(0) updates
the internal clock of the ticker. tick(1) updates the internal clock and
produces a record.
A user-passed message can be attached with the record. Just pass a std::string
object instead of 1 to tick(). For example:
tk.tick(0);
sleep(1);
tk.tick("sleep more");
To view the records, you can print a short summary for them:
pout << tk.summary(), endl;
This outputs:
5 records, duration 1.00037 +/- 5.95633e-08
More detailed information can be inspected by directly printing the ticker object itself:
pout << tk;
This outputs:
Ticker instance [loc=0x7ffc6bf2cbc0, size=32, align=8]
----------
5 records, duration 1.00025 +/- 4.77032e-09
0: 1.00029
1: 1.00036
2: 1.00023
3: 1.00022
4: 1.00016, sleep more
query_all() returns a vector
of all the records. query() returns a individual
record by its index. query_last() returns the last
record. From them you can loop at the detail of each record. For example:
auto & all_records = tk.query_all();
pout << all_records.size(), " records found\n",
"The first => ", all_records[0], " sec\n",
"The second => ", tk.query(1), " sec\n";
auto & record = tk.query_last();
pout << "The last, duration=", record.dur.count(), " sec",
", message=", record.rec_str, endl;
The output is:
5 records found
The first => 1.00011 sec
The second => 1.00061 sec
The last, duration=1.00022 sec, message=sleep more