Skip to content

Implement Julia precompilation to reduce first-use latency#16

Closed
anvika-singhal wants to merge 1 commit into
JuliaHealth:mainfrom
anvika-singhal:implement-julia-precompilation
Closed

Implement Julia precompilation to reduce first-use latency#16
anvika-singhal wants to merge 1 commit into
JuliaHealth:mainfrom
anvika-singhal:implement-julia-precompilation

Conversation

@anvika-singhal

Copy link
Copy Markdown
Collaborator

Reduce first-use latency in komamripy by precompiling common KomaMRI workflows using PrecompileTools.jl. First import now triggers precompilation. Subsequent imports are instant due to cached bytecode.

Implemented

src/komamripy/precompile.jl (new)

  • Uses @setup_workload and @compile_workload from PrecompileTools
  • Precompiles common entry points: Scanner(), brain_phantom2D(), PulseDesigner.EPI_example(), default_sim_params()
  • Gracefully skips if PrecompileTools unavailable (wrapped in try/catch)
  • Silently redirects stderr to avoid noise during precompilation

src/komamripy/_session.py (modified)

  • Added _run_precompilation(jl) function called after using KomaMRI
  • Prints "Precompiling KomaMRI..." on first import
  • Handles Windows path separators correctly (converts \ to / for Julia)
  • Non-fatal error handling: precompilation failures don't block Julia startup

Details

First import (with precompilation):

  1. User imports komamripy
  2. Julia initializes and loads KomaMRI
  3. Precompile script runs, compiling common workflows
  4. Bytecode cached in ~/.julia/compiled/
  5. ~seconds latency (one-time cost)

Subsequent imports (cached):

  1. User imports komamripy
  2. Julia loads cached bytecode
  3. ~milliseconds latency (instant)

Backwards Compatibility

  • No API changes
  • PrecompileTools already a dependency of KomaMRI.jl
  • Precompilation is optional. If it fails or is unavailable, komamripy still works normally
  • All existing code continues to work without modification

Testing

Verified locally:

  • First import shows "Precompiling KomaMRI..." message
  • Subsequent imports skip precompilation (no message)
  • Julia resolves correctly on Windows (path separators handled)
  • Precompilation failures don't block startup

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant