Compare the calculation performance of low level expressions, as:
sum((m0 & (A << shift)) | (~m0 & B), dim: 1)
on moderately sized data. (A: [507, 10, 5, 17], B: [1, 1, 5, 17]),
when executed by:
- NumPy,
- NumPy + Numba,
- FORTRAN /O0 (optimization off),
- FORTRAN /O3 (all optimizations), with
- ILNumerics Accelerator.
This benchmark involves broadcasting, unary and binary integer operations, and a sum-reduction and creates a plot, similar to this:
Each sample in the plot gives the time needed for computing the expression, averaged over 10 repetitions. This 'current execution speed' is plotted for the first 10 seconds of the experiment and repeated for all execution technologies investigated.
Observed execution times for all experiments over the app's running time allow to compare not only the general efficiency of the individual optimization methods. It also allow to inspect the behavior of the method during start-up and in a steady run.
All benchmarks are handled from ILNumerics\Part1.csproj. At runtime it starts the NumPy scripts (with and without Numba), starts the FORTRAN executables, and starts the ILNumerics .NET benchmarks.
Each experiment is measured and repeated for 10 sec. Times needed for each completed iteration are written to csv files.
Afterwards, the plot corresponding to Figure 4 in the paper is generated using measured results.
git clone https://github.com/hokb/decentralized-array-execution-artifacts2026
Navigate into directory: Appendix/Part 1 Low Level Expressions.
This will:
- build a debian based docker image,
- install the .NET 8.0 SDK,
- copy FORTRAN, NumPy and ILNumerics benchmark sources,
- compile FORTRAN binaries (optimized and non-optimized)
- compile the ILNumerics assembly using ILNumerics Accelerator
- run the ILNumerics assembly, creating the final plot.
ps> .\run-docker.ps1> .\run-docker.shMake sure to have the latest .NET SDK and prerequisites to compile the FORTRAN sources installed. Find instructions in here.
Navigate into the ILNumerics subdirectory and start the project Part1.csproj
dotnet run -c ReleaseThe benchmark generates the following results and places them into a new folder: \Appendix\Part1 Low Level Expressions\result.
-
All measured times (5 measurements)
-
Plots generated: Part1.bmp and Part1.svg
Re-Running the project will only re-create the plot. To trigger a new measurement just delete the result folder Appendix\Part 1 Low Level Expressions\result\.
Please let us know about your findings! Did you observe similar results ? Get in touch and have us take a look: benchmarks@ilnumerics.net