Skip to content

Add GB-25 PR #258 commit to test matrix for perf comparison#2563

Open
glwagner wants to merge 5 commits into
mainfrom
gb25-perf-pin-258
Open

Add GB-25 PR #258 commit to test matrix for perf comparison#2563
glwagner wants to merge 5 commits into
mainfrom
gb25-perf-pin-258

Conversation

@glwagner

Copy link
Copy Markdown
Collaborator

Pins GB-25 commit 0590584 (from PRONTOLab/GB-25#258) alongside main in the GB-25 test matrix.

This lets CI run both main and the PR #258 commit so we can compare performance side-by-side and confirm whether the perf gap is real or a model-config artifact.

🤖 Generated with Claude Code

@wsmoses

wsmoses commented Jun 17, 2026

Copy link
Copy Markdown
Member

cc @giordano

ERROR: LoadError: Precompiled image Base.PkgId(Base.UUID("01bae11a-8c86-47ea-956a-4644a8dd5e5e"), "GordonBell25") not available with flags CacheFlags(; use_pkgimages=true, debug_level=1, check_bounds=0, inline=true, opt_level=0)

@giordano

Copy link
Copy Markdown
Member

That's never the error, the error is always above: precompilation failed

@giordano

Copy link
Copy Markdown
Member

https://github.com/EnzymeAD/Enzyme-JAX/actions/runs/27718231857/job/81996573379?pr=2563#step:16:803

The following 3 direct dependencies failed to precompile:

NumericalEarthReactantExt 

Failed to precompile NumericalEarthReactantExt [32c92752-d9d3-5fe5-934d-ee9a573e9f07] to "/root/.julia/compiled/v1.11/NumericalEarthReactantExt/jl_5uR4Y7".
WARNING: could not import Grids.LeftConnectedRightCenterFolded into SeaIceDynamics
WARNING: could not import Grids.LeftConnectedRightFaceFolded into SeaIceDynamics
WARNING: could not import Grids.LeftConnectedRightCenterConnected into SeaIceDynamics
WARNING: could not import Grids.LeftConnectedRightFaceConnected into SeaIceDynamics
ERROR: LoadError: UndefVarError: `LeftConnectedRightCenterFolded` not defined in `ClimaSeaIce.SeaIceDynamics`
Stacktrace:
  [1] top-level scope
    @ ~/.julia/packages/ClimaSeaIce/xYhrL/src/SeaIceDynamics/split_explicit_momentum_equations.jl:13
  [2] include(mod::Module, _path::String)
    @ Base ./Base.jl:562
  [3] include(x::String)
    @ ClimaSeaIce.SeaIceDynamics ~/.julia/packages/ClimaSeaIce/xYhrL/src/SeaIceDynamics/SeaIceDynamics.jl:1
  [4] top-level scope
    @ ~/.julia/packages/ClimaSeaIce/xYhrL/src/SeaIceDynamics/SeaIceDynamics.jl:48
  [5] include(mod::Module, _path::String)
    @ Base ./Base.jl:562
  [6] include(x::String)
    @ ClimaSeaIce ~/.julia/packages/ClimaSeaIce/xYhrL/src/ClimaSeaIce.jl:2
  [7] top-level scope
    @ ~/.julia/packages/ClimaSeaIce/xYhrL/src/ClimaSeaIce.jl:43
  [8] include
    @ ./Base.jl:562 [inlined]
  [9] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
    @ Base ./loading.jl:2924
 [10] top-level scope
    @ stdin:6
in expression starting at /root/.julia/packages/ClimaSeaIce/xYhrL/src/SeaIceDynamics/split_explicit_momentum_equations.jl:13
in expression starting at /root/.julia/packages/ClimaSeaIce/xYhrL/src/SeaIceDynamics/SeaIceDynamics.jl:1
in expression starting at /root/.julia/packages/ClimaSeaIce/xYhrL/src/ClimaSeaIce.jl:1
in expression starting at stdin:6
ERROR: LoadError: Failed to precompile ClimaSeaIce [6ba0ff68-24e6-4315-936c-2e99227c95a4] to "/root/.julia/compiled/v1.11/ClimaSeaIce/jl_mti1Ww".
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool; flags::Cmd, cacheflags::Base.CacheFlags, reasons::Dict{String, Int64}, loadable_exts::Nothing)
    @ Base ./loading.jl:3217
  [3] (::Base.var"#1110#1111"{Base.PkgId})()
    @ Base ./loading.jl:2579
  [4] mkpidlock(f::Base.var"#1110#1111"{Base.PkgId}, at::String, pid::Int32; kwopts::@Kwargs{stale_age::Int64, wait::Bool})
    @ FileWatching.Pidfile /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/FileWatching/src/pidfile.jl:95
  [5] #mkpidlock#6
    @ /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/FileWatching/src/pidfile.jl:90 [inlined]
  [6] trymkpidlock(::Function, ::Vararg{Any}; kwargs::@Kwargs{stale_age::Int64})
    @ FileWatching.Pidfile /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/FileWatching/src/pidfile.jl:116
  [7] #invokelatest#2
    @ ./essentials.jl:1057 [inlined]
  [8] invokelatest
    @ ./essentials.jl:1052 [inlined]
  [9] maybe_cachefile_lock(f::Base.var"#1110#1111"{Base.PkgId}, pkg::Base.PkgId, srcpath::String; stale_age::Int64)
    @ Base ./loading.jl:3741
 [10] maybe_cachefile_lock
    @ ./loading.jl:3738 [inlined]
 [11] _require(pkg::Base.PkgId, env::String)
    @ Base ./loading.jl:2565
 [12] __require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:2388
 [13] #invoke_in_world#3
    @ ./essentials.jl:1089 [inlined]
 [14] invoke_in_world
    @ ./essentials.jl:1086 [inlined]
 [15] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:2375
 [16] macro expansion
    @ ./loading.jl:2314 [inlined]
 [17] macro expansion
    @ ./lock.jl:273 [inlined]
 [18] __require(into::Module, mod::Symbol)
    @ Base ./loading.jl:2271
 [19] #invoke_in_world#3
    @ ./essentials.jl:1089 [inlined]
 [20] invoke_in_world
    @ ./essentials.jl:1086 [inlined]
 [21] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:2260
 [22] include(mod::Module, _path::String)
    @ Base ./Base.jl:562
 [23] include(x::String)
    @ NumericalEarth ~/.julia/packages/NumericalEarth/3PaZn/src/NumericalEarth.jl:1
 [24] top-level scope
    @ ~/.julia/packages/NumericalEarth/3PaZn/src/NumericalEarth.jl:98
 [25] include
    @ ./Base.jl:562 [inlined]
 [26] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
    @ Base ./loading.jl:2924
 [27] top-level scope
    @ stdin:6
