Skip to content

v1.3.0

Compare
Choose a tag to compare
@lamyj lamyj released this 10 Jun 13:29
· 174 commits to master since this release
v1.3.0
416fba6

This version has deeply modified the EPG code, with large speed-ups and new operators.

Ludicrous speed Parallelism based on OpenMP has been replaced with SIMD instructions, based on xsimd. Careful benchmarking the previous version has shown that multiple threads within a single model did not consistently provide speed-ups, and in certain cases caused slow-downs; the chosen SIMD approach better exploits the features of modern CPUs while still allowing between-models multi-threading.

On top of that, the culling of extremal and empty states was added to the regular EPG model, reducing the number of states and thus the run time.

A DESS benchmark between the previous version and the current version shows a speed-up of at least x7.6. Note that since the thresholding was added to the regular EPG model for the current version, the speed-up cannot be computed for this case.

Model v1.2.1 (ms) v1.3.0 (ms) Speed-up
Regular (ϵ=0) 138.15 (16 threads) 8.51 16.23
Regular (ϵ=10⁻⁶) N/A 1.54 N/A
Discrete (ϵ=0) 364.43 (16 threads) 17.42 20.92
Discrete (ϵ=10⁻⁶) 20.45 (1 thread) 2.69 7.60
Discrete 3D (ϵ=0) 1838.18 (1 thread) 28.95 63.49
Discrete 3D (ϵ=10⁻⁶) 41.91 (1 thread) 4.44 9.44

New EPG operators Off-resonance and bulk motion have been added to all three EPG variants.

Sundries

  • The documentation has been upgraded to use Pweave: the generation of figures is now self-contained.
  • The continuous integration has been moved from TravisCI to Github and improved with respect to compilation on Windows and generation of Python wheels.