ループを含む一部の matlab コードを高速化したいと考えています。一般的な解決策は、ループを C でコーディングし、matlab から呼び出すことです。しかし、代わりにJavaでループを実装することで同様の利点が得られるかどうか疑問に思っていました-おそらく、ジャストインタイムコンパイルにより高速になりますか?
2 に答える
外部コードで作業を開始する前に: 変数を事前に割り当てましたか? ループをベクトル化できますか? Matlab のジャストインタイム コンパイラーは長年にわたって大幅に改善されてきましたが、ベクトル化によって大幅な改善がもたらされる場合がまだあります。また、かなりの数の Matlab 関数 (エディターで開いたときにコードが表示されない関数) が C または Fortran で実装されているため、劇的な速度の向上が見られない場合があることに注意してください。
Matlab でより適切に記述しても Matlab コードを高速化できない場合、および再実装が実際に利益をもたらす可能性が高いと思われる場合は、C が最も高速である可能性がありますが、Java はそれほど遅れていない可能性があります (これも場合によって異なります)。スピードアップしたいコードについて - ここに投稿することをお勧めします)。C よりも Java に精通している場合は、Java ルートを試すことをお勧めします。
SO のユーザーは、常にコードの最適化に熱心に取り組んでいます。プロファイリングによって時間のかかるコード セクションを見つけたら、ここでコードの抜粋を公開できます。
MATLAB の驚異的な機能の 1 つは、JAVA スクリプトを実行できることです。「最適化された」コードを JAVA で記述し、MATLAB 内でクラスをインスタンス化します。Cを使用すると、ラッパーを作成する必要があり、シームレスではありません。