in expression starting at /root/.julia/packages/NumericalEarth/3PaZn/src/EarthSystemModels/EarthSystemModels.jl:1
in expression starting at /root/.julia/packages/NumericalEarth/3PaZn/src/NumericalEarth.jl:1
in expression starting at stdin:6
ERROR: LoadError: Failed to precompile NumericalEarth [904d977b-046a-4731-8b86-9235c0d1ef02] to "/root/.julia/compiled/v1.11/NumericalEarth/jl_VWjDrv".
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool; flags::Cmd, cacheflags::Base.CacheFlags, reasons::Dict{String, Int64}, loadable_exts::Nothing)
    @ Base ./loading.jl:3217
  [3] (::Base.var"#1110#1111"{Base.PkgId})()
    @ Base ./loading.jl:2579
  [4] mkpidlock(f::Base.var"#1110#1111"{Base.PkgId}, at::String, pid::Int32; kwopts::@Kwargs{stale_age::Int64, wait::Bool})
    @ FileWatching.Pidfile /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/FileWatching/src/pidfile.jl:95
  [5] #mkpidlock#6
    @ /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/FileWatching/src/pidfile.jl:90 [inlined]
  [6] trymkpidlock(::Function, ::Vararg{Any}; kwargs::@Kwargs{stale_age::Int64})
    @ FileWatching.Pidfile /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/FileWatching/src/pidfile.jl:116
  [7] #invokelatest#2
    @ ./essentials.jl:1057 [inlined]
  [8] invokelatest
    @ ./essentials.jl:1052 [inlined]
  [9] maybe_cachefile_lock(f::Base.var"#1110#1111"{Base.PkgId}, pkg::Base.PkgId, srcpath::String; stale_age::Int64)
    @ Base ./loading.jl:3741
 [10] maybe_cachefile_lock
    @ ./loading.jl:3738 [inlined]
 [11] _require(pkg::Base.PkgId, env::String)
    @ Base ./loading.jl:2565
 [12] __require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:2388
 [13] #invoke_in_world#3
    @ ./essentials.jl:1089 [inlined]
 [14] invoke_in_world
    @ ./essentials.jl:1086 [inlined]
 [15] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:2375
 [16] macro expansion
    @ ./loading.jl:2314 [inlined]
 [17] macro expansion
    @ ./lock.jl:273 [inlined]
 [18] __require(into::Module, mod::Symbol)
    @ Base ./loading.jl:2271
 [19] #invoke_in_world#3
    @ ./essentials.jl:1089 [inlined]
 [20] invoke_in_world
    @ ./essentials.jl:1086 [inlined]
 [21] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:2260
 [22] include
    @ ./Base.jl:562 [inlined]
 [23] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
    @ Base ./loading.jl:2924
 [24] top-level scope
    @ stdin:6
