Enzyme.jl
Enzyme.jl copied to clipboard
Use gc_alloc_obj for tapes containing Julia objects
TODO:
- [ ] We need to emit write_barriers on write of Julia objects to the Julia managed tape
- [ ] Codegen for 1.6/1,7
- [ ] Real runtime test, ideally with a nested tape.
Codecov Report
Merging #400 (e52d1ab) into main (7d3ccda) will decrease coverage by
1.86%. The diff coverage is0.00%.
@@ Coverage Diff @@
## main #400 +/- ##
==========================================
- Coverage 76.96% 75.10% -1.87%
==========================================
Files 17 17
Lines 4138 4182 +44
==========================================
- Hits 3185 3141 -44
- Misses 953 1041 +88
| Impacted Files | Coverage Δ | |
|---|---|---|
| src/compiler.jl | 72.99% <0.00%> (-2.79%) |
:arrow_down: |
| src/api.jl | 55.00% <0.00%> (-3.13%) |
:arrow_down: |
| src/compiler/utils.jl | 90.62% <0.00%> (-1.57%) |
:arrow_down: |
| src/Enzyme.jl | 86.64% <0.00%> (-0.05%) |
:arrow_down: |
| src/compiler/validation.jl | 65.01% <0.00%> (+0.66%) |
:arrow_up: |
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.
Minimal remaining failure:
wmoses@beast:~/git/Enzyme.jl (vc/gc_alloc_obj) $ cat test/threads.jl
using Enzyme
Enzyme.API.printall!(true)
function foo(y)
Threads.@threads for i in 1:3
y[i] *= 2
end
nothing
end
x = [1.0, 2.0, 3.0]
dx = [1.0, 1.0, 1.0]
Enzyme.autodiff(Reverse, foo, Duplicated(x, dx))
@show x
@show dx
wmoses@beast:~/git/Enzyme.jl (vc/gc_alloc_obj) $ cat test/runtests.jl
# HACK: work around Pkg.jl#2500
if VERSION < v"1.8-"
test_project = Base.active_project()
preferences_file = joinpath(dirname(@__DIR__), "LocalPreferences.toml")
test_preferences_file = joinpath(dirname(test_project), "LocalPreferences.toml")
if isfile(preferences_file) && !isfile(test_preferences_file)
cp(preferences_file, test_preferences_file)
end
end
using Enzyme
using Test
using FiniteDifferences
using ForwardDiff
using Statistics
using LinearAlgebra
using Enzyme_jll
@info "Testing against" Enzyme_jll.libEnzyme
import LLVM_jll
using LLVM
# TODO: Add to LLVM_jll
function lit(; adjust_PATH=true, adjust_LIBPATH=true)
lit_path = joinpath(LLVM_jll.artifact_dir, "tools", "lit", "lit.py")
env = LLVM_jll.JLLWrappers.adjust_ENV!(
copy(ENV),
LLVM_jll.PATH[],
LLVM_jll.LIBPATH[],
adjust_PATH,
adjust_LIBPATH,
)
return Cmd(Cmd([lit_path]); env)
end
@testset "Threads" begin
cmd = `$(Base.julia_cmd()) --threads=1 --startup-file=no threads.jl`
@test success(pipeline(cmd, stderr=stderr, stdout=stdout))
end
$ ./julia-1.8.1/bin/julia --project -e "using Pkg; Pkg.test()"
signal (11): Segmentation fault
in expression starting at /home/wmoses/git/Enzyme.jl/test/threads.jl:18
getindex at ./array.jl:924 [inlined]
show_delim_array at ./show.jl:1211
show_delim_array at ./show.jl:1201 [inlined]
show_vector at ./arrayshow.jl:528
show_vector at ./arrayshow.jl:513 [inlined]
show at ./arrayshow.jl:484
unknown function (ip: 0x7f7af0761296)
_jl_invoke at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2549
#sprint#452 at ./strings/io.jl:114
sprint##kw at ./strings/io.jl:107 [inlined]
#repr#455 at ./strings/io.jl:282 [inlined]
repr at ./strings/io.jl:282
unknown function (ip: 0x7f7af075feb2)
_jl_invoke at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2549
jl_apply at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/julia.h:1838 [inlined]
do_call at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/interpreter.c:126
eval_value at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/interpreter.c:215
eval_stmt_value at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/interpreter.c:166 [inlined]
eval_body at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/interpreter.c:612
jl_interpret_toplevel_thunk at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/interpreter.c:750
jl_toplevel_eval_flex at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/toplevel.c:906
jl_toplevel_eval_flex at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/toplevel.c:850
ijl_toplevel_eval_in at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/toplevel.c:965
eval at ./boot.jl:368 [inlined]
include_string at ./loading.jl:1428
_jl_invoke at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2549
_include at ./loading.jl:1488
include at ./Base.jl:419
jfptr_include_32221.clone_1 at /home/wmoses/git/Enzyme.jl/julia-1.8.1/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2549
exec_options at ./client.jl:303
_start at ./client.jl:522
jfptr__start_61720.clone_1 at /home/wmoses/git/Enzyme.jl/julia-1.8.1/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2549
jl_apply at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/julia.h:1838 [inlined]
true_main at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/jlapi.c:575
jl_repl_entrypoint at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/jlapi.c:719
main at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/cli/loader_exe.c:59
unknown function (ip: 0x7f7d23482d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x401098)
Allocations: 34679443 (Pool: 34630854; Big: 48589); GC: 37
┌ Info: Testing against
└ Enzyme_jll.libEnzyme = "/home/wmoses/.julia/scratchspaces/7cc45869-7501-5eee-bdea-0790c847d4ef/build/Enzyme/libEnzyme-13.so"