MATLAB

MATLAB のさらなる高速化

R2015a で導入された MATLAB® 実行エンジンは、JIT コンパイルを使用してすべての MATLAB コードを高速化します。JIT コンパイルは、お使いの MATLAB コード向けおよび特定のハードウェア向けに最適化されたネイティブ マシン レベルのコードを生成します。実行エンジンのアーキテクチャは、組み込み関数のより高速な呼び出しや、より高速なインデックス演算など、各リリースでさらなる最適化が可能です。また、MATLAB の主要な関数の多くは、パフォーマンス向上のため暗黙的にマルチスレッド化されます。

MATLAB のパフォーマンスは、実際のユーザーワークフローを表すユニット操作と完全なアプリケーションの両方をカバーする一連のベンチマークを使用して測定されます。これらのベンチマークを、MATLAB のリリースサイクル中に、さまざまなハードウェアやオペレーティング システム上で複数回実行し、新しい最適化の妥当性確認、パフォーマンス低下の検出と対処、オペレーティング システム固有の問題の特定などを行います。

パフォーマンス改善の具体的な内容については、MATLAB リリースノートをご参照ください。MATLAB R2019b 以降、リリースノートのパフォーマンスの項には、以前の MATLAB バージョンとの比較による改善された実行時間の測定値が記載されています。


顧客のワークフローにおける高速化の平均値

MATLAB パフォーマンス テスト スイートでの高速化の平均値。

MATLAB プロファイラー

MATLAB プロファイラーを使用して、コードのボトルネックを特定。

MATLAB コードのパフォーマンス向上

コードのパフォーマンスを向上させるための最初の手順は、ボトルネックを特定することです。たとえば、以下を行うことができます。

  • tictoc、および timeit などの関数でコードの実行時間を測定
  • MATLAB プロファイラーを使用して、プログラムのどの部分の実行に最も時間がかかるかを確認
  • MATLAB コードアナライザーを使用して、パフォーマンスを向上させるための提案を追加

コードのボトルネックを特定すれば、既知のプログラミング手法でコードを高速化できる場合が多くあります。その中でも特によく使われる手法が、配列の事前割り当てとベクトル化です。事前割り当てにより、動的なメモリの割り当てを回避することで、パフォーマンスを向上させることができます。ベクトル化により、単一のコマンドでベクトルのすべての要素を操作することで、ループを回避することができます。これらの手法を組み合わせることで、コードを大幅に高速化することができます。

必要に応じ、お使いのアプリケーションの計算負荷の高い部分をコンパイル言語で記述することにより、パフォーマンスを向上させることができます。MATLAB では、MEX 関数を使用することで、高性能な C、C++、Fortran のコードを MATLAB の組み込み関数と同様に呼び出すことができます。MATLAB Coder™ を使用すると、MATLAB コードを自動的に MEX ファイルに変換することができ、実行速度が格段に向上します。


並列計算の使用でハードウェアを有効活用

ハードウェアのリソースのすべてに明示的にアクセスする並列計算を使用して、計算量の多い問題やデータ集約型の問題を解くことができます。MATLAB の分かりやすさと使いやすさによって、複数のプロセス、複数のスレッド、GPU のすべてに拡張するための機能を活用することができます。1 台のマシンで開発と実行ができ、再コーディングをする必要なく計算クラスターやクラウドに実行を拡張することができます。


並列計算を使用して、すべてのハードウェアリソースを明示的に使用。