in expression starting at /root/.julia/packages/NumericalEarth/3PaZn/ext/NumericalEarthReactantExt.jl:1
in expression starting at stdin:6
NumericalEarth 

Failed to precompile NumericalEarth [904d977b-046a-4731-8b86-9235c0d1ef02] to "/root/.julia/compiled/v1.11/NumericalEarth/jl_HixCtb".
WARNING: could not import Grids.LeftConnectedRightCenterFolded into SeaIceDynamics
WARNING: could not import Grids.LeftConnectedRightFaceFolded into SeaIceDynamics
WARNING: could not import Grids.LeftConnectedRightCenterConnected into SeaIceDynamics
WARNING: could not import Grids.LeftConnectedRightFaceConnected into SeaIceDynamics
ERROR: LoadError: UndefVarError: `LeftConnectedRightCenterFolded` not defined in `ClimaSeaIce.SeaIceDynamics`
Stacktrace:
  [1] top-level scope
    @ ~/.julia/packages/ClimaSeaIce/xYhrL/src/SeaIceDynamics/split_explicit_momentum_equations.jl:13
  [2] include(mod::Module, _path::String)
    @ Base ./Base.jl:562
  [3] include(x::String)
    @ ClimaSeaIce.SeaIceDynamics ~/.julia/packages/ClimaSeaIce/xYhrL/src/SeaIceDynamics/SeaIceDynamics.jl:1
  [4] top-level scope
    @ ~/.julia/packages/ClimaSeaIce/xYhrL/src/SeaIceDynamics/SeaIceDynamics.jl:48
  [5] include(mod::Module, _path::String)
    @ Base ./Base.jl:562
  [6] include(x::String)
    @ ClimaSeaIce ~/.julia/packages/ClimaSeaIce/xYhrL/src/ClimaSeaIce.jl:2
  [7] top-level scope
    @ ~/.julia/packages/ClimaSeaIce/xYhrL/src/ClimaSeaIce.jl:43
  [8] include
    @ ./Base.jl:562 [inlined]
  [9] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::String)
    @ Base ./loading.jl:2924
 [10] top-level scope
    @ stdin:6
