6

Octave と Julia を使用して、大きな正方行列を持つランダム線形システムを解こうとしています。Octave と Julia の構文は非常に似ているため、次のコードを Octave シェルと Julia シェルの両方で実行します。

N = 5000;
A = rand(N, N);
b = rand(N, 1);
x = A\b;
r = norm(A*x - b)/norm(b)

Octave は 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

Julia ではバックスラッシュ演算子は小さなシステム (10 x 10 など) では機能しますが、50 x 50 のシステムでは既にエラーが発生します。私が知る限り、Octave と Julia の両方が BLAS と LAPACK を使用しているため、なぜ Julia がこのタスクを実行できないのか、かなり混乱しています。誰かがこれを修正する方法を教えてもらえますか?

システムインフォメーション

  • Linux ミント 13 KDE、64 ビット
  • PPA から LLVM 3.2 と Clang 3.2 をインストールしました: ppa:kxstudio-team/builds
  • Julia 0.2.0-2429.rb0a9ea79 をソースからコンパイル

編集

OpenBLAS 0.2.7 がリリースされたため、この問題は解決されました。Julia を再コンパイルするときは、Julia が OpenBLAS >=0.2.7 のシステム バージョンを使用しているか、Julia が OpenBLAS >=0.2.7 の独自のバージョンを内部でコンパイルしていることを確認してください。

4

2 に答える 2

1

OpenBLAS: 0.2.7 の新しいバージョンが出たので、Julia を新たにコンパイルしました。残念ながら、ジュリアはまだ OpenBLAS 0.2.6 を使用しているため、これは何の意味もありませんでした。ただし、Julia にバージョンをダウンロードして独自にコンパイルさせる代わりに、Julia のコンパイル中に OpenBLAS のシステム バージョンを使用することは可能です。このようにして、Julia に 0.2.6 ではなく 0.2.7 を使用させたところ、私が抱えていた問題は解決されました。スタック オーバーフローはもうありません。

于 2013-07-22T09:33:31.007 に答える