7

MATLABコンパイラランタイムがインストールされている任意のコンピューターで実行できるmatlabスタンドアロンexeをコンパイルしました。

ただし、exeの起動には20〜30秒かかります。

時間を正確かつ最も重要に測定するにはどうすればよいですか。1〜2秒に短縮するにはどうすればよいですか。

4

2 に答える 2

6

これは、Yair Altman のブログからの抜粋です。

スプラッシュ ラッパー アプリケーションは、デプロイされた (コンパイルされた) Matlab アプリケーションの起動が遅いという問題の多くを軽減できます。スプラッシュ ウィンドウ ソリューションは、ここにあります。このようなスプラッシュ ラッパーは確かに便利ですが、MCR_CACHE_ROOT 環境変数を使用して、コンパイルされたアプリの起動を実際に高速化することもできます。

通常、MCR とスタンドアロンの実行可能ファイルは、起動のたびにユーザーの一時ディレクトリに解凍され、ユーザーがログアウトすると削除されます。どうやら、MCR_CACHE_ROOT 環境変数が設定されている場合、これらのファイルは一度だけ解凍され、後で再利用できるように保持されます。このレポートが実際に正しい場合、これにより、コンパイル済みアプリケーションのその後の呼び出しでの起動時間が大幅に短縮される可能性があります。

Linux の場合:

export MCR_CACHE_ROOT=/tmp/mcr_cache_root_$USER   # local to host
mkdir -p @MCR_CACHE_ROOT
./myExecutable

Windows の場合:

REM set MCR_CACHE_ROOT=%TEMP%
set MCR_CACHE_ROOT="C:\Documents and Settings\Yair\Matlab Cache\"
myExecutable.exe

必要に応じて、Windows でこの環境変数を永続的に設定する方法もあります...

MCR_CACHE_ROOT の設定は、ネットワーク (NFS) の場所から実行可能ファイルを実行する場合に特に重要です。これは、ネットワークの場所への展開が非常に遅くなる可能性があるためです。実行可能ファイルが異なるマシン (たとえば、並列プログラムを実行しているコンピューター クラスター) で並列に実行される場合、異なるクラスターが同じネットワークの場所にアクセスしようとすると、ロックアウトが発生することさえあります。どちらの場合も、解決策は MCR_CACHE_ROOT をローカル フォルダー (/tmp または %TEMP% など) に設定することです。抽出したファイルを再度再利用する場合は、抽出したファイルを削除せずに再利用する必要があります。それ以外の場合は、実行可能ファイルの終了後に一時フォルダーを削除するだけです。次の例では、$RANDOM は乱数を返す bash 関数です。

export MCR_CACHE_ROOT=/tmp/mcr$RANDOM
./matlab_executable
rm -rf $MCR_CACHE_ROOT

MCR_CACHE_ROOT の設定は、MathWorks のテクニカル ソリューションと関連記事 (こちら) で説明されているように、展開されたアプリケーションの他のパフォーマンス ボトルネックを解決するためにも使用できます。

関連する問題として、コンパイルされた Matlab 実行可能ファイルは、アクセス権がないために Matlab が MCR キャッシュ ディレクトリに書き込めない場合、MCR コンポーネント キャッシュにアクセスできませんでしたというエラーで失敗する場合があります。これは、MCR_CACHE_ROOT を存在しないディレクトリに設定するか、グローバル アクセス許可があるフォルダーに設定することで回避できます (通常、/tmp または %TEMP% は書き込み可能なフォルダーです)。関連する投稿を参照ください

于 2012-10-19T20:33:29.813 に答える
0

deploytool を使用してコードをコンパイルしている場合は、[プロジェクト] - [設定] - [パス上のツールボックス] の下で、実行可能ファイルに不要なツールボックスのチェックを外します。最近この問題が発生し、上記の手順により実行可能ファイルのサイズが半分になり、実行可能ファイルの開始時間が大幅に短縮されました。

于 2014-08-13T12:58:56.223 に答える