in expression starting at /root/.julia/packages/ClimaSeaIce/xYhrL/src/SeaIceDynamics/split_explicit_momentum_equations.jl:13
in expression starting at /root/.julia/packages/ClimaSeaIce/xYhrL/src/SeaIceDynamics/SeaIceDynamics.jl:1
in expression starting at /root/.julia/packages/ClimaSeaIce/xYhrL/src/ClimaSeaIce.jl:1
in expression starting at stdin:6
ERROR: LoadError: Failed to precompile ClimaSeaIce [6ba0ff68-24e6-4315-936c-2e99227c95a4] to "/root/.julia/compiled/v1.11/ClimaSeaIce/jl_FLGDqT".
Stacktrace:
  [1] error(s::String)
    @ Base ./error.jl:35
  [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool; flags::Cmd, cacheflags::Base.CacheFlags, reasons::Dict{String, Int64}, loadable_exts::Nothing)
    @ Base ./loading.jl:3217
  [3] (::Base.var"#1110#1111"{Base.PkgId})()
    @ Base ./loading.jl:2579
  [4] mkpidlock(f::Base.var"#1110#1111"{Base.PkgId}, at::String, pid::Int32; kwopts::@Kwargs{stale_age::Int64, wait::Bool})
    @ FileWatching.Pidfile /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/FileWatching/src/pidfile.jl:95
  [5] #mkpidlock#6
    @ /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/FileWatching/src/pidfile.jl:90 [inlined]
  [6] trymkpidlock(::Function, ::Vararg{Any}; kwargs::@Kwargs{stale_age::Int64})
    @ FileWatching.Pidfile /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/FileWatching/src/pidfile.jl:116
  [7] #invokelatest#2
    @ ./essentials.jl:1057 [inlined]
  [8] invokelatest
    @ ./essentials.jl:1052 [inlined]
  [9] maybe_cachefile_lock(f::Base.var"#1110#1111"{Base.PkgId}, pkg::Base.PkgId, srcpath::String; stale_age::Int64)
    @ Base ./loading.jl:3741
 [10] maybe_cachefile_lock
    @ ./loading.jl:3738 [inlined]
 [11] _require(pkg::Base.PkgId, env::String)
    @ Base ./loading.jl:2565
 [12] __require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:2388
 [13] #invoke_in_world#3
    @ ./essentials.jl:1089 [inlined]
 [14] invoke_in_world
    @ ./essentials.jl:1086 [inlined]
 [15] _require_prelocked(uuidkey::Base.PkgId, env::String)
    @ Base ./loading.jl:2375
 [16] macro expansion
    @ ./loading.jl:2314 [inlined]
 [17] macro expansion
    @ ./lock.jl:273 [inlined]
 [18] __require(into::Module, mod::Symbol)
    @ Base ./loading.jl:2271
 [19] #invoke_in_world#3
    @ ./essentials.jl:1089 [inlined]
 [20] invoke_in_world
    @ ./essentials.jl:1086 [inlined]
 [21] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:2260
 [22] include(mod::Module, _path::String)
    @ Base ./Base.jl:562
 [23] include(x::String)
    @ NumericalEarth ~/.julia/packages/NumericalEarth/3PaZn/src/NumericalEarth.jl:1
 [24] top-level scope
    @ ~/.julia/packages/NumericalEarth/3PaZn/src/NumericalEarth.jl:98
 [25] include
    @ ./Base.jl:562 [inlined]
 [26] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing)
    @ Base ./loading.jl:2924
 [27] top-level scope
    @ stdin:6
in expression starting at /root/.julia/packages/NumericalEarth/3PaZn/src/EarthSystemModels/EarthSystemModels.jl:1
in expression starting at /root/.julia/packages/NumericalEarth/3PaZn/src/NumericalEarth.jl:1
in expression starting at stdin:6

@wsmoses

wsmoses commented Jun 17, 2026

Copy link
Copy Markdown
Member

@glwagner so I think your GB update pr needs some work then

@glwagner

Copy link
Copy Markdown
Collaborator Author

The precompile failure was from the pinned commit being stale: 0590584 sits one commit before ab53225 ("Pin ClimaSeaIce for NumericalEarth CI") on the #258 branch, so ClimaSeaIce resolved to a version incompatible with Oceananigans v0.106 (LeftConnectedRightCenterFolded not defined).

Bumped the pin to the current #258 head a72b47b, which includes that ClimaSeaIce pin. Let's see if CI is happier now.

@wsmoses

wsmoses commented Jun 18, 2026

