Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci-judi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ jobs:
OMP_NUM_THREADS: 4
JULIA_NUM_THREADS: 1
GROUP: "JUDI"
JULIA_CONDAPKG_PIP_BACKEND: "pip"
JULIA_CONDAPKG_BACKEND: "MicroMamba"

strategy:
fail-fast: false
Expand Down
7 changes: 4 additions & 3 deletions CondaPkg.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
[deps]
python = ">3.8"
python = ">3.9,<3.14"
matplotlib = ""
PyWavelets = ""

[pip.deps]
devito = ">=4.8.11"
pyrevolve = "==2.2.4"
devito = ">=4.8.14"
pyrevolve = "==2.2.5"
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "JUDI"
uuid = "f3b833dc-6b2e-5b9c-b940-873ed6319979"
authors = ["Philipp Witte, Mathias Louboutin"]
version = "4.1.2"
version = "4.1.3"

[deps]
ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
Expand Down
1 change: 1 addition & 0 deletions src/JUDI.jl
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ function __init__()
global _devices = parse.(Int, get(ENV, "CUDA_VISIBLE_DEVICES", "-1"))
end

default_devito_config()
# Optional dependencies
@static if !isdefined(Base, :get_extension)
# JLD2 compat for loading older version of JUDI types
Expand Down
63 changes: 56 additions & 7 deletions src/utilities.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
export set_devito_config, ftp_data, set_serial, set_parallel, set_verbosity
export devito_omp, devito_icx, devito_acc, devito_nvc_host, devito_cuda, devito_sycl, devito_hip
export devito_apple_arm, devito_apple_x64, devito_C
export default_devito_config

# Logging utilities
set_verbosity(x::Bool) = begin global _verbose = x; end
Expand Down Expand Up @@ -59,20 +61,67 @@ end


# Devito configuration
set_devito_config(key::Symbol, val) = set_devito_config(string(key), val)
set_devito_config(key::String, val::String) = begin devito.configuration[key] = val end
set_devito_config(key::String, val::Bool) = begin devito.configuration[key] = val end

set_devito_config(kw...) = begin
set_devito_config(;kw...) = begin
for (k, v) in kw
set_devito_config(k, v)
end
end

# Easy configurations setupes
devito_omp() = set_devito_config("language", "openmp")
devito_icx() = set_devito_config(language="openmp", compiler="icx")
devito_apple_arm() = set_devito_config(language="openmp", platform="m1", compiler="clang")
devito_apple_x64() = set_devito_config(language="openmp", platform="cpu64", compiler="clang")
devito_C(cc::AbstractString="gcc") = set_devito_config(language="C", platform="cpu64", compiler=cc)
devito_omp() = set_devito_config(language="openmp", platform="cpu64", compiler="gcc")
devito_icx() = set_devito_config(language="openmp", compiler="icx", platform="intel64")
devito_acc() = set_devito_config(language="openacc", compiler="nvc", platform="nvidiaX")
devito_nvc_host() = set_devito_config(language="openmp", compiler="nvc")
devito_cuda() = set_devito_config(language="cuda", platform="nvidiaX")
devito_sycl() = set_devito_config(language="sycl", platform="intelgpuX")
devito_hip() = set_devito_config(language="hip", platform="amdgpuX")
devito_nvc_host() = set_devito_config(language="openmp", compiler="nvc", platform="cpu64")
devito_cuda() = set_devito_config(language="cuda", platform="nvidiaX", compiler="cuda")
devito_sycl() = set_devito_config(language="sycl", platform="intelgpuX", compiler="sycl")
devito_hip() = set_devito_config(language="hip", platform="amdgpuX", compiler="hip")


function supports_openmp(cc::AbstractString="gcc")
# run the preprocessor with -fopenmp and look for the _OPENMP macro
out = try
read(`$cc -fopenmp -dM -E -x c -`, String)
catch
return false
end
return occursin(r"#define _OPENMP", out)
end


function default_devito_config()
# Devito already configured, leave it as is
("DEVITO_ARCH" in keys(ENV) || "DEVITO_LANGUAGE" in keys(ENV)) && return
# Are we on apple arm?
if Sys.isapple()
# Check that llvm and libomp are installed
if !supports_openmp("clang")
@warn """
llvm and libomp are not installed, please install them via homebrew and follow path instructions:
`brew install llvm libomp`

defaulting to C without OpenMP support
"""
devito_C("clang")
else
Sys.ARCH == :aarch64 ? devito_apple_arm() : devito_apple_x64()
end
elseif Sys.islinux()
if !supports_openmp("gcc")
@warn """
gcc is not installed or does not support OpenMP, defaulting to C without OpenMP support
"""
devito_C()
else
devito_omp()
end
else
devito_omp()
end
end
26 changes: 26 additions & 0 deletions test/testing_utils.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,30 @@ function grad_test(misfit, x0, dx, g; maxiter=6, h0=5f-2, data=false, stol=1f-1)
rate2 = err2[1:end-1]./err2[2:end]
@test isapprox(mean(rate1), 1.25f0; atol=stol)
@test isapprox(mean(rate2), 1.5625f0; atol=stol)
end

@testset "Testing devito config" begin
lg = get(ENV, "DEVITO_LANGUAGE", nothing)
arch = get(ENV, "DEVITO_ARCH", nothing)
plt = get(ENV, "DEVITO_PLATFORM", nothing)
pop!(ENV, "DEVITO_LANGUAGE", nothing)
pop!(ENV, "DEVITO_ARCH", nothing)
pop!(ENV, "DEVITO_PLATFORM", nothing)
default_devito_config()
if Sys.isapple()
@test string(JUDI.devito.configuration["language"]) == "openmp"
@test string(JUDI.devito.configuration["compiler"].name) == "clang"
if Sys.ARCH == :aarch64
@test string(JUDI.devito.configuration["platform"].name) == "m1"
else
@test Bool(JUDI.PythonCall.pybuiltins.isinstance(JUDI.devito.configuration["platform"], JUDI.devito.Cpu64))
end
else
@test string(JUDI.devito.configuration["language"]) == "openmp"
@test Bool(JUDI.PythonCall.pybuiltins.isinstance(JUDI.devito.configuration["platform"], JUDI.devito.Cpu64))
@test string(JUDI.devito.configuration["compiler"].name) == "gcc"
end
!isnothing(lg) && (ENV["DEVITO_LANGUAGE"] = lg)
!isnothing(arch) && (ENV["DEVITO_ARCH"] = arch)
!isnothing(plt) && (ENV["DEVITO_PLATFORM"] = plt)
end
Loading