JuliaLinearAlgebra / AppleAccelerate.jl

Julia interface to the macOS Accelerate framework
Other
96 stars 18 forks source link

AppleAccelerate.jl severely decreases the performance of SVD #71

Open ronisbr opened 3 weeks ago

ronisbr commented 3 weeks ago

Hi!

I noticed that after loading AppleAccelerate.jl, the SVD performance is severely decreased:

julia> using BenchmarkTools, LinearAlgebra

julia> A = rand(5, 5)
5×5 Matrix{Float64}:
 0.210478  0.485058    0.893071  0.0038541  0.242167
 0.618708  0.880626    0.35424   0.572958   0.721676
 0.539943  0.00980111  0.232398  0.220709   0.196985
 0.19735   0.441403    0.696092  0.527777   0.342491
 0.658019  0.397196    0.212173  0.518869   0.521641

julia> @btime svd($A)
  2.958 μs (7 allocations: 4.05 KiB)
SVD{Float64, Float64, Matrix{Float64}, Vector{Float64}}
U factor:
5×5 Matrix{Float64}:
 -0.379855  -0.756404   0.155695    0.472175    0.190718
 -0.633198   0.298961  -0.517143    0.298206   -0.39156
 -0.233213   0.192713   0.808918    0.056695   -0.500909
 -0.439546  -0.33197   -0.0529993  -0.826642   -0.102225
 -0.455171   0.437188   0.226196   -0.0396693   0.74091
singular values:
5-element Vector{Float64}:
 2.2379393452621
 0.8199698332648618
 0.4548207142220164
 0.32431597799931705
 0.019407475774695128
Vt factor:
5×5 Matrix{Float64}:
 -0.439643  -0.499995   -0.455901   -0.394957   -0.439184
  0.42926   -0.0910059  -0.808755    0.320191    0.225492
  0.633132  -0.671715    0.340672   -0.0610589  -0.1678
  0.386216   0.343976   -0.133626   -0.83768     0.113812
 -0.269129  -0.414974    0.0644648  -0.189869    0.845671

julia> using AppleAccelerate

julia> @btime svd($A)
  5.639 μs (7 allocations: 4.05 KiB)
SVD{Float64, Float64, Matrix{Float64}, Vector{Float64}}
U factor:
5×5 Matrix{Float64}:
 -0.379855  -0.756404   0.155695    0.472175    0.190718
 -0.633198   0.298961  -0.517143    0.298206   -0.39156
 -0.233213   0.192713   0.808918    0.056695   -0.500909
 -0.439546  -0.33197   -0.0529993  -0.826642   -0.102225
 -0.455171   0.437188   0.226196   -0.0396693   0.74091
singular values:
5-element Vector{Float64}:
 2.2379393452620997
 0.8199698332648626
 0.45482071422201675
 0.32431597799931694
 0.01940747577469517
Vt factor:
5×5 Matrix{Float64}:
 -0.439643  -0.499995   -0.455901   -0.394957   -0.439184
  0.42926   -0.0910059  -0.808755    0.320191    0.225492
  0.633132  -0.671715    0.340672   -0.0610589  -0.1678
  0.386216   0.343976   -0.133626   -0.83768     0.113812
 -0.269129  -0.414974    0.0644648  -0.189869    0.845671

System information:

christiangnrd commented 2 weeks ago

Seems like this is overhead that shows up with very small matrices, but once you do it with slightly bigger matrices AppleAccelerate gets faster.

ronisbr commented 2 weeks ago

Indeed, for larger matrices it becomes faster.