How to measure the time that a piece of code takes to execute?
c++, multithreading, profiling, time-measurement
Solution
There are different ways to measure how long code takes to execute.
If you are interested in the relative performance of certain functions, a profiler is the only way to go. Note that this will de-emphasise the impact of blocking I/O due to the computation overheads it induces.
If you want the clock-based time of certain functions, there are loads of options.
Personally I would say gettimeofday is sufficient.
If you want to get precise, use RDTSC
If you want to get really precise, you'll want something like this
t1 = rdtsc();
t2 = rdtsc();
my_code();
t3 = rdtsc();
my_code_time = (t3-t2) - (t2-t1)
You will need to repeat this block to account for thread scheduling discrepencies, and also pay attention to cacheing effects.
Problem
Suppose I want to measure the time that a certain piece of code takes. For that I would normally do something like this ``` clock_t startTime = clock(); //do stuff //do stuff //do stuff //do stuff float secsElapsed = (float)(clock() - startTime)/CLOCKS_PER_SEC; ``` What if the program is multithreaded and context switches occur within the part which I want to measure? How would I measure the time that my code takes to execute excluding time spent on other threads? Even if there are tools that do it, I would very much like to know how they're doing it.