InputOutput.write! fails `JET.@test_opt`
- Dominant language
- Julia
- Stars
- 117
- Forks
- 19
- Avg merge
- 3d 4h
- Merged PRs (30d)
- 41
Description
## Describe the bug
InputOutput.write! fails `JET.@test_opt`:
```
││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:434 ClimaCore.InputOutput.write!(writer, component, string(name, "/", key))
│││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:387 space_name = ClimaCore.InputOutput.write!(writer, space)
││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:91 #self#(writer, obj, ClimaCore.InputOutput.defaultname(obj))
│││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:91 ClimaCore.InputOutput.get!(#1, writer.cache, name)
││││││││┌ @ dict.jl:481 default()
│││││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:92 ClimaCore.InputOutput.write_new!(getfield(#self#, :writer), getfield(#self#, :obj), getfield(#self#, :name))
││││││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:345 ClimaCore.InputOutput.write!(writer, space.horizontal_space)
│││││││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:91 #self#(writer, obj, ClimaCore.InputOutput.defaultname(obj))
││││││││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:90 ClimaCore.InputOutput.write!(::ClimaCore.InputOutput.HDF5Writer{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}}, ::ClimaCore.Spaces.SpectralElementSpace2D{ClimaCore.Topologies.Topology2D{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.EquiangularCubedSphere{ClimaCore.Domains.SphereDomain{Float32}, ClimaCore.Meshes.NormalizedBilinearMap}, Vector{CartesianIndex{3}}, Array{Int64, 3}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64}}, Vector{Int64}, Vector{Tuple{Bool, Int64, Int64}}, Vector{Int64}, NamedTuple{(), Tuple{}}, Vector{Tuple{Int64, Int64}}}, ClimaCore.Spaces.Quadratures.GLL{4}, ClimaCore.Geometry.SphericalGlobalGeometry{Float32}, ClimaCore.DataLayouts.IJFH{ClimaCore.Geometry.LocalGeometry{(1, 2), ClimaCore.Geometry.LatLongPoint{Float32}, Float32, StaticArraysCore.SMatrix{2, 2, Float32, 4}}, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IJFH{Float32, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IFH{ClimaCore.Geometry.SurfaceGeometry{Float32, ClimaCore.Geometry.UVVector{Float32}}, 4, Array{Float32, 3}}, NamedTuple{(), Tuple{}}}, ::String)
│││││││││││││ failed to optimize due to recursion: ClimaCore.InputOutput.write!(::ClimaCore.InputOutput.HDF5Writer{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}}, ::ClimaCore.Spaces.SpectralElementSpace2D{ClimaCore.Topologies.Topology2D{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.EquiangularCubedSphere{ClimaCore.Domains.SphereDomain{Float32}, ClimaCore.Meshes.NormalizedBilinearMap}, Vector{CartesianIndex{3}}, Array{Int64, 3}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64}}, Vector{Int64}, Vector{Tuple{Bool, Int64, Int64}}, Vector{Int64}, NamedTuple{(), Tuple{}}, Vector{Tuple{Int64, Int64}}}, ClimaCore.Spaces.Quadratures.GLL{4}, ClimaCore.Geometry.SphericalGlobalGeometry{Float32}, ClimaCore.DataLayouts.IJFH{ClimaCore.Geometry.LocalGeometry{(1, 2), ClimaCore.Geometry.LatLongPoint{Float32}, Float32, StaticArraysCore.SMatrix{2, 2, Float32, 4}}, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IJFH{Float32, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IFH{ClimaCore.Geometry.SurfaceGeometry{Float32, ClimaCore.Geometry.UVVector{Float32}}, 4, Array{Float32, 3}}, NamedTuple{(), Tuple{}}}, ::String)
││││││││││││└──────────────────────────────────────────────────────────────────────────────────────────
│││││││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:90 ClimaCore.InputOutput.write!(::ClimaCore.InputOutput.HDF5Writer{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}}, ::ClimaCore.Spaces.SpectralElementSpace2D{ClimaCore.Topologies.Topology2D{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.EquiangularCubedSphere{ClimaCore.Domains.SphereDomain{Float32}, ClimaCore.Meshes.NormalizedBilinearMap}, Vector{CartesianIndex{3}}, Array{Int64, 3}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64}}, Vector{Int64}, Vector{Tuple{Bool, Int64, Int64}}, Vector{Int64}, NamedTuple{(), Tuple{}}, Vector{Tuple{Int64, Int64}}}, ClimaCore.Spaces.Quadratures.GLL{4}, ClimaCore.Geometry.SphericalGlobalGeometry{Float32}, ClimaCore.DataLayouts.IJFH{ClimaCore.Geometry.LocalGeometry{(1, 2), ClimaCore.Geometry.LatLongPoint{Float32}, Float32, StaticArraysCore.SMatrix{2, 2, Float32, 4}}, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IJFH{Float32, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IFH{ClimaCore.Geometry.SurfaceGeometry{Float32, ClimaCore.Geometry.UVVector{Float32}}, 4, Array{Float32, 3}}, NamedTuple{(), Tuple{}}})
││││││││││││ failed to optimize due to recursion: ClimaCore.InputOutput.write!(::ClimaCore.InputOutput.HDF5Writer{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}}, ::ClimaCore.Spaces.SpectralElementSpace2D{ClimaCore.Topologies.Topology2D{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.EquiangularCubedSphere{ClimaCore.Domains.SphereDomain{Float32}, ClimaCore.Meshes.NormalizedBilinearMap}, Vector{CartesianIndex{3}}, Array{Int64, 3}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64}}, Vector{Int64}, Vector{Tuple{Bool, Int64, Int64}}, Vector{Int64}, NamedTuple{(), Tuple{}}, Vector{Tuple{Int64, Int64}}}, ClimaCore.Spaces.Quadratures.GLL{4}, ClimaCore.Geometry.SphericalGlobalGeometry{Float32}, ClimaCore.DataLayouts.IJFH{ClimaCore.Geometry.LocalGeometry{(1, 2), ClimaCore.Geometry.LatLongPoint{Float32}, Float32, StaticArraysCore.SMatrix{2, 2, Float32, 4}}, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IJFH{Float32, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IFH{ClimaCore.Geometry.SurfaceGeometry{Float32, ClimaCore.Geometry.UVVector{Float32}}, 4, Array{Float32, 3}}, NamedTuple{(), Tuple{}}})
│││││││││││└──────────────────────────────────────────────────────────────────────────────────────────
││││││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:350 ClimaCore.InputOutput.write!(writer, space.vertical_topology)
│││││││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:91 #self#(writer, obj, ClimaCore.InputOutput.defaultname(obj))
││││││││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:90 ClimaCore.InputOutput.write!(::ClimaCore.InputOutput.HDF5Writer{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}}, ::ClimaCore.Topologies.IntervalTopology{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.IntervalMesh{ClimaCore.Domains.IntervalDomain{ClimaCore.Geometry.ZPoint{Float32}, Tuple{Symbol, Symbol}}, Vector{ClimaCore.Geometry.ZPoint{Float32}}}, NamedTuple{(:bottom, :top), Tuple{Int64, Int64}}}, ::String)
│││││││││││││ failed to optimize due to recursion: ClimaCore.InputOutput.write!(::ClimaCore.InputOutput.HDF5Writer{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}}, ::ClimaCore.Topologies.IntervalTopology{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.IntervalMesh{ClimaCore.Domains.IntervalDomain{ClimaCore.Geometry.ZPoint{Float32}, Tuple{Symbol, Symbol}}, Vector{ClimaCore.Geometry.ZPoint{Float32}}}, NamedTuple{(:bottom, :top), Tuple{Int64, Int64}}}, ::String)
││││││││││││└──────────────────────────────────────────────────────────────────────────────────────────
│││││││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:90 ClimaCore.InputOutput.write!(::ClimaCore.InputOutput.HDF5Writer{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}}, ::ClimaCore.Topologies.IntervalTopology{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.IntervalMesh{ClimaCore.Domains.IntervalDomain{ClimaCore.Geometry.ZPoint{Float32}, Tuple{Symbol, Symbol}}, Vector{ClimaCore.Geometry.ZPoint{Float32}}}, NamedTuple{(:bottom, :top), Tuple{Int64, Int64}}})
││││││││││││ failed to optimize due to recursion: ClimaCore.InputOutput.write!(::ClimaCore.InputOutput.HDF5Writer{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}}, ::ClimaCore.Topologies.IntervalTopology{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.IntervalMesh{ClimaCore.Domains.IntervalDomain{ClimaCore.Geometry.ZPoint{Float32}, Tuple{Symbol, Symbol}}, Vector{ClimaCore.Geometry.ZPoint{Float32}}}, NamedTuple{(:bottom, :top), Tuple{Int64, Int64}}})
│││││││││││└──────────────────────────────────────────────────────────────────────────────────────────
││││││││││┌ @ dev/.julia/packages/ClimaCore/ns6JD/src/InputOutput/writers.jl:337 ClimaCore.InputOutput.write_new!(::ClimaCore.InputOutput.HDF5Writer{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}}, ::ClimaCore.Spaces.ExtrudedFiniteDifferenceSpace{ClimaCore.Spaces.CellCenter, ClimaCore.Spaces.SpectralElementSpace2D{ClimaCore.Topologies.Topology2D{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.EquiangularCubedSphere{ClimaCore.Domains.SphereDomain{Float32}, ClimaCore.Meshes.NormalizedBilinearMap}, Vector{CartesianIndex{3}}, Array{Int64, 3}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64}}, Vector{Int64}, Vector{Tuple{Bool, Int64, Int64}}, Vector{Int64}, NamedTuple{(), Tuple{}}, Vector{Tuple{Int64, Int64}}}, ClimaCore.Spaces.Quadratures.GLL{4}, ClimaCore.Geometry.SphericalGlobalGeometry{Float32}, ClimaCore.DataLayouts.IJFH{ClimaCore.Geometry.LocalGeometry{(1, 2), ClimaCore.Geometry.LatLongPoint{Float32}, Float32, StaticArraysCore.SMatrix{2, 2, Float32, 4}}, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IJFH{Float32, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IFH{ClimaCore.Geometry.SurfaceGeometry{Float32, ClimaCore.Geometry.UVVector{Float32}}, 4, Array{Float32, 3}}, NamedTuple{(), Tuple{}}}, ClimaCore.Topologies.IntervalTopology{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.IntervalMesh{ClimaCore.Domains.IntervalDomain{ClimaCore.Geometry.ZPoint{Float32}, Tuple{Symbol, Symbol}}, Vector{ClimaCore.Geometry.ZPoint{Float32}}}, NamedTuple{(:bottom, :top), Tuple{Int64, Int64}}}, ClimaCore.Spaces.Flat, ClimaCore.Geometry.SphericalGlobalGeometry{Float32}, ClimaCore.DataLayouts.VIJFH{ClimaCore.Geometry.LocalGeometry{(1, 2, 3), ClimaCore.Geometry.LatLongZPoint{Float32}, Float32, StaticArraysCore.SMatrix{3, 3, Float32, 9}}, 4, Array{Float32, 5}}, ClimaCore.DataLayouts.VIJFH{ClimaCore.Geometry.LocalGeometry{(1, 2, 3), ClimaCore.Geometry.LatLongZPoint{Float32}, Float32, StaticArraysCore.SMatrix{3, 3, Float32, 9}}, 4, Array{Float32, 5}}}, ::String)
│││││││││││ failed to optimize due to recursion: ClimaCore.InputOutput.write_new!(::ClimaCore.InputOutput.HDF5Writer{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}}, ::ClimaCore.Spaces.ExtrudedFiniteDifferenceSpace{ClimaCore.Spaces.CellCenter, ClimaCore.Spaces.SpectralElementSpace2D{ClimaCore.Topologies.Topology2D{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.EquiangularCubedSphere{ClimaCore.Domains.SphereDomain{Float32}, ClimaCore.Meshes.NormalizedBilinearMap}, Vector{CartesianIndex{3}}, Array{Int64, 3}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64, Int64, Int64, Bool}}, Vector{Tuple{Int64, Int64}}, Vector{Int64}, Vector{Tuple{Bool, Int64, Int64}}, Vector{Int64}, NamedTuple{(), Tuple{}}, Vector{Tuple{Int64, Int64}}}, ClimaCore.Spaces.Quadratures.GLL{4}, ClimaCore.Geometry.SphericalGlobalGeometry{Float32}, ClimaCore.DataLayouts.IJFH{ClimaCore.Geometry.LocalGeometry{(1, 2), ClimaCore.Geometry.LatLongPoint{Float32}, Float32, StaticArraysCore.SMatrix{2, 2, Float32, 4}}, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IJFH{Float32, 4, Array{Float32, 4}}, ClimaCore.DataLayouts.IFH{ClimaCore.Geometry.SurfaceGeometry{Float32, ClimaCore.Geometry.UVVector{Float32}}, 4, Array{Float32, 3}}, NamedTuple{(), Tuple{}}}, ClimaCore.Topologies.IntervalTopology{ClimaComms.SingletonCommsContext{ClimaComms.CPUDevice}, ClimaCore.Meshes.IntervalMesh{ClimaCore.Domains.IntervalDomain{ClimaCore.Geometry.ZPoint{Float32}, Tuple{Symbol, Symbol}}, Vector{ClimaCore.Geometry.ZPoint{Float32}}}, NamedTuple{(:bottom, :top), Tuple{Int64, Int64}}}, ClimaCore.Spaces.Flat, ClimaCore.Geometry.SphericalGlobalGeometry{Float32}, ClimaCore.DataLayouts.VIJFH{ClimaCore.Geometry.LocalGeometry{(1, 2, 3), ClimaCore.Geometry.LatLongZPoint{Float32}, Float32, StaticArraysCore.SMatrix{3, 3, Float32, 9}}, 4, Array{Float32, 5}}, ClimaCore.DataLayouts.VIJFH{ClimaCore.Geometry.LocalGeometry{(1, 2, 3), ClimaCore.Geometry.LatLongZPoint{Float32}, Float32, StaticArraysCore.SMatrix{3, 3, Float32, 9}}, 4, Array{Float32, 5}}}, ::String)
││││││││││└───────────────────────────────────────────────────────────────────────────────────────────
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start in src/InputOutput/writers.jl at the write! and write_new! methods around lines 90, 337, 345, 350, 387, and 434. Reproduce the failure with JET.@test_opt and trace the recursive write! calls for SpectralElementSpace2D, IntervalTopology, and ExtrudedFiniteDifferenceSpace. Done means the reported recursion prevents the optimization failure.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- data
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100