Skip to content

Commit 520ed1f

Browse files
WIP: fix KrylovJL_GMRES with Enzyme
1 parent bac4e53 commit 520ed1f

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

ext/LinearSolveEnzymeExt.jl

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ using LinearSolve
44
using LinearSolve.LinearAlgebra
55
isdefined(Base, :get_extension) ? (import Enzyme) : (import ..Enzyme)
66

7-
87
using Enzyme
98

109
using EnzymeCore
1110

11+
@inline EnzymeCore.EnzymeRules.inactive_type(v::Type{LinearSolve.KrylovJL}) = true
12+
@inline EnzymeCore.EnzymeRules.inactive_type(v::Type{LinearSolve.Krylov.GmresSolver}) = true
13+
1214
function EnzymeCore.EnzymeRules.augmented_primal(config, func::Const{typeof(LinearSolve.init)}, ::Type{RT}, prob::EnzymeCore.Annotation{LP}, alg::Const; kwargs...) where {RT, LP <: LinearSolve.LinearProblem}
1315
res = func.val(prob.val, alg.val; kwargs...)
1416
dres = if EnzymeRules.width(config) == 1

test/enzyme.jl

+5-3
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ Enzyme.autodiff(Reverse, f2, Duplicated(copy(A), dA), Duplicated(copy(b1), db1),
107107
@test db1 db12
108108
@test db2 db22
109109

110-
#=
110+
111111
function f3(A, b1, b2; alg = KrylovJL_GMRES())
112112
prob = LinearProblem(A, b1)
113113
cache = init(prob, alg)
@@ -117,9 +117,11 @@ function f3(A, b1, b2; alg = KrylovJL_GMRES())
117117
norm(s1 + s2)
118118
end
119119

120+
dA = zeros(n, n);
121+
db1 = zeros(n);
122+
db2 = zeros(n);
120123
Enzyme.autodiff(Reverse, f3, Duplicated(copy(A), dA), Duplicated(copy(b1), db1), Duplicated(copy(b2), db2))
121124

122125
@test dA dA2 atol=5e-5
123126
@test db1 db12
124-
@test db2 ≈ db22
125-
=#
127+
@test db2 db22

0 commit comments

Comments
 (0)