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