-
Notifications
You must be signed in to change notification settings - Fork 62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add reverse rule for Sparse dense matmul/vec #1792
Conversation
To be explicit about the error I get when trying BatchDuplicated I get with this PR C = zeros(18)
M = sprand(18, 9, 0.1)
v = randn(9)
α = 2.0
β = 1.0
dC = ntuple(_->zero(C), 2)
dv = ntuple(_->zero(v), 2)
test_rrule(mul!, BatchDuplicated, (C, BatchDuplicated), (M, Const), (v, BatchDuplicated), (α, Active), (β, Active))
julia: /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/local/include/llvm/IR/Type.h:388: llvm::Type* llvm::Type::getNonOpaquePointerElementType() const: Assertion `getTypeID() == PointerTyID' failed.
[11240] signal (6.-6): Aborted
in expression starting at REPL[11]:1
pthread_kill at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
raise at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
abort at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x7cd1a042871a)
__assert_fail at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
getNonOpaquePointerElementType at /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/local/include/llvm/IR/Type.h:388 [inlined]
getPointerElementType at /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/local/include/llvm/IR/Type.h:381 [inlined]
addToInvertedPtrDiffe at /workspace/srcdir/Enzyme/enzyme/Enzyme/DiffeGradientUtils.cpp:838
addToInvertedPtrDiffe at /workspace/srcdir/Enzyme/enzyme/Enzyme/DiffeGradientUtils.cpp:1249
EnzymeGradientUtilsAddToInvertedPointerDiffeTT at /workspace/srcdir/Enzyme/enzyme/Enzyme/CApi.cpp:496
EnzymeGradientUtilsAddToInvertedPointerDiffeTT at /home/ptiede/.julia/dev/Enzyme/src/api.jl:262
unknown function (ip: 0x7cd1863d2fbc)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
enzyme_custom_common_rev at /home/ptiede/.julia/dev/Enzyme/src/rules/customrules.jl:1074 [inlined]
enzyme_custom_rev at /home/ptiede/.julia/dev/Enzyme/src/rules/customrules.jl:1130
unknown function (ip: 0x7cd1863cd695)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
enzyme_custom_rev_cfunc at /home/ptiede/.julia/dev/Enzyme/src/rules/llvmrules.jl:27
jfptr_enzyme_custom_rev_cfunc_6731 at /home/ptiede/.julia/compiled/v1.10/Enzyme/G1p5n_Iyla2.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jlcapi_enzyme_custom_rev_cfunc_9200 at /home/ptiede/.julia/compiled/v1.10/Enzyme/G1p5n_Iyla2.so (unknown line)
operator() at /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/10.2.0/bits/std_function.h:622 [inlined]
visitCallInst at /workspace/srcdir/Enzyme/enzyme/Enzyme/AdjointGenerator.h:6276
visit at /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/local/include/llvm/IR/InstVisitor.h:111 [inlined]
CreatePrimalAndGradient at /workspace/srcdir/Enzyme/enzyme/Enzyme/EnzymeLogic.cpp:4396
EnzymeCreatePrimalAndGradient at /workspace/srcdir/Enzyme/enzyme/Enzyme/CApi.cpp:626
EnzymeCreatePrimalAndGradient at /home/ptiede/.julia/dev/Enzyme/src/api.jl:163
unknown function (ip: 0x7cd1863bf95b)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
enzyme! at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:4157
unknown function (ip: 0x7cd186f600f8)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
#codegen#18999 at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:6438
codegen at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:5614 [inlined]
_thunk at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:7241
_thunk at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:7241 [inlined]
cached_compilation at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:7282 [inlined]
thunkbase at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:7355
unknown function (ip: 0x7cd186efa8c0)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
#s2080#19052 at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:7407 [inlined]
#s2080#19052 at ./none:0
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
GeneratedFunctionStub at ./boot.jl:602
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_call_staged at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/method.c:540
ijl_code_for_staged at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/method.c:593
get_staged at ./compiler/utilities.jl:123
retrieve_code_info at ./compiler/utilities.jl:135 [inlined]
InferenceState at ./compiler/inferencestate.jl:430
typeinf_edge at ./compiler/typeinfer.jl:920
abstract_call_method at ./compiler/abstractinterpretation.jl:629
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:95
abstract_call_known at ./compiler/abstractinterpretation.jl:2087
abstract_call at ./compiler/abstractinterpretation.jl:2169
abstract_call at ./compiler/abstractinterpretation.jl:2162
abstract_call at ./compiler/abstractinterpretation.jl:2354
abstract_eval_call at ./compiler/abstractinterpretation.jl:2370
abstract_eval_statement_expr at ./compiler/abstractinterpretation.jl:2380
abstract_eval_statement at ./compiler/abstractinterpretation.jl:2624
abstract_eval_basic_statement at ./compiler/abstractinterpretation.jl:2913
typeinf_local at ./compiler/abstractinterpretation.jl:3098
typeinf_nocycle at ./compiler/abstractinterpretation.jl:3186
_typeinf at ./compiler/typeinfer.jl:247
typeinf at ./compiler/typeinfer.jl:216
typeinf_ext at ./compiler/typeinfer.jl:1051
typeinf_ext_toplevel at ./compiler/typeinfer.jl:1082
typeinf_ext_toplevel at ./compiler/typeinfer.jl:1078
jfptr_typeinf_ext_toplevel_35703.1 at /home/ptiede/.julia/juliaup/julia-1.10.5+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
jl_type_infer at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:394
jl_generate_fptr_impl at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/jitlayers.cpp:504
jl_compile_method_internal at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2481 [inlined]
jl_compile_method_internal at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2368
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2887 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
do_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/builtins.c:768
macro expansion at /home/ptiede/.julia/packages/EnzymeTestUtils/5JRuz/src/test_reverse.jl:111 [inlined]
macro expansion at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/Test/src/Test.jl:1577 [inlined]
#test_reverse#54 at /home/ptiede/.julia/packages/EnzymeTestUtils/5JRuz/src/test_reverse.jl:91
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
do_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/builtins.c:768
test_reverse at /home/ptiede/.julia/packages/EnzymeTestUtils/5JRuz/src/test_reverse.jl:74
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
do_call at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/interpreter.c:126
eval_value at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/interpreter.c:223
eval_stmt_value at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/interpreter.c:174 [inlined]
eval_body at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/interpreter.c:617
jl_interpret_toplevel_thunk at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/interpreter.c:775
jl_toplevel_eval_flex at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/toplevel.c:934
jl_toplevel_eval_flex at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/toplevel.c:877
jl_toplevel_eval_flex at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/toplevel.c:877
jl_toplevel_eval_flex at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/toplevel.c:877
ijl_toplevel_eval_in at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/toplevel.c:985
eval at ./boot.jl:385 [inlined]
eval_user_input at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:150
repl_backend_loop at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:246
#start_repl_backend#46 at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:231
start_repl_backend at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:228
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
#run_repl#59 at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:389
run_repl at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:375
jfptr_run_repl_91805.1 at /home/ptiede/.julia/juliaup/julia-1.10.5+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
#1013 at ./client.jl:432
jfptr_YY.1013_82772.1 at /home/ptiede/.julia/juliaup/julia-1.10.5+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
jl_f__call_latest at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/builtins.c:812
#invokelatest#2 at ./essentials.jl:892 [inlined]
invokelatest at ./essentials.jl:889 [inlined]
run_main_repl at ./client.jl:416
exec_options at ./client.jl:333
_start at ./client.jl:552
jfptr__start_82798.1 at /home/ptiede/.julia/juliaup/julia-1.10.5+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
true_main at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/jlapi.c:582
jl_repl_entrypoint at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/jlapi.c:731
main at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/cli/loader_exe.c:58
unknown function (ip: 0x7cd1a0429d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 69317087 (Pool: 69189011; Big: 128076); GC: 66
[1] 11240 IOT instruction (core dumped) julia I get an identical error with the same setup if I do C = zeros(18)
M = sprand(18, 9, 0.1)
v = randn(9)
α = 2.0
β = 1.0
dC = ntuple(_->zero(C), 2)
dv = ntuple(_->zero(v), 2)
autodiff(Reverse, mul!, Const, BatchDuplicated(C, dC), Const(M), BatchDuplicated(v, dv), Active(α), Active(β))
julia: /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/local/include/llvm/IR/Type.h:388: llvm::Type* llvm::Type::getNonOpaquePointerElementType() const: Assertion `getTypeID() == PointerTyID' failed.
[8235] signal (6.-6): Aborted
in expression starting at REPL[22]:1
pthread_kill at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
raise at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
abort at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x70a8e4e2871a)
__assert_fail at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
getNonOpaquePointerElementType at /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/local/include/llvm/IR/Type.h:388 [inlined]
getPointerElementType at /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/local/include/llvm/IR/Type.h:381 [inlined]
addToInvertedPtrDiffe at /workspace/srcdir/Enzyme/enzyme/Enzyme/DiffeGradientUtils.cpp:838
addToInvertedPtrDiffe at /workspace/srcdir/Enzyme/enzyme/Enzyme/DiffeGradientUtils.cpp:1249
EnzymeGradientUtilsAddToInvertedPointerDiffeTT at /workspace/srcdir/Enzyme/enzyme/Enzyme/CApi.cpp:496
EnzymeGradientUtilsAddToInvertedPointerDiffeTT at /home/ptiede/.julia/dev/Enzyme/src/api.jl:262
unknown function (ip: 0x70a8ca96f00c)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
enzyme_custom_common_rev at /home/ptiede/.julia/dev/Enzyme/src/rules/customrules.jl:1074 [inlined]
enzyme_custom_rev at /home/ptiede/.julia/dev/Enzyme/src/rules/customrules.jl:1130
unknown function (ip: 0x70a8ca968255)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
enzyme_custom_rev_cfunc at /home/ptiede/.julia/dev/Enzyme/src/rules/llvmrules.jl:27
jfptr_enzyme_custom_rev_cfunc_6731 at /home/ptiede/.julia/compiled/v1.10/Enzyme/G1p5n_Iyla2.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jlcapi_enzyme_custom_rev_cfunc_9200 at /home/ptiede/.julia/compiled/v1.10/Enzyme/G1p5n_Iyla2.so (unknown line)
operator() at /opt/x86_64-linux-gnu/x86_64-linux-gnu/include/c++/10.2.0/bits/std_function.h:622 [inlined]
visitCallInst at /workspace/srcdir/Enzyme/enzyme/Enzyme/AdjointGenerator.h:6276
visit at /opt/x86_64-linux-gnu/x86_64-linux-gnu/sys-root/usr/local/include/llvm/IR/InstVisitor.h:111 [inlined]
CreatePrimalAndGradient at /workspace/srcdir/Enzyme/enzyme/Enzyme/EnzymeLogic.cpp:4396
EnzymeCreatePrimalAndGradient at /workspace/srcdir/Enzyme/enzyme/Enzyme/CApi.cpp:626
EnzymeCreatePrimalAndGradient at /home/ptiede/.julia/dev/Enzyme/src/api.jl:163
unknown function (ip: 0x70a8cad6b44b)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
enzyme! at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:4168
unknown function (ip: 0x70a8cad69b38)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
#codegen#18999 at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:6438
codegen at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:5614 [inlined]
_thunk at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:7241
_thunk at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:7241 [inlined]
cached_compilation at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:7282 [inlined]
thunkbase at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:7355
unknown function (ip: 0x70a8cad2c690)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
#s2080#19052 at /home/ptiede/.julia/dev/Enzyme/src/compiler.jl:7407 [inlined]
#s2080#19052 at ./none:0
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
GeneratedFunctionStub at ./boot.jl:602
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_call_staged at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/method.c:540
ijl_code_for_staged at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/method.c:593
get_staged at ./compiler/utilities.jl:123
retrieve_code_info at ./compiler/utilities.jl:135 [inlined]
InferenceState at ./compiler/inferencestate.jl:430
typeinf_edge at ./compiler/typeinfer.jl:920
abstract_call_method at ./compiler/abstractinterpretation.jl:629
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:95
abstract_call_known at ./compiler/abstractinterpretation.jl:2087
abstract_call at ./compiler/abstractinterpretation.jl:2169
abstract_call at ./compiler/abstractinterpretation.jl:2162
abstract_call at ./compiler/abstractinterpretation.jl:2354
abstract_eval_call at ./compiler/abstractinterpretation.jl:2370
abstract_eval_statement_expr at ./compiler/abstractinterpretation.jl:2380
abstract_eval_statement at ./compiler/abstractinterpretation.jl:2624
abstract_eval_basic_statement at ./compiler/abstractinterpretation.jl:2889
typeinf_local at ./compiler/abstractinterpretation.jl:3098
typeinf_nocycle at ./compiler/abstractinterpretation.jl:3186
_typeinf at ./compiler/typeinfer.jl:247
typeinf at ./compiler/typeinfer.jl:216
typeinf_edge at ./compiler/typeinfer.jl:930
abstract_call_method at ./compiler/abstractinterpretation.jl:629
abstract_call_gf_by_type at ./compiler/abstractinterpretation.jl:95
abstract_call_known at ./compiler/abstractinterpretation.jl:2087
abstract_call at ./compiler/abstractinterpretation.jl:2169
abstract_apply at ./compiler/abstractinterpretation.jl:1612
abstract_call_known at ./compiler/abstractinterpretation.jl:2004
abstract_call at ./compiler/abstractinterpretation.jl:2169
abstract_call at ./compiler/abstractinterpretation.jl:2162
abstract_call at ./compiler/abstractinterpretation.jl:2354
abstract_eval_call at ./compiler/abstractinterpretation.jl:2370
abstract_eval_statement_expr at ./compiler/abstractinterpretation.jl:2380
abstract_eval_statement at ./compiler/abstractinterpretation.jl:2624
abstract_eval_basic_statement at ./compiler/abstractinterpretation.jl:2913
typeinf_local at ./compiler/abstractinterpretation.jl:3098
typeinf_nocycle at ./compiler/abstractinterpretation.jl:3186
_typeinf at ./compiler/typeinfer.jl:247
typeinf at ./compiler/typeinfer.jl:216
typeinf_ext at ./compiler/typeinfer.jl:1051
typeinf_ext_toplevel at ./compiler/typeinfer.jl:1082
typeinf_ext_toplevel at ./compiler/typeinfer.jl:1078
jfptr_typeinf_ext_toplevel_35703.1 at /home/ptiede/.julia/juliaup/julia-1.10.5+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
jl_type_infer at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:394
jl_generate_fptr_impl at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/jitlayers.cpp:504
jl_compile_method_internal at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2481 [inlined]
jl_compile_method_internal at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2368
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2887 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
do_call at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/interpreter.c:126
eval_value at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/interpreter.c:223
eval_stmt_value at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/interpreter.c:174 [inlined]
eval_body at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/interpreter.c:617
jl_interpret_toplevel_thunk at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/interpreter.c:775
jl_toplevel_eval_flex at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/toplevel.c:934
jl_toplevel_eval_flex at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/toplevel.c:877
jl_toplevel_eval_flex at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/toplevel.c:877
jl_toplevel_eval_flex at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/toplevel.c:877
ijl_toplevel_eval_in at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/toplevel.c:985
eval at ./boot.jl:385 [inlined]
eval_user_input at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:150
repl_backend_loop at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:246
#start_repl_backend#46 at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:231
start_repl_backend at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:228
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
#run_repl#59 at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:389
run_repl at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/usr/share/julia/stdlib/v1.10/REPL/src/REPL.jl:375
jfptr_run_repl_91805.1 at /home/ptiede/.julia/juliaup/julia-1.10.5+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
#1013 at ./client.jl:432
jfptr_YY.1013_82772.1 at /home/ptiede/.julia/juliaup/julia-1.10.5+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
jl_f__call_latest at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/builtins.c:812
#invokelatest#2 at ./essentials.jl:892 [inlined]
invokelatest at ./essentials.jl:889 [inlined]
run_main_repl at ./client.jl:416
exec_options at ./client.jl:333
_start at ./client.jl:552
jfptr__start_82798.1 at /home/ptiede/.julia/juliaup/julia-1.10.5+0.x64.linux.gnu/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:2895 [inlined]
ijl_apply_generic at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/gf.c:3077
jl_apply at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/julia.h:1982 [inlined]
true_main at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/jlapi.c:582
jl_repl_entrypoint at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/src/jlapi.c:731
main at /cache/build/builder-amdci4-4/julialang/julia-release-1-dot-10/cli/loader_exe.c:58
unknown function (ip: 0x70a8e4e29d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x4010b8)
Allocations: 54270147 (Pool: 54155337; Big: 114810); GC: 51
[1] 8235 IOT instruction (core dumped) julia |
Ok I just corrected test_reverse(mul!, BatchDuplicated, (C, BatchDuplicated), (M, Const), (v, BatchDuplicated), (α, Active), (β, Active))
test_reverse: mul! with return activity BatchDuplicated on (::Vector{Float64}, BatchDuplicated), (::SparseMatrixCSC{Float64, Int64}, Const), (::Vector{Float64}, BatchDuplicated), (::Float64, Active), (::Float64, Active): Error During Test at /home/ptiede/.julia/packages/EnzymeTestUtils/5JRuz/src/test_reverse.jl:89
Got exception outside of a @test
Enzyme execution failed.
Enzyme: Reverse pass custom rule Tuple{EnzymeCore.EnzymeRules.ConfigWidth{2, false, true, (false, false, false, false, false, false)}, Const{typeof(mul!)}, Type{BatchDuplicatedNoNeed{Vector{Float64}, 2}}, Tuple{Vector{Float64}, Nothing, Vector{Float64}}, BatchDuplicated{Vector{Float64}, 2}, Const{SparseMatrixCSC{Float64, Int64}}, BatchDuplicated{Vector{Float64}, 2}, Active{Float64}, Active{Float64}} return type mismatch, expected Tuple{Nothing, Nothing, Nothing, Float64, Float64} found Tuple{Nothing, Nothing, Nothing, Tuple{Float64, Float64}, Tuple{Float64, Float64}}
Stacktrace:
[1] call_with_kwargs
@ ~/.julia/packages/EnzymeTestUtils/5JRuz/src/test_reverse.jl:14 [inlined]
[2] call_with_kwargs
@ ~/.julia/packages/EnzymeTestUtils/5JRuz/src/test_reverse.jl:0 [inlined]
[3] diffe2julia_call_with_kwargs_9896_inner_1wrap
@ ~/.julia/packages/EnzymeTestUtils/5JRuz/src/test_reverse.jl:0
[4] macro expansion
@ ~/.julia/dev/Enzyme/src/compiler.jl:7187 [inlined]
[5] enzyme_call(::Val{false}, ::Ptr{Nothing}, ::Type{Enzyme.Compiler.AdjointThunk{Ptr{Nothing}, Const{typeof(EnzymeTestUtils.call_with_kwargs)}, BatchDuplicated{Vector{Float64}}, Tuple{Const{@NamedTuple{}}, Const{typeof(mul!)}, BatchDuplicated{Vector{Float64}, 2}, Const{SparseMatrixCSC{Float64, Int64}}, BatchDuplicated{Vector{Float64}, 2}, Active{Float64}, Active{Float64}}, 2, Tuple{@NamedTuple{1, 2}, @NamedTuple{1, 2}}}}, ::Val{2}, ::Val{false}, ::Type{Tuple{Const{@NamedTuple{}}, Const{typeof(mul!)}, BatchDuplicated{Vector{Float64}, 2}, Const{SparseMatrixCSC{Float64, Int64}}, BatchDuplicated{Vector{Float64}, 2}, Active{Float64}, Active{Float64}}}, ::Type{BatchDuplicated{Vector{Float64}}}, ::Const{typeof(EnzymeTestUtils.call_with_kwargs)}, ::Type{Tuple{@NamedTuple{1, 2}, @NamedTuple{1, 2}}}, ::Const{@NamedTuple{}}, ::Const{typeof(mul!)}, ::BatchDuplicated{Vector{Float64}, 2}, ::Const{SparseMatrixCSC{Float64, Int64}}, ::BatchDuplicated{Vector{Float64}, 2}, ::Active{Float64}, ::Active{Float64}, ::Tuple{@NamedTuple{1, 2}, @NamedTuple{1, 2}})
@ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:6794
[6] (::Enzyme.Compiler.AdjointThunk{Ptr{Nothing}, Const{typeof(EnzymeTestUtils.call_with_kwargs)}, BatchDuplicated{Vector{Float64}}, Tuple{Const{@NamedTuple{}}, Const{typeof(mul!)}, BatchDuplicated{Vector{Float64}, 2}, Const{SparseMatrixCSC{Float64, Int64}}, BatchDuplicated{Vector{Float64}, 2}, Active{Float64}, Active{Float64}}, 2, Tuple{@NamedTuple{1, 2}, @NamedTuple{1, 2}}})(::Const{typeof(EnzymeTestUtils.call_with_kwargs)}, ::Const{@NamedTuple{}}, ::Vararg{Any})
@ Enzyme.Compiler ~/.julia/dev/Enzyme/src/compiler.jl:6677
[7] macro expansion
@ ~/.julia/packages/EnzymeTestUtils/5JRuz/src/test_reverse.jl:147 [inlined]
[8] macro expansion
@ ~/.julia/juliaup/julia-1.10.5+0.x64.linux.gnu/share/julia/stdlib/v1.10/Test/src/Test.jl:1577 [inlined]
[9] test_reverse(::Function, ::Type, ::Tuple{Vector{Float64}, UnionAll}, ::Vararg{Any}; rng::Random.TaskLocalRNG, fdm::FiniteDifferences.AdaptedFiniteDifferenceMethod{5, 1, FiniteDifferences.UnadaptedFiniteDifferenceMethod{7, 5}}, fkwargs::@NamedTuple{}, rtol::Float64, atol::Float64, testset_name::Nothing)
@ EnzymeTestUtils ~/.julia/packages/EnzymeTestUtils/5JRuz/src/test_reverse.jl:91
[10] test_reverse(::Function, ::Type, ::Tuple{Vector{Float64}, UnionAll}, ::Vararg{Any})
@ EnzymeTestUtils ~/.julia/packages/EnzymeTestUtils/5JRuz/src/test_reverse.jl:74
[11] top-level scope
@ REPL[7]:1
[12] eval
@ ./boot.jl:385 [inlined]
[13] eval
@ ./Base.jl:88 [inlined]
[14] repleval(m::Module, code::Expr, ::String)
@ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.122.1/scripts/packages/VSCodeServer/src/repl.jl:229
[15] (::VSCodeServer.var"#112#114"{Module, Expr, REPL.LineEditREPL, REPL.LineEdit.Prompt})()
@ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.122.1/scripts/packages/VSCodeServer/src/repl.jl:192
[16] with_logstate(f::Function, logstate::Any)
@ Base.CoreLogging ./logging.jl:515
[17] with_logger
@ ./logging.jl:627 [inlined]
[18] (::VSCodeServer.var"#111#113"{Module, Expr, REPL.LineEditREPL, REPL.LineEdit.Prompt})()
@ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.122.1/scripts/packages/VSCodeServer/src/repl.jl:193
[19] #invokelatest#2
@ ./essentials.jl:892 [inlined]
[20] invokelatest(::Any)
@ Base ./essentials.jl:889
[21] (::VSCodeServer.var"#64#65")()
@ VSCodeServer ~/.vscode/extensions/julialang.language-julia-1.122.1/scripts/packages/VSCodeServer/src/eval.jl:34
Test Summary: | Pass Error Total Time
test_reverse: mul! with return activity BatchDuplicated on (::Vector{Float64}, BatchDuplicated), (::SparseMatrixCSC{Float64, Int64}, Const), (::Vector{Float64}, BatchDuplicated), (::Float64, Active), (::Float64, Active) | 14 1 15 0.7s |
Yup that's an error in the error checker, try with #1798 |
And that fixes it! |
@wsmoses is there something I can do to get this moving? |
I think this just requires a rebase and to pass tests |
* Consider constant fp in runtime activity * fix
* Look for more writebarrier opportunities * Update compiler.jl
* Restrict version to 1.10+ * fix * fixup * Update CI.yml * Update Project.toml * Update Project.toml
@wsmoses I realized you just added SparseArrays as a direct dependency. Is it alright if I add those new functions @inline Enzyme.Compiler.ptreltype(::Type{SparseArrays.CHOLMOD.Dense{T}}) where T = T
@inline Enzyme.Compiler.is_arrayorvararg_ty(::Type{SparseArrays.CHOLMOD.Dense{T}}) where T = true to the extension? The alternative is to move my rules into |
This is an attempt to fix #1682 by adding a specific rule to handle this case.
The approach I took was to create a specific rule for
mul!(C,A,B,a,b)
. I did this rather than targetspdensemul!
because I wasn't sure ifspdensemul!
was considered public. I can change that if people feel different. A couple of other notesDuplicated
since I would need something akin toChainRulesCore
ProjectTo for sparse matrices. If people really want this in this PR I can add itI wasn't sure ifBatch mode now worksBatchDuplicated
should be supported here?a
andb
are numbers and so they'll be active. When I tried to supportBatchDuplicated
, my Julia session crashed, so maybe that isn't legal. If it is supposed to be supported, I can post the error message I found.On the brightside, in the examples from #1682 I now get