Performance

The performance of the package has been measured taking the implementation of the RooFit as a reference in order to evaluate the timing. The tests have been run using all the different backends available with minkit, and compared together. It has been tested both the generation of random numbers and the minimization procedure for two different models with different complexity. The first model is composed by a simple Gaussian function, whilst the second is the addition of a Crystal-ball and an exponential PDFs. The GPU execution has been done using an Nvidia GeForce GTX 1080 Ti, and the CPU execution using an Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz. The results can be seen in the following figures:

_images/basic_generate.png

Generate data for a model composed by a Gaussian PDF.

_images/intermediate_generate.png

Generate data for a model composed by a Crystal-ball and an exponential PDFs.

_images/basic_fit.png

Generate and fit to a Gaussian PDF.

_images/intermediate_fit.png

Generate and fit to a model composed by a Crystal-ball and an exponential PDFs.

If the model is simple, generating random numbers is faster for RooFit than for MinKit, for all the backends, but it soon becomes similar once the model starts to be a bit more complicated. For a small number of entries, the timing for fitting remains around the same order of magnitude for the CPU implementation and RooFit, being the GPU backends a bit slower. Howerver, once the number of entries is greater than 10000, the GPU starts to be drastically faster with respect to any CPU implementation. Once the model starts to be slightly complicated, one can find two orders of magnitude of difference in timing between CPU and GPU. Note that the CPU implementation of MinKit has an speed close to that of RooFit, despite the latter is purely implemented in C++.