This class can be used to generate formatted output from time measurements of different subsections in a program. It is possible to create several sections that perform certain aspects of the program. A section can be entered several times. By changing the options in OutputFrequency and OutputType, the user can choose whether output should be generated every time a section is joined or just in the end of the program. Moreover, it is possible to show CPU times, wall times or both.
Use of this class could be as follows:
TimerOutput timer (std::cout, TimerOutput::summary, TimerOutput::wall_times); timer.enter_subsection ("Setup dof system"); setup_dofs(); timer.leave_subsection(); timer.enter_subsection ("Assemble"); assemble_system_1(); timer.leave_subsection(); timer.enter_subsection ("Solve"); solve_system_1(); timer.leave_subsection(); timer.enter_subsection ("Assemble"); assemble_system_2(); timer.leave_subsection(); timer.enter_subsection ("Solve"); solve_system_2(); timer.leave_subsection(); // do something else...
When run, this program will return an output like this:
+---------------------------------------------+------------+------------+ | Total wallclock time elapsed since start | 88.8s | | | | | | | Section | no. calls | wall time | % of total | +---------------------------------+-----------+------------+------------+ | Assemble | 2 | 19.7s | 22% | | Solve | 2 | 3.03s | 3.4% | | Setup dof system | 1 | 3.97s | 4.5% | +---------------------------------+-----------+------------+------------+
The output will see that we entered the assembly and solve section twice, and reports how much time we spent there. Moreover, the class measures the total time spent from start to termination of the TimerOutput object. In this case, we did a lot of other stuff, so that the time proportions of the functions we measured are far away from 100 precent.
See the step-32 tutorial program for usage of this class.
Definition at line 320 of file timer.h.
| TimerOutput::TimerOutput | ( | std::ostream & | stream, |
| const enum OutputFrequency | output_frequency, | ||
| const enum OutputType | output_type | ||
| ) |
Constructor that takes std::cout as output stream.
| TimerOutput::TimerOutput | ( | ConditionalOStream & | stream, |
| const enum OutputFrequency | output_frequency, | ||
| const enum OutputType | output_type | ||
| ) |
Constructor that takes a ConditionalOStream to write output to.
| TimerOutput::~TimerOutput | ( | ) |
Destructor. Calls print_summary() in case the option for writing the summary output is set.
| void TimerOutput::enter_subsection | ( | const std::string & | section_name ) |
Open a section by given a string name of it. In case the name already exists, that section is done once again.
Referenced by enter_section().
| void TimerOutput::enter_section | ( | const std::string & | section_name ) | [inline] |
| void TimerOutput::leave_subsection | ( | const std::string & | section_name = std::string() ) |
Leave a section. If no name is given, the last section that was entered is left.
Referenced by exit_section().
| void TimerOutput::exit_section | ( | const std::string & | section_name = std::string() ) |
[inline] |
| void TimerOutput::print_summary | ( | ) | const |
Print a formatted table that summarizes the time consumed in the various sections.
| void TimerOutput::disable_output | ( | ) |
By calling this function, all output can be disabled. This function together with enable_output() can be useful if one wants to control the output in a flexible way without putting a lot of if clauses in the program.
| void TimerOutput::enable_output | ( | ) |
This function re-enables output of this class if it was previously disabled with disable_output(). This function together with disable_output() can be useful if one wants to control the output in a flexible way without putting a lot of if clauses in the program.
Timer TimerOutput::timer_all [private] |
std::map<std::string, Section> TimerOutput::sections [private] |
ConditionalOStream TimerOutput::out_stream [private] |
bool TimerOutput::output_is_enabled [private] |
std::list<std::string> TimerOutput::active_sections [private] |
A list of the sections that have been entered and not exited. The list is kept in the order in which sections have been entered, but elements may be removed in the middle if an argument is given to the exit_section() function.
MPI_Comm TimerOutput::mpi_communicator [private] |
Threads::ThreadMutex TimerOutput::mutex [private] |
documentation generated on Fri Feb 3 2012 06:04:12 by
doxygen
1.7.2