Copy link
Copy Markdown
Member
I0000 00:00:1781760075.929547   58065 pjrt_client.cc:573] Addressable PjRt-IFRT device: TpuDevice(id=3, process_index=0, coords=(1,1,0), core_on_chip=0)
Ndev = length(Reactant.devices()) = 4
[ Info: Generating model...
ERROR: LoadError: MethodError: no method matching ka_with_reactant(::Nothing, ::Nothing, ::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:1520)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_bottom_and_top_halo!)}, ::OffsetArrays.OffsetArray{Reactant.TracedRNumber{Float32}, 3, Reactant.TracedRArray{Float32, 3}}, ::Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, ::Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, ::Tuple{Face, Center, Center}, ::LatitudeLongitudeGrid{Reactant.TracedRNumber{Float32}, Periodic, Bounded, Bounded, Oceananigans.Grids.StaticVerticalDiscretization{OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, Float32, Float32, Distributed{ReactantState, nothing, Partition{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Int64, Tuple{Int64, Int64, Int64}, Reactant.Sharding.Mesh{2, Vector{Int64}}, Nothing, Nothing, Base.RefValue{Int64}, Vector{Reactant.XLA.IFRT.Device}}, Int64}, ::Tuple{Clock{Reactant.TracedRNumber{Float32}, Float32, Reactant.TracedRNumber{Int64}, Int64}, @NamedTuple{u::Field{Face, Center, Center, Nothing, LatitudeLongitudeGrid{Reactant.TracedRNumber{Float32}, Periodic, Bounded, Bounded, Oceananigans.Grids.StaticVerticalDiscretization{OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, Float32, Float32, Distributed{ReactantState, nothing, Partition{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Int64, Tuple{Int64, Int64, Int64}, Reactant.Sharding.Mesh{2, Vector{Int64}}, Nothing, Nothing, Base.RefValue{Int64}, Vector{Reactant.XLA.IFRT.Device}}, Int64}, Tuple{Colon, Colon, Colon}, OffsetArrays.OffsetArray{Reactant.TracedRNumber{Float32}, 3, Reactant.TracedRArray{Float32, 3}}, Float32, FieldBoundaryConditions{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Nothing, @NamedTuple{bottom_and_top::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:1520)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_bottom_and_top_halo!)}, south_and_north::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:4)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_south_and_north_halo!)}, west_and_east::Oceananigans.BoundaryConditions.PeriodicFillHalo{KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:1536, 1:20)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_periodic_west_and_east_halo!)}, 3056, 8}}, @NamedTuple{bottom_and_top::Tuple{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, south_and_north::Tuple{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, west_and_east::Tuple{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}}}}, Nothing, Nothing}, v::Field{Center, Face, Center, Nothing, LatitudeLongitudeGrid{Reactant.TracedRNumber{Float32}, Periodic, Bounded, Bounded, Oceananigans.Grids.StaticVerticalDiscretization{OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, Float32, Float32, Distributed{ReactantState, nothing, Partition{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Int64, Tuple{Int64, Int64, Int64}, Reactant.Sharding.Mesh{2, Vector{Int64}}, Nothing, Nothing, Base.RefValue{Int64}, Vector{Reactant.XLA.IFRT.Device}}, Int64}, Tuple{Colon, Colon, Colon}, OffsetArrays.OffsetArray{Reactant.TracedRNumber{Float32}, 3, Reactant.TracedRArray{Float32, 3}}, Float32, FieldBoundaryConditions{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Open{Nothing}, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Open{Nothing}, Nothing}, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Nothing, @NamedTuple{bottom_and_top::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:1521)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_bottom_and_top_halo!)}, south_and_north::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:4)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_south_and_north_halo!)}, west_and_east::Oceananigans.BoundaryConditions.PeriodicFillHalo{KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:1536, 1:20)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_periodic_west_and_east_halo!)}, 3056, 8}}, @NamedTuple{bottom_and_top::Tuple{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, south_and_north::Tuple{BoundaryCondition{Oceananigans.BoundaryConditions.Open{Nothing}, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Open{Nothing}, Nothing}}, west_and_east::Tuple{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}}}}, Nothing, Nothing}, w::Field{Center, Center, Face, Nothing, LatitudeLongitudeGrid{Reactant.TracedRNumber{Float32}, Periodic, Bounded, Bounded, Oceananigans.Grids.StaticVerticalDiscretization{OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, Float32, Float32, Distributed{ReactantState, nothing, Partition{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Int64, Tuple{Int64, Int64, Int64}, Reactant.Sharding.Mesh{2, Vector{Int64}}, Nothing, Nothing, Base.RefValue{Int64}, Vector{Reactant.XLA.IFRT.Device}}, Int64}, Tuple{Colon, Colon, Colon}, OffsetArrays.OffsetArray{Reactant.TracedRNumber{Float32}, 3, Reactant.TracedRArray{Float32, 3}}, Float32, FieldBoundaryConditions{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Nothing, Nothing, Nothing, @NamedTuple{bottom_and_top::Nothing, south_and_north::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:5)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_south_and_north_halo!)}, west_and_east::Oceananigans.BoundaryConditions.PeriodicFillHalo{KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:1536, 1:20)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_periodic_west_and_east_halo!)}, 3056, 8}}, @NamedTuple{bottom_and_top::Tuple{Nothing, Nothing}, south_and_north::Tuple{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, west_and_east::Tuple{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}}}}, Nothing, Nothing}, T::Field{Center, Center, Center, Nothing, LatitudeLongitudeGrid{Reactant.TracedRNumber{Float32}, Periodic, Bounded, Bounded, Oceananigans.Grids.StaticVerticalDiscretization{OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, Float32, Float32, Distributed{ReactantState, nothing, Partition{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Int64, Tuple{Int64, Int64, Int64}, Reactant.Sharding.Mesh{2, Vector{Int64}}, Nothing, Nothing, Base.RefValue{Int64}, Vector{Reactant.XLA.IFRT.Device}}, Int64}, Tuple{Colon, Colon, Colon}, OffsetArrays.OffsetArray{Reactant.TracedRNumber{Float32}, 3, Reactant.TracedRArray{Float32, 3}}, Float32, FieldBoundaryConditions{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Nothing, @NamedTuple{bottom_and_top::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:1520)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_bottom_and_top_halo!)}, south_and_north::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:4)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_south_and_north_halo!)}, west_and_east::Oceananigans.BoundaryConditions.PeriodicFillHalo{KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:1536, 1:20)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_periodic_west_and_east_halo!)}, 3056, 8}}, @NamedTuple{bottom_and_top::Tuple{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, south_and_north::Tuple{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, west_and_east::Tuple{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}}}}, Nothing, Nothing}, S::Field{Center, Center, Center, Nothing, LatitudeLongitudeGrid{Reactant.TracedRNumber{Float32}, Periodic, Bounded, Bounded, Oceananigans.Grids.StaticVerticalDiscretization{OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, Float32, Float32, Distributed{ReactantState, nothing, Partition{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Int64, Tuple{Int64, Int64, Int64}, Reactant.Sharding.Mesh{2, Vector{Int64}}, Nothing, Nothing, Base.RefValue{Int64}, Vector{Reactant.XLA.IFRT.Device}}, Int64}, Tuple{Colon, Colon, Colon}, OffsetArrays.OffsetArray{Reactant.TracedRNumber{Float32}, 3, Reactant.TracedRArray{Float32, 3}}, Float32, FieldBoundaryConditions{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Nothing, @NamedTuple{bottom_and_top::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:1520)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_bottom_and_top_halo!)}, south_and_north::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:4)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_south_and_north_halo!)}, west_and_east::Oceananigans.BoundaryConditions.PeriodicFillHalo{KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(16, 16)}, Oceananigans.Utils.OffsetStaticSize{(1:1536, 1:20)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_periodic_west_and_east_halo!)}, 3056, 8}}, @NamedTuple{bottom_and_top::Tuple{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, south_and_north::Tuple{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, west_and_east::Tuple{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}}}}, Nothing, Nothing}, η::Field{Center, Center, Face, Nothing, LatitudeLongitudeGrid{Reactant.TracedRNumber{Float32}, Periodic, Bounded, Bounded, Oceananigans.Grids.StaticVerticalDiscretization{OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, Float32, Float32, Distributed{ReactantState, nothing, Partition{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Int64, Tuple{Int64, Int64, Int64}, Reactant.Sharding.Mesh{2, Vector{Int64}}, Nothing, Nothing, Base.RefValue{Int64}, Vector{Reactant.XLA.IFRT.Device}}, Int64}, Tuple{Colon, Colon, UnitRange{Int64}}, OffsetArrays.OffsetArray{Reactant.TracedRNumber{Float32}, 3, Reactant.TracedRArray{Float32, 3}}, Float32, FieldBoundaryConditions{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Nothing, Nothing, Nothing, @NamedTuple{bottom_and_top::Nothing, south_and_north::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(256, 1)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 5:5)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_south_and_north_halo!)}, west_and_east::Oceananigans.BoundaryConditions.PeriodicFillHalo{KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(256, 1)}, Oceananigans.Utils.OffsetStaticSize{(1:1536, 1:1)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_periodic_west_and_east_halo!)}, 3056, 8}}, @NamedTuple{bottom_and_top::Tuple{Nothing, Nothing}, south_and_north::Tuple{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, west_and_east::Tuple{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}}}}, Nothing, Nothing}, U::Field{Face, Center, Nothing, Nothing, LatitudeLongitudeGrid{Reactant.TracedRNumber{Float32}, Periodic, Bounded, Bounded, Oceananigans.Grids.StaticVerticalDiscretization{OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, Float32, Float32, Distributed{ReactantState, nothing, Partition{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Int64, Tuple{Int64, Int64, Int64}, Reactant.Sharding.Mesh{2, Vector{Int64}}, Nothing, Nothing, Base.RefValue{Int64}, Vector{Reactant.XLA.IFRT.Device}}, Int64}, Tuple{Colon, Colon, Colon}, OffsetArrays.OffsetArray{Reactant.TracedRNumber{Float32}, 3, Reactant.TracedRArray{Float32, 3}}, Float32, FieldBoundaryConditions{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Nothing, Nothing, Oceananigans.BoundaryConditions.DefaultBoundaryCondition{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, @NamedTuple{bottom_and_top::Nothing, south_and_north::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(256, 1)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:1)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_south_and_north_halo!)}, west_and_east::Oceananigans.BoundaryConditions.PeriodicFillHalo{KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(256, 1)}, Oceananigans.Utils.OffsetStaticSize{(1:1536, 1:1)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_periodic_west_and_east_halo!)}, 3056, 8}}, @NamedTuple{bottom_and_top::Tuple{Nothing, Nothing}, south_and_north::Tuple{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition, Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, west_and_east::Tuple{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}}}}, Nothing, Nothing}, V::Field{Center, Face, Nothing, Nothing, LatitudeLongitudeGrid{Reactant.TracedRNumber{Float32}, Periodic, Bounded, Bounded, Oceananigans.Grids.StaticVerticalDiscretization{OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, Float32, Float32, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Float32, StepRangeLen{Float32, Float64, Float64, Int64}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, OffsetArrays.OffsetVector{Reactant.TracedRNumber{Float32}, Reactant.TracedRArray{Float32, 1}}, Float32, Float32, Distributed{ReactantState, nothing, Partition{Int64, Int64, Int64}, Tuple{Int64, Int64, Int64}, Int64, Tuple{Int64, Int64, Int64}, Reactant.Sharding.Mesh{2, Vector{Int64}}, Nothing, Nothing, Base.RefValue{Int64}, Vector{Reactant.XLA.IFRT.Device}}, Int64}, Tuple{Colon, Colon, Colon}, OffsetArrays.OffsetArray{Reactant.TracedRNumber{Float32}, 3, Reactant.TracedRArray{Float32, 3}}, Float32, FieldBoundaryConditions{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Open{Nothing}, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Open{Nothing}, Nothing}, Nothing, Nothing, Oceananigans.BoundaryConditions.DefaultBoundaryCondition{Oceananigans.BoundaryConditions.NoFluxBoundaryCondition}, @NamedTuple{bottom_and_top::Nothing, south_and_north::KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(256, 1)}, Oceananigans.Utils.OffsetStaticSize{(1:3056, 1:1)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_south_and_north_halo!)}, west_and_east::Oceananigans.BoundaryConditions.PeriodicFillHalo{KernelAbstractions.Kernel{ReactantKernelAbstractionsExt.ReactantBackend, KernelAbstractions.NDIteration.StaticSize{(256, 1)}, Oceananigans.Utils.OffsetStaticSize{(1:1536, 1:1)}, typeof(Oceananigans.BoundaryConditions.gpu__fill_periodic_west_and_east_halo!)}, 3056, 8}}, @NamedTuple{bottom_and_top::Tuple{Nothing, Nothing}, south_and_north::Tuple{BoundaryCondition{Oceananigans.BoundaryConditions.Open{Nothing}, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Open{Nothing}, Nothing}}, west_and_east::Tuple{BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}, BoundaryCondition{Oceananigans.BoundaryConditions.Periodic, Nothing}}}}, Nothing, Nothing}}})
The function `ka_with_reactant` exists, but no method is defined for this combination of argument types.
Attempted to raise a KernelAbstractions kernel with Reactant but CUDA.jl is not loaded. Note that CUDA.jl is needed regardless of the target backend. 
Load CUDA.jl using `using CUDA`. You might need to restart the Julia process (even if Revise.jl is loaded).
Stacktrace:
  [1] macro expansion

