timer_t Class Reference |
Detailed Description
Comparisons between two timer_t
considers only the last split time.
- Model Of:
- Rationale:
- A class that measures elapsed time can be useful when debugging, optimizing, or comparing implementations.
timer_t
utilizes the most accurate timing API a platform has to offer to maximize accuracy, while keeping the public API generic.
- Example:
- Checking the speed between two implementations might look like this:
timer_t timer1; do_my_func(); timer1.split(); timer_t timer2; do_their_func(); timer2.split(); if (timer1 == timer2) std::cout << "Functions are equally fast" << std::endl; else if (timer1 < timer2) std::cout << "My function is faster" << std::endl; else std::cout << "Their function is faster" << std::endl;
- Most of the time, however, you will want to take several measurements and compare the averages in order to gain a more accurate understanding of the cost of an implementation:
timer_t timer1; timer_t timer2; for (std::size_t i(0); i < sample_count_k; ++i) { timer1.reset(); do_my_func(); timer1.accrue(); timer2.reset(); do_their_func(); timer2.accrue(); } double my_avg(timer1.accrued_average()); double their_avg(timer2.accrued_average()); if (my_avg == their_avg) std::cout << "Functions are equally fast" << std::endl; else if (my_avg < their_avg) std::cout << "My function is faster" << std::endl; else std::cout << "Their function is faster" << std::endl;
- Note that in the above case the two implementations are tested in the same
for
loop. This is in attempt to distribute possible overhead from memory locality issues (i.e.,do_my_func
could push memory used bydo_their_func
out of the cache, unfairly slowingdo_their_func
down (or vice versa).
- Depending on what you are measuring in your own code, measurement strategies may vary from the ones used above.