Segfaults when using Adapt for custom struct with Int as parametric type
- Dominant language
- Julia
- Stars
- 463
- Forks
- 68
- Avg merge
- 1d 19m
- Merged PRs (30d)
- 32
Description
I'm following the guide in Adapt.jl to use a custom struct as a kernel argument. I modified the example slightly to fit my use case where one of the struct's parametric types is an `Int` (I use it to dispatch on the "dimension" of the problem)
With that simple change I'm seeing consistent segfaults. Here's a MWE:
```julia
using Metal
import Adapt
julia> struct Interpolate{A, D} # D is a stand-in for Val(2)
xs::A
ys::A
end
julia> function (itp::Interpolate)(x)
i = searchsortedfirst(itp.xs, x)
i = clamp(i, firstindex(itp.ys), lastindex(itp.ys))
itp.ys[i]
end
julia> xs_cpu = [1.f0, 2.f0, 3.f0]
3-element Vector{Float32}:
1.0
2.0
3.0
julia> ys_cpu = [10.f0,20.f0,30.f0]
3-element Vector{Float32}:
10.0
20.0
30.0
julia> itp_cpu = Interpolate{typeof(xs_cpu), 2}(xs_cpu, ys_cpu) # Note the 2 here
Interpolate{Vector{Float32}, 2}(Float32[1.0, 2.0, 3.0], Float32[10.0, 20.0, 30.0])
julia> pts_cpu = [1.f1,2.f3]
2-element Vector{Float32}:
10.0
2000.0
julia> result_cpu = itp_cpu.(pts_cpu)
2-element Vector{Float32}:
30.0
30.0
julia> itp = Interpolate{typeof(mtl(xs_cpu)), 2}(mtl(xs_cpu), mtl(ys_cpu))
Interpolate{MtlVector{Float32, Metal.PrivateStorage}, 2}(Float32[1.0, 2.0, 3.0], Float32[10.0, 20.0, 30.0])
julia> pts = mtl(pts_cpu)
2-element MtlVector{Float32, Metal.PrivateStorage}:
10.0
2000.0
julia> function Adapt.adapt_structure(to, itp::Interpolate{A,D}) where {A,D}
xs = Adapt.adapt_structure(to, itp.xs)
ys = Adapt.adapt_structure(to, itp.ys)
Interpolate{A,D}(xs, ys)
end
```
The segfault occurs when the function is called:
```
julia> itp.(pts)
[3494] signal 10 (1): Bus error: 10
in expression starting at REPL[24]:1
macro expansion at /Users/alonsoc1s/.julia/packages/LLVM/UFrs4/src/interop/base.jl:39 [inlined]
macro expansion at ./none:0 [inlined]
pointerref at ./none:0 [inlined]
unsafe_load at /Users/alonsoc1s/.julia/packages/LLVM/UFrs4/src/interop/pointer.jl:85 [inlined]
arrayref at /Users/alonsoc1s/.julia/packages/Metal/Pwc41/src/device/array.jl:82 [inlined]
getindex at /Users/alonsoc1s/.julia/packages/Metal/Pwc41/src/device/array.jl:103 [inlined]
copyto_unaliased! at ./abstractarray.jl:1081 [inlined]
copyto! at ./abstractarray.jl:1061 [inlined]
copyto_axcheck! at ./abstractarray.jl:1167
Array at ./array.jl:626 [inlined]
Array at ./boot.jl:606 [inlined]
convert at ./array.jl:618 [inlined]
MtlArray at /Users/alonsoc1s/.julia/packages/Metal/Pwc41/src/array.jl:295 [inlined]
convert at /Users/alonsoc1s/.julia/packages/GPUArrays/u6tui/src/host/construction.jl:4 [inlined]
Interpolate at ./REPL[5]:2
adapt_structure at ./REPL[23]:4 [inlined]
adapt at /Users/alonsoc1s/.julia/packages/Adapt/2UZ81/src/Adapt.jl:40 [inlined]
adapt_structure at /Users/alonsoc1s/.julia/packages/Adapt/2UZ81/src/base.jl:62 [inlined]
adapt at /Users/alonsoc1s/.julia/packages/Adapt/2UZ81/src/Adapt.jl:40 [inlined]
mtlconvert at /Users/alonsoc1s/.julia/packages/Metal/Pwc41/src/compiler/execution.jl:156 [inlined]
mtlconvert at /Users/alonsoc1s/.julia/packages/Metal/Pwc41/src/compiler/execution.jl:156 [inlined]
map at ./tuple.jl:356 [inlined]
macro expansion at /Users/alonsoc1s/.julia/packages/Metal/Pwc41/src/compiler/execution.jl:83 [inlined]
_copyto! at /Users/alonsoc1s/.julia/packages/Metal/Pwc41/src/broadcast.jl:104 [inlined]
copyto! at /Users/alonsoc1s/.julia/packages/Metal/Pwc41/src/broadcast.jl:52 [inlined]
copy at /Users/alonsoc1s/.julia/packages/GPUArrays/u6tui/src/host/broadcast.jl:29 [inlined]
materialize at ./broadcast.jl:872
unknown function (ip: 0x34d548ba3)
jl_apply at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/./julia.h:2157 [inlined]
do_call at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/interpreter.c:126
eval_stmt_value at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/interpreter.c:174
eval_body at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/interpreter.c:666
jl_interpret_toplevel_thunk at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/interpreter.c:824
jl_toplevel_eval_flex at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/toplevel.c:943
jl_toplevel_eval_flex at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/toplevel.c:886
jl_toplevel_eval_flex at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/toplevel.c:886
jl_toplevel_eval_flex at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/toplevel.c:886
eval_body at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/interpreter.c:628
eval_body at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/interpreter.c:539
jl_interpret_toplevel_thunk at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/interpreter.c:824
jl_toplevel_eval_flex at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/toplevel.c:943
ijl_toplevel_eval at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/toplevel.c:952 [inlined]
ijl_toplevel_eval_in at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/toplevel.c:994
eval at ./boot.jl:430 [inlined]
eval_user_input at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:261
repl_backend_loop at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:368
#start_repl_backend#59 at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:343
start_repl_backend at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:340
#run_repl#76 at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:500
run_repl at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/REPL/src/REPL.jl:486
jfptr_run_repl_10112.1 at /Users/alonsoc1s/.julia/juliaup/julia-1.11.5+0.aarch64.apple.darwin14/share/julia/compiled/v1.11/REPL/u0gqU_RnzCd.dylib (unknown line)
#1150 at ./client.jl:446
jfptr_YY.1150_14703.1 at /Users/alonsoc1s/.julia/juliaup/julia-1.11.5+0.aarch64.apple.darwin14/share/julia/compiled/v1.11/REPL/u0gqU_RnzCd.dylib (unknown line)
jl_apply at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/./julia.h:2157 [inlined]
jl_f__call_latest at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/builtins.c:875
#invokelatest#2 at ./essentials.jl:1055 [inlined]
invokelatest at ./essentials.jl:1052 [inlined]
run_main_repl at ./client.jl:430
repl_main at ./client.jl:567 [inlined]
_start at ./client.jl:541
jfptr__start_73721.1 at /Users/alonsoc1s/.julia/juliaup/julia-1.11.5+0.aarch64.apple.darwin14/lib/julia/sys.dylib (unknown line)
jl_apply at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/./julia.h:2157 [inlined]
true_main at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/jlapi.c:900
jl_repl_entrypoint at /Users/julia/.julia/scratchspaces/a66863c6-20e8-4ff4-8a62-49f30b1f605e/agent-cache/default-honeycrisp-HL2F7YQ3XH.0/build/default-honeycrisp-HL2F7YQ3XH-0/julialang/julia-release-1-dot-11/src/jlapi.c:1059
Allocations: 87638048 (Pool: 87626861; Big: 11187); GC: 141
[1] 3494 bus error julia --project
```
This is my versioninfo:
```julia> Metal.versioninfo()
macOS 15.7.1, Darwin 24.6.0
Toolchain:
- Julia: 1.11.5
- LLVM: 16.0.6
Julia packages:
- Metal.jl: 1.6.4
- GPUArrays: 11.2.3
- GPUCompiler: 1.6.1
- KernelAbstractions: 0.9.38
- ObjectiveC: 3.4.2
- LLVM: 9.4.2
- LLVMDowngrader_jll: 0.6.0+1
1 device:
- Apple M2 (64.000 KiB allocated)
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.