gpt4 book ai didi

performance - Julia 的特征分解比 Mathematica 慢 5 倍?

转载 作者:行者123 更新时间:2023-12-04 03:01:03 28 4
gpt4 key购买 nike

我是 Julia 的新手,主要在 Mathematica 工作,所以我可能会遇到一些基本错误。我试图计算 Julia 计算随机矩阵的特征系统所花费的时间,发现它比 Mathematica 慢 5-6 倍。

在 Julia :

D=1000*(rand(1000,1000)-0.5);
@time (E,F)=eig(D);

Out: elapsed time: 7.47950706 seconds (79638920 bytes allocated*)

在数学中:
First@Timing@Eigensystem[RandomReal[{-500, 500}, {1000, 1000}]]

Out: 1.310408

对于 2000 x 2000 数组,它是类似的,虽然 Julia 结果比等效的 Mathematica 调用慢一点,但它仍然更慢; Julia 需要 22 秒,而 Mathematica 需要 8 秒。

据我阅读 Julia standard library for linear algebra , 分解是通过调用 LAPACK 来实现的,我认为这应该很好,所以我很困惑为什么 Julia 代码运行得这么慢。有谁知道为什么会这样?它是否在做某种 Mathematica 不做的平衡或阵列对称检测?或者它实际上更慢?

此外,这是一个语法问题,可能是一个愚蠢的错误,但是如何更改 Julia 中的平衡?我试过
@time (E,F)=eig(D[, balance=:nobalance]);

与从 Julia 手册中复制和粘贴的完全一样,但它只是给出了语法错误,所以出了点问题。

我正在使用 Windows 7 64 位,Julia 版本 0.2.0 64 位,使用 instructions at Steven Johnson's site 安装,首先安装 Anaconda 以处理先决条件。我正在使用 Mathematica 学生版 9.0.1 版。

编辑1:

执行 versioninfo()产生
Julia Version 0.2.0
Commit 05c6461 (2013-11-16 23:44 UTC)
Platform Info:
System: Windows (x86_64-w64-mingw32)
WORD_SIZE: 64
BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY)
LAPACK: libopenblas
LIBM: libopenlibm

所以看起来我正在将 openBLAS 用于 LAPACK 和 BLAS。一旦我得到 Mathematica 实现信息,我也会添加它。

编辑2:

似乎 Windows Mathematica probably uses Intel MKL BLAS .

最佳答案

Julia 中的特征计算外包给 LAPACKBLAS ,我认为 Mathematica 也是如此。 Julia 可以使用不同版本的 BLAS 和 LAPACK,因此您可以有效地将您为 Julia 选择的 LAPACK 和 BLAS 与 Mathematica 的 LAPACK 和 BLAS(可能是英特尔 MKL)进行比较。

Julia 的默认选择是 OpenBLAS这在大多数架构上都很快,在我的机器上,Julia 的特征计算比 Mathematica 快。如果您在 Linux 上并从 repo 中选择了 BLAS 和 LAPACK,那么它们很可能比 OpenBLAS 慢得多。

Julia 中最近添加了平衡选项,但错误地未将选项添加到函数 eig ,它只是 eigfact 的 MATLAB 兼容接口(interface)功能。写作 eigfact(A,balance=:nobalance)应该管用。

编辑1:
进一步的调查表明,这种差异是由于 Windows 上的 OpenBLAS 中的线程问题造成的。如果 Julia 的 BLAS 仅限于一个线程,则计时与 Mathematica 相当,但如果允许更多线程,则计算速度会减慢。这在 Mac 或 Linux 上似乎不是问题,但如上所述,通常 OpenBLAS 的性能取决于架构。

编辑2:
最近,平衡选项发生了变化。可以通过写入 eigfact(A,permute=false,scale=false) 来关闭平衡。 .

关于performance - Julia 的特征分解比 Mathematica 慢 5 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641621/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com