Skip to content

v0.9.0

Latest
Compare
Choose a tag to compare
@github-actions github-actions released this 01 Oct 18:09
· 99 commits to master since this release
ca742f6

KomaMRI v0.9.0

Diff since v0.8.2

This new breaking release of Koma v0.9 has multiple new features. Thanks to @rkierulf, our GSoC student, for the GPU enhancements and @pvillacorta for the new motion definitions that enable flow and shareable phantoms.

(1) Device-agnostic kernel-based simulations (more info here)
We can now use various GPU backends with the help of KernelAbstractions.jl. This means that GPU-related packages like CUDA are not installed by default. Installation and loading of the desired GPU package is needed (for example ] add CUDA, using CUDA).

(2) New simulation method, faster and better
Now Bloch has specialized implementations for CPU and GPU and the previous implementation is in BlochSimple. This new simulation method is 4-5 times faster and uses around 80 times less memory. We have seen a 100-200x improvement in some sequences, especially if they have a lot of soft RF pulses.

(3) Distributed simulations (more info here)
We also tested distributed simulations with multiple GPUs and nodes :)

(4) GPU benchmarks (here)
We have a fancy new benchmarking page to ensure that there are no performance regressions.

(5)Phantom's including flexible motions and flow (more experimental)
You can now plot phantoms with motion and define them using mix-and-match motion definitions! More complex phantoms are possible including simple motions or arbitrary motions. Many more examples of using them are coming soon! 😄 including a realistic CFD-simulated aorta! All of this is done using our new reproducible phantom definition (HDF5-based), which enables the sharing of these phantoms with complex motion.

Hope these changes make your simulations faster! 😄 As always, if you have any problems, feel free to talk to me (@cncastillo ) in Slack or post an issue or discussion on GitHub.

Merged pull requests:

Closed issues:

  • CUDA memory problems? (#125)
  • Using BuildKite for GPU related CI? (#147)
  • Use the same functions to sample RFs in the simulation than for plotting sequence (#167)
  • Separate CI for more comprehensive results (#276)
  • Add simulate function for debugging purposes (#288)
  • Create Pluto example for fat_sat_low_field (#291)
  • Reporting of phantom spatial sampling in obj.info structure. (#322)
  • GSOC Proposal Issue Tracking: Part 1 (#349)
  • GSOC Proposal Issue Tracking: Part 2 (#350)
  • Extend GPU support to include Apple (Metal.jl), AMD (AMDGPU.jl), and Intel (OneAPI.jl) (#351)
  • Profile Bloch Simulation Method (#352)
  • Create new Kernel-based Simulation Method (#353)
  • Use @LocalMem inside future kernel-based simulation functions to speed up memory access (#354)
  • Add example of Multi-GPU simulation (#355)
  • Add example and / or support for multi-node simulation (#356)
  • Simplify ArbitraryMotion struct (#371)
  • Re-use weights in interpolation for ArbitraryMotion (#372)
  • Define Nspins for SimpleMotion (#376)
  • Applying @time to simulate reveals discrepancies on resources and timing reports (#392)
  • plot_signal docstring (correction) (#401)
  • [KomaUI Plotting] obj_ui[] does not draw on first time updated. Need to press :rho or other option. (#407)
  • New motion approach to combine SimpleMotion and ArbitraryMotion into the same phantom (#410)
  • Future: use @testsetup to reduce time to run tests on GPU (#414)
  • Problems initializing KomaUI (#432)
  • Brain phantom values inconsistencies (#464)
  • spin_reset has eltype T and should be an AbstractMatrix{Bool} (#479)