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

Use gc_alloc_obj for tapes containing Julia objects

Open vchuravy opened this issue 3 years ago • 1 comments

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.

vchuravy avatar Aug 04 '22 21:08 vchuravy

Codecov Report

Merging #400 (e52d1ab) into main (7d3ccda) will decrease coverage by 1.86%. The diff coverage is 0.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.

codecov-commenter avatar Aug 04 '22 21:08 codecov-commenter

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"

wsmoses avatar Sep 26 '22 05:09 wsmoses