OrdinaryDiffEq.jl icon indicating copy to clipboard operation
OrdinaryDiffEq.jl copied to clipboard

[m1 apple aarch darwin] `solve` segfault in `ode_determine_initdt`

Open anandijain opened this issue 2 years ago • 6 comments

Fairly certain it is unrelated to #1402. This is almost definitely a julia bug, but opening one here so that its known. I'll also open a real issue in julia

Copy pasting http://diffeqoperators.sciml.ai/dev/symbolic_tutorials/mol_heat/#Adding-parameters into

julia> versioninfo()
Julia Version 1.7.0-rc1
Commit 9eade6195e (2021-09-12 06:45 UTC)
Platform Info:
  OS: macOS (arm64-apple-darwin20.5.0)
  CPU: Apple M1
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-12.0.1 (ORCJIT, cyclone)
Environment:
  JULIA_NUM_THREADS = 4
  JULIA_EDITOR = code

(MTK) pkg> st
     Project MTK v0.1.0
      Status `~/.julia/dev/MTK/Project.toml`
  [479239e8] Catalyst v9.0.0
  [82cc6244] DataInterpolations v3.6.0
  [9fdde737] DiffEqOperators v4.32.0
  [0c46a032] DifferentialEquations v6.19.0
  [5b8099bc] DomainSets v0.5.6
  [961ee093] ModelingToolkit v6.4.9
  [1dea7af3] OrdinaryDiffEq v5.64.0
  [91a5bcdd] Plots v1.22.0
  [0c5d862f] Symbolics v3.2.3
  [1986cc42] Unitful v1.9.0

julia> sol = solve(prob,Tsit5())

signal (11): Segmentation fault: 11
in expression starting at REPL[16]:1
ndigits0zpb at ./intfuncs.jl:0
ndigits0z at ./intfuncs.jl:605
< at ./rational.jl:408
ode_determine_initdt at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/initdt.jl:120
auto_dt_reset! at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/integrators/integrator_interface.jl:329 [inlined]
handle_dt! at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/solve.jl:504
#__init#476 at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/solve.jl:466
__init at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/solve.jl:67
__init at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/solve.jl:67 [inlined]
__init at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/solve.jl:67 [inlined]
__init at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/solve.jl:67 [inlined]
__init at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/solve.jl:67 [inlined]
#__solve#475 at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/solve.jl:4 [inlined]
__solve at /Users/anand/.julia/packages/OrdinaryDiffEq/8K0Aj/src/solve.jl:4 [inlined]
#solve_call#42 at /Users/anand/.julia/packages/DiffEqBase/OPDgm/src/solve.jl:61 [inlined]
solve_call at /Users/anand/.julia/packages/DiffEqBase/OPDgm/src/solve.jl:48 [inlined]
#solve_up#44 at /Users/anand/.julia/packages/DiffEqBase/OPDgm/src/solve.jl:87 [inlined]
solve_up at /Users/anand/.julia/packages/DiffEqBase/OPDgm/src/solve.jl:78 [inlined]
#solve#43 at /Users/anand/.julia/packages/DiffEqBase/OPDgm/src/solve.jl:73 [inlined]
solve at /Users/anand/.julia/packages/DiffEqBase/OPDgm/src/solve.jl:68
unknown function (ip: 0x10f4167ab)
jl_apply_generic at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
do_call at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
eval_body at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
jl_interpret_toplevel_thunk at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
jl_toplevel_eval_flex at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
jl_toplevel_eval_flex at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
jl_toplevel_eval_flex at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
jl_toplevel_eval_in at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
eval at ./boot.jl:373 [inlined]
eval_user_input at /Users/sabae/src/julia/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:150
repl_backend_loop at /Users/sabae/src/julia/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:244
start_repl_backend at /Users/sabae/src/julia/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:229
#run_repl#47 at /Users/sabae/src/julia/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:362
run_repl at /Users/sabae/src/julia/usr/share/julia/stdlib/v1.7/REPL/src/REPL.jl:349
jl_apply_generic at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
#929 at ./client.jl:394
jfptr_YY.929_33876 at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line)
jl_apply_generic at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
jl_f__call_latest at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
#invokelatest#2 at ./essentials.jl:716 [inlined]
invokelatest at ./essentials.jl:714 [inlined]
run_main_repl at ./client.jl:379
exec_options at ./client.jl:309
_start at ./client.jl:495
jfptr__start_33611 at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/sys.dylib (unknown line)
jl_apply_generic at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
true_main at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
jl_repl_entrypoint at /Applications/Julia-1.7.app/Contents/Resources/julia/lib/julia/libjulia-internal.1.7.dylib (unknown line)
Allocations: 207032348 (Pool: 206988583; Big: 43765); GC: 123

dt₀ = OrdinaryDiffEq.ArrayInterface.IfElse.ifelse((d₀ < 1//10^(5)) | (d₁ < 1//10^(5)), smalldt, convert(_tType,oneunit_tType*(d₀/d₁)/100)) looks like the line thats causing issues. The simpler examples, like README, didn't hit this line and don't cause the crash.

anandijain avatar Sep 17 '21 18:09 anandijain

just confirmed that

julia> versioninfo()
Julia Version 1.7.0-rc1
Commit 9eade6195e (2021-09-12 06:45 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Xeon(R) Silver 4114 CPU @ 2.20GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-12.0.1 (ORCJIT, skylake-avx512)
Environment:
  JULIA_NUM_THREADS = 8

does not hit the same issue

anandijain avatar Sep 17 '21 18:09 anandijain

@anandijain my student and I (M1 Macs) also get a seg fault. the Pluto notebook to reproduce the seg fault is linked in my issue: https://github.com/SciML/OrdinaryDiffEq.jl/issues/1580

SimonEnsemble avatar Jan 21 '22 23:01 SimonEnsemble

Please report this to https://github.com/JuliaLang/julia. https://github.com/JuliaLang/julia/blob/f835c24c737cb1d71df20f9bc63637ded8dcb669/base/intfuncs.jl#L557 segfaulting on M1 is not something we can fix from the ODE solver and has to get fixed in Julia itself.

ChrisRackauckas avatar Jan 22 '22 00:01 ChrisRackauckas

if you have them build on master, darwin should no longer error with this, but other aarch i think will

anandijain avatar Jan 22 '22 00:01 anandijain

I mentioned in the other issue that it's < on Rational, so you'd have to play with it to get an MWE. I can't test since I don't have an M1 though.

ChrisRackauckas avatar Jan 22 '22 00:01 ChrisRackauckas

@anandijain you are right! I just built Juila from master, for the first time ever, and now the seg fault does not occur. 👍 looks like we will need to wait for Julia 1.8 😦 . I hope they release it soon. [Keno made patch, mentioned in thread below.]

https://github.com/JuliaLang/julia/issues/42295

SimonEnsemble avatar Jan 22 '22 01:01 SimonEnsemble