julia的svd比matlab慢很多倍

有人测试过julia的svd速度吗?
为啥我对一个10000x10000的随机矩阵进行svd,
matlab 2022a只需要38秒,但是julia却要137秒,
julia不是号称跟C++一样快吗?
是有什么优化trick没用上吗?

可能是OpenBLAS和MKL的性能差异。
奇怪的是我是在AMD的机器上测试的。

julia> using LinearAlgebra

julia> using BenchmarkTools

julia> @benchmark svd(rand(1000, 1000))
BenchmarkTools.Trial: 6 samples with 1 evaluation.
 Range (min … max):  891.788 ms … 902.708 ms  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     897.340 ms               ┊ GC (median):    0.00%
 Time  (mean ± σ):   897.264 ms ±   4.734 ms  ┊ GC (mean ± σ):  0.00% ± 0.00%

  █  █                 █                  █                █  █
  █▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█▁▁█ ▁
  892 ms           Histogram: frequency by time          903 ms <

 Memory estimate: 53.53 MiB, allocs estimate: 13.

julia> using MKL

julia> @benchmark svd(rand(1000, 1000))
BenchmarkTools.Trial: 27 samples with 1 evaluation.
 Range (min … max):  166.026 ms … 208.320 ms  ┊ GC (min … max): 0.00% … 0.00%
 Time  (median):     176.544 ms               ┊ GC (median):    0.00%
 Time  (mean ± σ):   179.792 ms ±   9.485 ms  ┊ GC (mean ± σ):  0.00% ± 0.00%

  █   ▁ ▁ █  ▁███▁ ▁ ▁    ██▁    ▁ █  ▁    ▁                  ▁
  █▁▁▁█▁█▁█▁▁█████▁█▁█▁▁▁▁███▁▁▁▁█▁█▁▁█▁▁▁▁█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█ ▁
  166 ms           Histogram: frequency by time          208 ms <

 Memory estimate: 53.53 MiB, allocs estimate: 13.

英文论坛也有讨论https://discourse.julialang.org/t/svd-2x-slower-than-in-matlab-and-how-to-get-best-performance-on-windows10/21645

1 个赞

类似于SVD这样的线性代数运算,几乎所有的语言最终都是调用底层的C,Fortran和C++,Julia目前也没有例外。所以当我们说“A和B的性能比较”时,我们需要注意最终比较的究竟是什么。比如我用Numpy,会产生Python和C一样快的错觉,但这不代表语言层面的速度。

4 个赞