Performance =========== Where possible, all functions are written using `numpy `_ to make use of optimized routines and vectorization. Evaluating a single point typically takes less than 0.0001 seconds on a modern desktop system, regardless of function. This page shows some more detailed information about the performance, even though this library should not be a bottleneck in any programs. The scripts for generating following performance overviews can be found in the `docs/scripts `_ folder of the repository. Presented running times were measured on a desktop PC with an Intel Core i7 5820k 6-core CPU, with Python 3.6.3 and Numpy 1.18.4. Performance Scaling ------------------- The image below shows how the runtime scales as ``N`` points are passed to the functions simultaneously as a matrix of size ``(N, ndim)``. Performance for the high- and low-fidelity formulations are shown separately to give a fair comparison: many low-fidelities are defined as computations on top of the high-fidelity definitions. As absolute performance will vary per system, the runtime is divided by the time needed for ``N=1`` as a normalization. This is done independently for each function and fidelity level. Up to ``N=1_000``, the time required scales less than linearly thanks to efficient and vectorized numpy routines. .. image:: ../_static/scalability.png :width: 640 Performance Comparison ---------------------- The following image shows how the scaling for the ``mf2`` implementation of the **Currin**, **Park91A**, **Park91B** and **Borehole** functions compares to the *Matlab* implementations by `Surjanovic and Bingham `_, which can only evaluate one point at a time, so do not use any vectorization. Measurements were performed using *Matlab* version R2020a (9.8.0.1323502). .. image:: ../_static/scalability_comparison.png :width: 640