These are some illustrations and videos that I have made over the years.
[Read More]Histogram Speeds in Python
Let’s compare several ways of making Histograms. I’m going to assume you would like to end up with a nice OO histogram interface, so all the 2D methods will fill a Physt histogram. We will be using a 2 x 1,000,000 element array and filling a 2D histogram, or 10,000,000 elemends in a 1D histogram. Binnings are regular.
1D 10,000,000 item histogram
Example | KNL | MBP | X24 |
---|---|---|---|
NumPy: histogram | 704 ms | 147 ms | 114 ms |
NumPy: bincount | 432 ms | 110 ms | 117 ms |
fast-histogram | 337 ms | 45.9 ms | 45.7 ms |
Numba | 312 ms | 58.8 ms | 60.7 ms |
2D 1,000,000 item histogram
Example | KNL | MBP | X24 |
---|---|---|---|
Physt | 1.21 s | 293 ms | 246 ms |
NumPy: histogram2d | 456 ms | 114 ms | 88.3 ms |
NumPy: add.at | 247 ms | 62.7 ms | 49.7 ms |
NumPy: bincount | 81.7 ms | 23.3 ms | 20.3 ms |
fast-histogram | 53.7 ms | 10.4 ms | 7.31 ms |
fast-hist threaded 0.5 | (6) 62.5 ms | 9.78 ms | (6) 15.4 ms |
fast-hist threaded (m) | 62.3 ms | 4.89 ms | 3.71 ms |
Numba | 41.8 ms | 10.2 ms | 9.73 ms |
Numba threaded | (6) 49.2 ms | 4.23 ms | (6) 4.12 ms |
Cython | 112 ms | 12.2 ms | 11.2 ms |
Cython threaded | (6) 128 ms | 5.68 ms | (8) 4.89 ms |
pybind11 sequential | 93.9 ms | 9.20 ms | 17.8 ms |
pybind11 OpenMP atomic | 4.06 ms | 6.87 ms | 1.91 ms |
pybind11 C++11 atomic | (32) 10.7 ms | 7.08 ms | (48) 2.65 ms |
pybind11 C++11 merge | (32) 23.0 ms | 6.03 ms | (48) 4.79 ms |
pybind11 OpenMP merge | 8.74 ms | 5.04 ms | 1.79 ms |
Binding Minuit2
Let’s try a non-trivial example of a binding: Minuit2 (6.14.0 standalone edition).
[Read More]Tools to Bind to Python
This was originally given as a PyHEP 2018 talk, It is designed to be interactive, and can be run in SWAN if you have a CERN account. If you want to run it manually, just download the repository: github.com/henryiii/pybindings_cc. It is easy to run in Anaconda.
[Read More]Announcing CLI11 1.6
CLI11, a powerful library for writing beautiful command line interfaces in C++11, has been updated to 1.6, the largest update ever. CLI11 output is more customizable than ever, and has a better functionality separation under the hood.
CLI11 has had the formatting system completely redesigned, with minor or complete customization of the output possible. Configuration files reading and writing also can be configured; a new example with json instead of ini formatting is included. Validators (finally) have custom help output, as well. Many odd corner cases have been made possible, such as interleaving options.
[Read More]CMake 3.11
CMake 3.11 was just released; this is particularly exciting release for CMake. I’d like to give a quick and friendly introduction to the new features that might make the largest difference for CMake users.
[Read More]