我是Julia的新手,主要在Mathematica工作,所以我可能会有一些基本的错误.我试图计算Julia计算随机矩阵的特征系统的时间,并发现它比Mathematica慢5-6倍.
在朱莉娅:
D=1000*(rand(1000,1000)-0.5);
@time (E,F)=eig(D);
Out: elapsed time: 7.47950706 seconds (79638920 bytes allocated*)
Run Code Online (Sandbox Code Playgroud)
在Mathematica中:
First@Timing@Eigensystem[RandomReal[{-500, 500}, {1000, 1000}]]
Out: 1.310408
Run Code Online (Sandbox Code Playgroud)
对于2000 x 2000阵列来说它是相似的,虽然Julia结果的速度比Mathematica调用的速度略慢,但它仍然较慢; Julia需要22秒,而Mathematica会在8秒内计算出来.
至于我在线性代数的Julia标准库中读到的,通过调用LAPACK来实现分解,我认为这应该是非常好的,所以我很困惑为什么Julia代码运行得那么慢.有谁知道为什么会这样?它是在进行Mathematica不做的某种平衡或阵列对称检测吗?还是它实际上更慢?
此外,这是一个语法问题,可能是一个愚蠢的错误,但你如何改变朱莉娅的平衡?我试过了
@time (E,F)=eig(D[, balance=:nobalance]);
Run Code Online (Sandbox Code Playgroud)
完全像从Julia手册中复制和粘贴一样,但它只是给出了语法错误,所以出了点问题.
我正在使用Windows 7 64位,Julia版本0.2.0 64位,使用Steven Johnson网站上的说明安装,首先安装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
Run Code Online (Sandbox Code Playgroud)
所以看起来我正在使用openBLAS用于LAPACK和BLAS.一旦我获得了Mathematica实现信息,我也会添加它.
编辑2:
似乎Windows Mathematica 可能使用英特尔MKL BLAS.