Replies: 2 comments 3 replies
-
Hmm, I believe https://github.com/CliMA/Oceananigans.jl/blob/main/examples/two_dimensional_turbulence.jl Raise an issue if that doesn't work! |
Beta Was this translation helpful? Give feedback.
-
It worked for the two dimensional turbulence example. So I was checking and comparing the arrays from the example and the one I am trying to use and I found out why I couldn't directly assign the initial conditions while using GPU, but I am still having an error while running the simulation. For my example, I am reading a netcdf file and it was returning an array with a different format (Noticed it was using NCDatasets
ds = Dataset("data/input_coarsened.nc")
ds["b"][:]
> 10×50×48 Array{Union{Missing, Float32}, 3}:
So I simply did: bᵢ = Float64.(ds["b"][:])
set!(model; b=bᵢ) and it worked. But, when I try to run the simulation it returns the following error (doesn't happen for CPU): ┌ Info: Initializing simulation...
└ @ Oceananigans.Simulations /home/isimoesdesousa/.julia/packages/Oceananigans/DpyWt/src/Simulations/run.jl:167
┌ Info: i: 0000, t: 0 seconds, Δt: 1.100 minutes, umax = (0.0e+00, 0.0e+00, 0.0e+00) ms⁻¹, wall time: 0 seconds
└ @ Main In[1]:89
┌ Info: ... simulation initialization complete (38.447 seconds)
└ @ Oceananigans.Simulations /home/isimoesdesousa/.julia/packages/Oceananigans/DpyWt/src/Simulations/run.jl:202
┌ Info: Executing initial time step...
└ @ Oceananigans.Simulations /home/isimoesdesousa/.julia/packages/Oceananigans/DpyWt/src/Simulations/run.jl:112
InvalidIRError: compiling kernel gpu_calculate_Gu!(Cassette.Context{nametype(CUDACtx), Nothing, Nothing, KernelAbstractions.var"##PassType#257", Nothing, Cassette.DisableHooks}, typeof(Oceananigans.Models.NonhydrostaticModels.gpu_calculate_Gu!), KernelAbstractions.CompilerMetadata{KernelAbstractions.NDIteration.StaticSize{(10, 50, 48)}, KernelAbstractions.NDIteration.DynamicCheck, Nothing, Nothing, KernelAbstractions.NDIteration.NDRange{3, KernelAbstractions.NDIteration.StaticSize{(1, 4, 48)}, KernelAbstractions.NDIteration.StaticSize{(16, 16, 1)}, Nothing, Nothing}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, RectilinearGrid{Float64, Periodic, Bounded, Bounded, Float64, Float64, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, Nothing}, UpwindBiasedFifthOrder, FPlane{Float64}, Nothing, Tuple{ScalarDiffusivity{Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, Oceananigans.TurbulenceClosures.ThreeDimensionalFormulation, typeof(νz), NamedTuple{(:b,), Tuple{typeof(νz)}}}, HorizontalScalarDiffusivity{Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, typeof(νh), NamedTuple{(:b,), Tuple{typeof(νh)}}}}, Buoyancy{BuoyancyTracer, Oceananigans.Grids.ZDirection}, NamedTuple{(:velocities, :tracers), Tuple{NamedTuple{(:u, :v, :w), Tuple{Oceananigans.Fields.ZeroField{Int64, 3}, Oceananigans.Fields.ZeroField{Int64, 3}, Oceananigans.Fields.ZeroField{Int64, 3}}}, NamedTuple{(:b,), Tuple{Oceananigans.Fields.ZeroField{Int64, 3}}}}}, NamedTuple{(:u, :v, :w), Tuple{OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}}}, NamedTuple{(:b,), Tuple{OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}}}, Tuple{Nothing, Nothing}, NamedTuple{(:u, :v, :w, :b), NTuple{4, typeof(Oceananigans.Forcings.zeroforcing)}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, NamedTuple{(:time, :iteration, :stage), Tuple{Float64, Int64, Int64}}) resulted in invalid LLVM IR
Reason: unsupported dynamic function invocation (call to overdub)
Stacktrace:
[1] νz(::Float64, ::Float64, ::Float64, ::Float64)
@ ./In[1]:35
[2] overdub
@ ./In[1]:35
[3] νᶜᶜᶜ(::Int64, ::Int64, ::Int64, ::RectilinearGrid{Float64, Periodic, Bounded, Bounded, Float64, Float64, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, Nothing}, ::NamedTuple{(:time, :iteration, :stage), Tuple{Float64, Int64, Int64}}, ::Tuple{Center, Center, Center}, ::typeof(νz))
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/closure_kernel_operators.jl:107
[4] overdub
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/closure_kernel_operators.jl:107
[5] νᶜᶜᶜ(::Int64, ::Int64, ::Int64, ::RectilinearGrid{Float64, Periodic, Bounded, Bounded, Float64, Float64, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, Nothing}, ::ScalarDiffusivity{Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, Oceananigans.TurbulenceClosures.ThreeDimensionalFormulation, typeof(νz), NamedTuple{(:b,), Tuple{typeof(νz)}}}, ::Nothing, ::NamedTuple{(:time, :iteration, :stage), Tuple{Float64, Int64, Int64}})
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/abstract_scalar_diffusivity_closure.jl:63
[6] overdub
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/abstract_scalar_diffusivity_closure.jl:63
[7] ν_σᶜᶜᶜ(::Int64, ::Int64, ::Int64, ::RectilinearGrid{Float64, Periodic, Bounded, Bounded, Float64, Float64, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, Nothing}, ::ScalarDiffusivity{Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, Oceananigans.TurbulenceClosures.ThreeDimensionalFormulation, typeof(νz), NamedTuple{(:b,), Tuple{typeof(νz)}}}, ::Nothing, ::NamedTuple{(:time, :iteration, :stage), Tuple{Float64, Int64, Int64}}, ::typeof(Oceananigans.TurbulenceClosures.Σ₁₁), ::OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, ::OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, ::OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}})
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/closure_kernel_operators.jl:54
[8] overdub
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/closure_kernel_operators.jl:54
[9] viscous_flux_ux(::Int64, ::Int64, ::Int64, ::RectilinearGrid{Float64, Periodic, Bounded, Bounded, Float64, Float64, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, Nothing}, ::ScalarDiffusivity{Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, Oceananigans.TurbulenceClosures.ThreeDimensionalFormulation, typeof(νz), NamedTuple{(:b,), Tuple{typeof(νz)}}}, ::Nothing, ::NamedTuple{(:u, :v, :w), Tuple{OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}}}, ::NamedTuple{(:b,), Tuple{OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}}}, ::NamedTuple{(:time, :iteration, :stage), Tuple{Float64, Int64, Int64}}, ::Buoyancy{BuoyancyTracer, Oceananigans.Grids.ZDirection})
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/abstract_scalar_diffusivity_closure.jl:89
[10] overdub
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/abstract_scalar_diffusivity_closure.jl:89
[11] viscous_flux_ux(::Int64, ::Int64, ::Int64, ::RectilinearGrid{Float64, Periodic, Bounded, Bounded, Float64, Float64, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, Nothing}, ::Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, ::ScalarDiffusivity{Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, Oceananigans.TurbulenceClosures.ThreeDimensionalFormulation, typeof(νz), NamedTuple{(:b,), Tuple{typeof(νz)}}}, ::Nothing, ::NamedTuple{(:u, :v, :w), Tuple{OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}}}, ::NamedTuple{(:b,), Tuple{OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}}}, ::NamedTuple{(:time, :iteration, :stage), Tuple{Float64, Int64, Int64}}, ::Buoyancy{BuoyancyTracer, Oceananigans.Grids.ZDirection})
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/implicit_explicit_time_discretization.jl:46
[12] overdub
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/implicit_explicit_time_discretization.jl:46
[13] _viscous_flux_ux(::Int64, ::Int64, ::Int64, ::RectilinearGrid{Float64, Periodic, Bounded, Bounded, Float64, Float64, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, Nothing}, ::Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, ::ScalarDiffusivity{Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, Oceananigans.TurbulenceClosures.ThreeDimensionalFormulation, typeof(νz), NamedTuple{(:b,), Tuple{typeof(νz)}}}, ::Nothing, ::NamedTuple{(:u, :v, :w), Tuple{OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}}}, ::NamedTuple{(:b,), Tuple{OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}}}, ::NamedTuple{(:time, :iteration, :stage), Tuple{Float64, Int64, Int64}}, ::Buoyancy{BuoyancyTracer, Oceananigans.Grids.ZDirection})
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/closure_kernel_operators.jl:4
[14] overdub
@ ~/.julia/packages/Oceananigans/DpyWt/src/TurbulenceClosures/closure_kernel_operators.jl:4
[15] Ax_qᶜᶜᶜ(::Int64, ::Int64, ::Int64, ::RectilinearGrid{Float64, Periodic, Bounded, Bounded, Float64, Float64, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}}}, OffsetArrays.OffsetVector{Float64, CUDA.CuDeviceVector{Float64, 1}}, Nothing}, ::typeof(Oceananigans.TurbulenceClosures._viscous_flux_ux), ::Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, ::ScalarDiffusivity{Oceananigans.TurbulenceClosures.ExplicitTimeDiscretization, Oceananigans.TurbulenceClosures.ThreeDimensionalFormulation, typeof(νz), NamedTuple{(:b,), Tuple{typeof(νz)}}}, ::Nothing, ::NamedTuple{(:u, :v, :w), Tuple{OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}, OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}}}, ::NamedTuple{(:b,), Tuple{OffsetArrays.OffsetArray{Float64, 3, CUDA.CuDeviceArray{Float64, 3, 1}}}}, ::NamedTuple{(:time, :iteration, :stage), Tuple{Float64, Int64, Int64}}, ::Buoyancy{BuoyancyTracer, Oceananigans.Grids.ZDirection})
@ ~/.julia/packages/Oceananigans/DpyWt/src/Operators/products_between_fields_and_grid_metrics.jl:12
.
.
.
. Any idea on what is happening or should I try to share the full code with the NC file? |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Hi,
I couldn't find an example from the docs that uses a regular array, converts to
CudaArray
and them use it as an initial condition for a GPU run. Do you guys have any example of that that could share? Maybe would be good to consider putting an example like this on the docs.Beta Was this translation helpful? Give feedback.
All reactions