glwagner and others added 3 commits June 25, 2026 14:17
Pin GB-25 commit 0590584 (from PRONTOLab/GB-25#258) alongside main so
CI runs both and we can compare performance directly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The previous pin (0590584) predated commit ab53225 "Pin ClimaSeaIce for
NumericalEarth CI", so ClimaSeaIce resolved to a version incompatible
with Oceananigans v0.106 and failed to precompile. Use the current PR
head a72b47b instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ipts)

The previous pin a72b47b failed the GB-25 sharded compile with
`MethodError: no method matching ka_with_reactant(...)` because that
script did not load CUDA.jl (required for ReactantCUDAExt's KA-raising).
bb161a7 adds `using CUDA`, so the test should run again.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@wsmoses wsmoses force-pushed the gb25-perf-pin-258 branch from 7dd8154 to 430e41e Compare June 25, 2026 18:17
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@wsmoses

wsmoses commented Jun 25, 2026

Copy link
Copy Markdown
Member

@glwagner

ERROR: LoadError: Unsatisfiable requirements detected for package Reactant [3c362404]:
 Reactant [3c362404] log:
 ├─possible versions are: 0.2.268 or uninstalled
 ├─restricted to versions 0.2.247 - 0.2 by GordonBell25 [01bae11a], leaving only versions: 0.2.268
 │ └─GordonBell25 [01bae11a] log:
 │   ├─possible versions are: 0.1.0 or uninstalled
 │   └─GordonBell25 [01bae11a] is fixed to version 0.1.0
 ├─Reactant [3c362404] is fixed to version 0.2.268
 └─restricted by compatibility requirements with NumericalEarth [904d977b] to versions: uninstalled — no versions left
   └─NumericalEarth [904d977b] log:
     ├─possible versions are: 0.1.0 - 0.5.7 or uninstalled
     └─restricted to versions 0.5.7 - 0.5 by GordonBell25 [01bae11a], leaving only versions: 0.5.7
       └─GordonBell25 [01bae11a] log: see above
Stacktrace:
  [1] propagate_constraints!(graph::Pkg.Resolve.Graph, sources::Set{Int64}; log_events::Bool)
    @ Pkg.Resolve /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/Resolve/graphtype.jl:1072
  [2] propagate_constraints! (repeats 2 times)
    @ /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/Resolve/graphtype.jl:1008 [inlined]
  [3] simplify_graph!(graph::Pkg.Resolve.Graph, sources::Set{Int64}; clean_graph::Bool)
    @ Pkg.Resolve /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/Resolve/graphtype.jl:1533
  [4] simplify_graph! (repeats 2 times)
    @ /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/Resolve/graphtype.jl:1532 [inlined]
  [5] resolve_versions!(env::Pkg.Types.EnvCache, registries::Vector{Pkg.Registry.RegistryInstance}, pkgs::Vector{Pkg.Types.PackageSpec}, julia_version::VersionNumber, installed_only::Bool)
    @ Pkg.Operations /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/Operations.jl:434
  [6] targeted_resolve(env::Pkg.Types.EnvCache, registries::Vector{Pkg.Registry.RegistryInstance}, pkgs::Vector{Pkg.Types.PackageSpec}, preserve::Pkg.Types.PreserveLevel, julia_version::VersionNumber)
    @ Pkg.Operations /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/Operations.jl:1402
  [7] tiered_resolve(env::Pkg.Types.EnvCache, registries::Vector{Pkg.Registry.RegistryInstance}, pkgs::Vector{Pkg.Types.PackageSpec}, julia_version::VersionNumber, try_all_installed::Bool)
    @ Pkg.Operations /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/Operations.jl:1391
  [8] _resolve(io::IOContext{IO}, env::Pkg.Types.EnvCache, registries::Vector{Pkg.Registry.RegistryInstance}, pkgs::Vector{Pkg.Types.PackageSpec}, preserve::Pkg.Types.PreserveLevel, julia_version::VersionNumber)
    @ Pkg.Operations /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/Operations.jl:1412
  [9] add(ctx::Pkg.Types.Context, pkgs::Vector{Pkg.Types.PackageSpec}, new_git::Set{Base.UUID}; allow_autoprecomp::Bool, preserve::Pkg.Types.PreserveLevel, platform::Base.BinaryPlatforms.Platform, target::Symbol)
    @ Pkg.Operations /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/Operations.jl:1446
 [10] add
    @ /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/Operations.jl:1418 [inlined]
 [11] add(ctx::Pkg.Types.Context, pkgs::Vector{Pkg.Types.PackageSpec}; preserve::Pkg.Types.PreserveLevel, platform::Base.BinaryPlatforms.Platform, target::Symbol, allow_autoprecomp::Bool, kwargs::@Kwargs{io::IOContext{IO}})
    @ Pkg.API /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/API.jl:312
 [12] add(pkgs::Vector{Pkg.Types.PackageSpec}; io::IOContext{IO}, kwargs::@Kwargs{})
    @ Pkg.API /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/API.jl:159
 [13] add(pkgs::Vector{Pkg.Types.PackageSpec})
    @ Pkg.API /__w/_tool/julia/1.11.9/x64/share/julia/stdlib/v1.11/Pkg/src/API.jl:148
 [14] top-level scope
    @ /__w/_temp/627eb3ac-d578-4bff-97af-3a3b24ed4dff:7
in expression starting at /__w/_temp/627eb3ac-d578-4bff-97af-3a3b24ed4dff:5

… 0.2.268)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

3 participants