Skip to content

Performance regression in preconditioner creation from v1.0.0 to v1.1.0 #119

@ttsHub

Description

@ttsHub

Hi,

There is a significant difference between versions 0.6.0 and 1.1.0 of AlgebraicMultigrid.jl for the following sparse matrix to create the preconditioner

using SparseArrays, LinearAlgebra, AlgebraicMultigrid

(Tv, n, p) = (Float64, 4000000, 1.0e-8)
A = sprand(Tv, n, n, p)
A1 = 0.5 * (A + A') + LinearAlgebra.I

Observed results

v1.0.0

julia> @time AlgebraicMultigrid.aspreconditioner(AlgebraicMultigrid.smoothed_aggregation(A1))
  1.355003 seconds (456 allocations: 717.090 MiB, 32.77% gc time)
AlgebraicMultigrid.Preconditioner{AlgebraicMultigrid.MultiLevel{AlgebraicMultigrid.Pinv{Float64}, GaussSeidel{SymmetricSweep}, GaussSeidel{SymmetricSweep}, SparseMatrixCSC{Float64, Int64}, SparseMatrixCSC{Float64, Int64}, Adjoint{Float64, SparseMatrixCSC{Float64, Int64}}, AlgebraicMultigrid.MultiLevelWorkspace{Vector{Float64}, 1}}, AlgebraicMultigrid.V}(Multilevel Solver
-----------------
Operator Complexity: 1.035
Grid Complexity: 1.037
No. of Levels: 4
Coarse Solver: Pinv
Level     Unknowns     NonZeros
-----     --------     --------
    1      4000000      4319678 [96.66%]
    2       148084       149020 [ 3.33%]
    3          462          462 [ 0.01%]
    4            0            0 [ 0.00%]
, :zero, AlgebraicMultigrid.V())

v1.1.0

julia> @time AlgebraicMultigrid.aspreconditioner(AlgebraicMultigrid.smoothed_aggregation(A1))
 45.310739 seconds (2.67 M allocations: 838.746 MiB, 1.28% gc time)
AlgebraicMultigrid.Preconditioner{AlgebraicMultigrid.MultiLevel{AlgebraicMultigrid.Pinv{Float64}, GaussSeidel{SymmetricSweep}, GaussSeidel{SymmetricSweep}, SparseMatrixCSC{Float64, Int64}, SparseMatrixCSC{Float64, Int64}, Adjoint{Float64, SparseMatrixCSC{Float64, Int64}}, AlgebraicMultigrid.MultiLevelWorkspace{Vector{Float64}, 1}}, AlgebraicMultigrid.V}(Multilevel Solver
-----------------
Operator Complexity: 1.034
Grid Complexity: 1.037
No. of Levels: 4
Coarse Solver: Pinv
Level     Unknowns     NonZeros
-----     --------     --------
    1      4000000      4319362 [96.67%]
    2       147639       148523 [ 3.32%]
    3          440          440 [ 0.01%]
    4            0            0 [ 0.00%]
, :zero, AlgebraicMultigrid.V())

Version Info

julia> versioninfo()
Julia Version 1.11.2
Commit 5e9a32e7af (2024-12-01 20:02 UTC)
Build Info:
  Official https://julialang.org/ release
Platform Info:
  OS: Windows (x86_64-w64-mingw32)

Any help on this is much appreciated. Thank you.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions