Aer*_*ius 5 matlab octave blas lapack julia
我正在尝试使用Octave和Julia解决具有大平方系统矩阵的随机线性系统。因为Octave和Julia的语法非常相似,所以我在Octave Shell和Julia Shell中都运行以下代码:
N = 5000;
A = rand(N, N);
b = rand(N, 1);
x = A\b;
r = norm(A*x - b)/norm(b)
Run Code Online (Sandbox Code Playgroud)
八度返回1e-12附近的r。另一方面,Julia返回错误:
ERROR: stack overflow
in getrf! at linalg/lapack.jl:342
in LU at linalg/factorization.jl:134
in \ at linalg/dense.jl:518
Run Code Online (Sandbox Code Playgroud)
反斜杠运算符确实适用于较小的系统(例如10 x 10)的Julia,但是50 x 50的系统已经给出了错误。据我了解,Octave和Julia都使用BLAS和LAPACK,所以我很困惑为什么Julia无法执行此任务。有人可以告诉我如何解决此问题吗?
系统信息
编辑
现在已经解决了OpenBLAS 0.2.7的问题。重新编译Julia时,请确保Julia使用OpenBLAS> = 0.2.7的系统版本,或者Julia在内部编译自己的OpenBLAS> = 0.2.7的版本。
正如我在问题中提到的(https://github.com/JuliaLang/julia/issues/3630),这很可能与https://github.com/xianyi/OpenBLAS/issues/ 中讨论的 openblas 线程错误相同221 .
openblas develop 分支有一个临时修复,它设置了更大的堆栈大小。
现在,做blas_set_num_threads(1)
。