42

私はいくつかのプロジェクトで Octave と MATLAB を使用してきましたが、いくつかの質問に遭遇しました。この質問なぜ/いつ、Octave よりも MATLAB を優先する必要がありますか? ) いくつか答えましたが、まだ 1 つ残っています...

私は、Octave と MATLAB のパフォーマンスを比較する多くの投稿/その他の情報源を読みました。また、Octave は一般に、標準操作で MATLAB よりもはるかに遅いという一般的なコンセンサスを確認する標準スクリプトで独自のテストをいくつか実行しました (繰り返し、もちろん、比較が意味を持つように)。

コンセンサスは、MATLAB のパフォーマンス向上のほとんどが、実行時に大きなループをコンパイルする JIT コンパイラに起因することも示唆しているようです。これは理にかなっており、これらの場合に最大のパフォーマンスの違いが発生するようです (例: Mathworks Matlab と Gnu Octave ) 。

私の質問は次のとおりです。ベクトル化されたコードも Octave でより遅く実行されるのはなぜですか? この場合、ループの前にメモリを確保し、一部のネイティブ C/C++ ループで操作を実行する必要があるようです。これにより、ベクトル化されたコードのパフォーマンスが Octave と MATLAB と同等になります。さらに、これはより広い意味を持ちますか、つまり、JIT コンパイラが不要/使用されないようにコードが書かれていても、Octave は複雑な操作に対してパフォーマンスが低下する可能性がありますか?

4

2 に答える 2

41

Matlab コードを高速化する方法は 4 つあります。

  • JIT: 実行時のコンパイルはループに役立ちますが、私の逸話的な観察によると、コードの他の部分も高速化 (または少なくとも対話) するようです。

  • C/C++ での関数の実装: Matlab/Octave で実装されている一連の Matlab/Octave 関数があります。リリースごとに、ビルトインに組み込まれるものがたくさんあります。

  • マルチスレッド:関数呼び出しを高速化するマルチスレッド実装を持つ関数のリストがあります。

  • 一般に、より効率的な実装。たとえば、メジアン フィルターは、数リリース前に整数入力の速度が大幅に向上しました。

これらのアプローチにはすべて、コードを高速化する専任の開発者が必要です。私の知る限り、Octave 開発者の主な関心事は、(Matlab) 機能が完全に存在することを確認することですが、パフォーマンスの向上は、ここ数年の Matlab 開発の焦点であったようです。

于 2012-09-24T19:14:01.137 に答える
19

Matlab は、ベクトル演算と行列演算に Intel Math Kernel Library (Intel MKL) を内部的に使用します。これにより、Matlab は Octave よりも大幅に有利になります。

Matlab でコマンド 'version -lapack' および 'version -blas' を試して、Matlab が使用している MKL のバージョンを確認してください。

Matlab による MKL の使用法について説明しているクイック リンクはhttp://stanford.edu/~echu508/matlab.htmlです。

インテル MKL は独自仕様です。software.intel.com/en-us/intel-mkl 。ただし、非商用の場合、Linux 版は無料です。Octave が私たちのマシンにインストールされている MKL を何らかの方法で使用できれば、Octave が大幅に高速化されるはずです。

于 2014-03-30T18:11:24.357 に答える