Skip to content

julia/202502

#%Module 1.0
#
#  julia
# 
module-whatis  "Load Julia (configured for XFEL)"


# https://docs.julialang.org/en/v1/manual/environment-variables/#JULIA_DEPOT_PATH
if { [info exists env(SASE)] } {
    # On the online cluster we don't have scratch so we have to use the default depot
    setenv                  JULIA_DEPOT_PATH       $env(HOME)/.julia:/gpfs/exfel/sw/software/julia-depot:
} elseif { ![file writable /gpfs/exfel/data/scratch] } {
    # For users who don't have access to scratch we also have to use the default depot
    setenv                  JULIA_DEPOT_PATH       $env(HOME)/.julia:/gpfs/exfel/sw/software/julia-depot:
} elseif { [module-info username "xsoft"] } {
    # For xsoft we only enable the global depot
    setenv                  JULIA_DEPOT_PATH       /gpfs/exfel/sw/software/julia-depot:
} else {
    setenv                  JULIA_DEPOT_PATH       /gpfs/exfel/data/scratch/$env(USER)/julia-depot:/gpfs/exfel/sw/software/julia-depot:
}

setenv                  JULIA_EXFEL_BINDIR     /gpfs/exfel/sw/software/julia-depot/bin
setenv                  JULIA_EXFEL_ENV        /gpfs/exfel/sw/software/euxfel-environment-management/environments/202502
setenv                  JULIA_EXFEL_SYSIMAGE   $env(JULIA_EXFEL_ENV)/julia-exfel-sysimage.so

# https://juliahpc.github.io/user_gettingstarted/#set_julia_cpu_target_appropriately
setenv                  JULIA_CPU_TARGET       "generic;broadwell,clone_all;skylake-avx512,clone_all;cascadelake,clone_all;sapphirerapids,clone_all;znver3,clone_all;znver2,clone_all"
setenv                  JULIA_NUM_THREADS      auto
setenv                  JULIA_PROJECT          $env(JULIA_EXFEL_ENV)

# https://docs.julialang.org/en/v1/manual/performance-tips/#man-multithreading-linear-algebra
setenv                  OPENBLAS_NUM_THREADS   1
# https://carstenbauer.github.io/ThreadPinning.jl/stable/examples/ex_blas/#Intel-MKL
setenv                  MKL_NUM_THREADS        1

# Need this for P100's to work: https://github.com/JuliaGPU/CUDA.jl/issues/3023
setenv                  JULIA_CUDA_USE_COMPAT  false

# https://juliapy.github.io/PythonCall.jl/stable/pythoncall/#If-you-already-have-Python-and-required-Python-packages-installed
setenv                  JULIA_CONDAPKG_BACKEND          Null
setenv                  JULIA_PYTHONCALL_EXE            /gpfs/exfel/sw/software/euxfel-environment-management/environments/202502/.pixi/envs/default/bin/python
# setenv                  JULIA_PYTHONCALL_LIB            /gpfs/exfel/sw/software/euxfel-environment-management/environments/202502/.pixi/envs/default/lib/libpython3.so
setenv                  PYTHON_JULIACALL_BINDIR         /gpfs/exfel/sw/software/juliaup/juliaup/julia-1.12-nightly/bin
setenv                  PYTHON_JULIACALL_HANDLE_SIGNALS yes
setenv                  PYTHON_JULIACALL_EXE            $env(PYTHON_JULIACALL_BINDIR)/julia
setenv                  PYTHON_JULIACALL_PROJECT        $env(JULIA_EXFEL_ENV)
setenv                  PYTHON_JULIAPKG_OFFLINE         yes

# Needed for Bonito/WGLMakie to set the proxy URL automatically
# setenv                  BONITO_JUPYTER_REMOTE_HOST      "https://max-jhub.desy.de"

# https://timholy.github.io/Revise.jl/stable/config/#Polling-and-NFS-mounted-code-directories:-JULIA_REVISE_POLL
setenv                  JULIA_REVISE_POLL      1

prepend-path            PATH             /gpfs/exfel/sw/software/euxfel-environment-management/scripts/julia
prepend-path            PATH             $env(PYTHON_JULIACALL_BINDIR)
prepend-path            PATH             $env(JULIA_EXFEL_BINDIR)

system /gpfs/exfel/sw/software/euxfel-environment-management/scripts/julia/create-julia-depot

proc ModulesHelp {} {
    puts stdout     " "
    puts stdout     "This sets the path and environment variables for Julia 1.12"
    puts stdout     " "
}