Skip to content

Commit 79fd696

Browse files
committed
Add faster GMRES version
1 parent f23f83c commit 79fd696

File tree

7 files changed

+499
-187
lines changed

7 files changed

+499
-187
lines changed

.JuliaFormatter.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
style = "sciml"
2-
format_markdown = true
2+
format_markdown = true
3+
annotate_untyped_fields_with_any = false

Project.toml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ version = "2.5.1"
55

66
[deps]
77
ArrayInterface = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
8+
ConcreteStructs = "2569d6c7-a4a2-43d3-a901-331e8e4be471"
89
DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
910
EnumX = "4e289a0a-7415-4d19-859d-a7e5c4648b56"
1011
FastLapackInterface = "29a986be-02c6-4525-aec4-84b980013641"
@@ -35,7 +36,6 @@ IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153"
3536
KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77"
3637
MKL_jll = "856f044c-d86e-5d09-b602-aeab76dc8ba7"
3738
Metal = "dde4c033-4e86-420c-a63e-0dd931031962"
38-
NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd"
3939
Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2"
4040

4141
[extensions]
@@ -61,7 +61,6 @@ IterativeSolvers = "0.9.2"
6161
KLU = "0.3.0, 0.4"
6262
Krylov = "0.9"
6363
KrylovKit = "0.5, 0.6"
64-
NNlib = "0.9"
6564
PrecompileTools = "1"
6665
Preferences = "1"
6766
RecursiveFactorization = "0.2.8"
@@ -83,10 +82,9 @@ IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153"
8382
JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b"
8483
KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77"
8584
MKL_jll = "856f044c-d86e-5d09-b602-aeab76dc8ba7"
86-
Metal = "dde4c033-4e86-420c-a63e-0dd931031962"
8785
MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195"
86+
Metal = "dde4c033-4e86-420c-a63e-0dd931031962"
8887
MultiFloats = "bdf0d083-296b-4888-a5b6-7498122e68a5"
89-
NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd"
9088
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
9189
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
9290
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"

ext/LinearSolveBlockDiagonalsExt.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ module LinearSolveBlockDiagonalsExt
22

33
using LinearSolve, BlockDiagonals
44

5-
function LinearSolve.init_cacheval(alg::SimpleGMRES{false}, A::BlockDiagonal, b, u, Pl, Pr,
6-
maxiters::Int, abstol, reltol, verbose, assumptions; zeroinit = true)
5+
function LinearSolve.init_cacheval(alg::SimpleGMRES{false}, A::BlockDiagonal, b, args...;
6+
kwargs...)
77
@assert ndims(A) == 2 "ndims(A) == $(ndims(A)). `A` must have ndims == 2."
88
# We need to perform this check even when `zeroinit == true`, since the type of the
99
# cache is dependent on whether we are able to use the specialized dispatch.
@@ -17,8 +17,8 @@ function LinearSolve.init_cacheval(alg::SimpleGMRES{false}, A::BlockDiagonal, b,
1717
end
1818
end
1919
# Can't help but perform dynamic dispatch here
20-
return LinearSolve._init_cacheval(Val(uniform_blocks), alg, A, b, u, Pl, Pr, maxiters,
21-
abstol, reltol, verbose, assumptions; zeroinit, blocksize = usize)
20+
return LinearSolve._init_cacheval(Val(uniform_blocks), alg, A, b, args...;
21+
blocksize = usize, kwargs...)
2222
end
2323

2424
end

ext/LinearSolveNNlibExt.jl

Lines changed: 0 additions & 53 deletions
This file was deleted.

src/LinearSolve.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ using LinearAlgebra.LAPACK: require_one_based_indexing, chkfinite, chkstride1,
2929

3030
import GPUArraysCore
3131
import Preferences
32+
import ConcreteStructs: @concrete
3233

3334
# wrap
3435
import Krylov

src/iterative_wrappers.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ function SciMLBase.solve!(cache::LinearCache, alg::KrylovJL; kwargs...)
253253
Krylov.solve!(args...; M = M,
254254
kwargs...)
255255
elseif cache.cacheval isa Krylov.GmresSolver
256-
Krylov.solve!(args...; M = M, N = N,
256+
Krylov.solve!(args...; M = M, N = N, restart = alg.gmres_restart > 0,
257257
kwargs...)
258258
elseif cache.cacheval isa Krylov.BicgstabSolver
259259
Krylov.solve!(args...; M = M, N = N,

0 commit comments

Comments
 (0)