Work flows algorithm profiling

Example output after rendering

Summary

Due to the need of investigation of algorithms performance issues, the proper method is introduced. It consists two to parts: special mantid build and analytical tool.

Note

Available for Linux only.

Mantid build

On linux the profiler is built by default but to enable profiling, the properties must be set. Enabling the profiler will create a file that contains the time stamps for start and finish of executed algorithms with ~nanosecond precision in a very simple text format.

Adding more detailed information

More detailed information can be added to individual function calls in C++ with the help of std::chrono. At the top of the function create a “start time”

const auto startTime = std::chrono::high_resolution_clock::now();

Then at the bottom of the section being timed, add it to the profiling output

addTimer("createOutputWorkspacesSplitters", startTime, std::chrono::high_resolution_clock::now());

where createOutputWorkspacesSplitters is the name that will appear, similar to a child algorithm. The names in the report will be suffixed with 1 because the tool thinks they are the “default version” of a child algorithm.

An example of this can be found in FilterEvents.cpp.

Analysing tool

The mantid-profiler project provides the nice graphical tool to interpret the information contained in the dumped file. The project has more detiled instructions, but in general

python path/to/myscript.py & mantidprofiler $!

The & puts the python process in the background. The $! is the process-id (PID) of the last process run and allows mantid-profiler to attach to the process.