Skip to content

dot with Symmetric view of sparse matrix is very slow #83

Closed
@goulart-paul

Description

@goulart-paul

Calling three argument dot with a Symmetric view of a sparse matrix is very slow.

Example:

using LinearAlgebra, SparseArrays, BenchmarkTools
A = sprandn(1000,1000,0.1)
A = A+A'   #symmetric 
B = Symmetric(triu(A))
x = randn(1000)

The quadratic form x'*B*x is about 100x slower using dot, although fine when computed directly. The same operation is about the same either way using A.

julia> @btime ($x'*$A*$x);
  173.777 μs (1 allocation: 7.94 KiB)

julia> @btime ($x'*$B*$x);
  97.280 μs (1 allocation: 7.94 KiB)

julia> @btime dot($x,$A,$x);
  174.176 μs (0 allocations: 0 bytes)

julia> @btime dot($x,$B,$x);
  9.559 ms (0 allocations: 0 bytes)

The final case above ends up appears to be falling back on the general symmetric dot implementation here.

This might be related to #23.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions