2013-04-12 27 views
22

MatlabプログラムをMatlabのdeploytoolを使用してコンソールベースのアプリケーションに変換しました。 Matlab .mファイルの実行には約2秒かかりますが、実行可能ファイルに変換して.exeというファイルを呼び出すと、実行には45秒かかります。Matlabの実行が遅すぎる

私はMatlabプログラムをPHPに統合したいと考えています。これを行うための他の効率的かつ迅速な方法はありますか?私のプロジェクトでは、時間は本当に大きな要因です(開発時間ではなく、アプリケーションの実行時間)。時間がかからない方法はありますか?

私は、インターネットでMatlabを呼び出すためのPHP拡張機能を書くことができます。この方法は高速ですか、.exeファイルと同じですか? Matlabコーダーはこのプロセスの助けになりますか?代替オプションがある場合は、それに言及してください。

+0

ことの一つは、実際の計算時間を追跡しています。少なくとも呼び出しが遅いのか、それとも計算そのものかを特定できます。 –

+0

これはどのように追跡できますか?私はランと時間を使いましたが、それは単に合計時間を与えます。 – user1583647

+0

matlab .mファイルは実行に2秒しかかかりませんが、exeには45秒と書いてありますので、それは遅いですか? – user1583647

答えて

15

.exeファイルは、あなたはそれがMCRを開始しているbecuase最初に実行したときに頭上に苦しむだろうコンパイルしたMATLAB:あなたのOSをログオフまたは再起動しない限りWhy does my application compiled with the MATLAB Compiler 4.1 take a long time to start up?

は、MCRがプリインストールされたままになります。別の有用な読書:Speeding up compiled apps startup

"Why does my stand-alone created using the MATLAB Compiler take longer to start the first time?"でも、連続実行は高速になるはずですが、後で再実行する場合は、プロセスをメモリにリロードする必要があります。

コードをtic tocに囲み、展開し、実行に要した時間と起動時のオーバーヘッドを確認できます。

.exeを高速化する代わりに、PHPでMATLABを呼び出すことができます。 MATLABセッションを開いたままにしておくと、一度オーバーヘッドに入ります。起動時にMATLABを起動することができます。これにより、特にPHP呼び出し時にオーバーヘッドが発生することを回避できます。

詳細については、Calling MATLAB from PHPをお読みください。具体的に必要な場合を除き、exitを使用しないことに注意してください。

+0

コンパイルされたアプリケーションを作成するベストプラクティスは、頻繁に再起動することなく実行できるように開発することです。つまり、絶対に必要でない限り終了しないようにアプリケーションを設計しようとすることができます。このようにして、MCRを頻繁に初期化する必要はありません。しかし、私はこれをどのように達成できますか? – user1583647

+5

OSからログオフまたは再起動しない限り、MCRはあらかじめロードされたままです。もう一つの便利な読書:[コンパイルされたアプリケーションのスタートアップのスピードアップ](http://undocumentedmatlab.com/blog/speeding-up-compiled-apps-startup/) – Oleg

+0

私はEXEファイルを連続して実行しようとしましたが、時間の変更はありません – user1583647

7

MATLAB Compilerで作成した実行ファイルを呼び出すと、MCRを起動する必要があるため、ライブMATLAB内でプログラムを呼び出すよりもオーバーヘッドが発生します。これは最初に起動すると長くなりますが、最初の時間以降でもオーバーヘッドが発生します。

MATLAB Compilerだけでなく、Builder製品の1つ(Builder for .NETまたはPHP-Builder for Javaを使用しているのでおそらく良いでしょう)にアクセスできる場合は、回避する方法がありますこの。

Builder製品を使用すると、スタンドアロンコンポーネント(.NETアセンブリまたはJava .jar)を作成できます。次に、実行する.NETまたはJavaアプリケーションを作成し、MCRを起動するMATLABビルトインコンポーネントをインスタンス化し、そこに座ってPHPからの呼び出しを待ちます。各呼び出しは、MCRの起動オーバーヘッドに全く苦しんではいけません。また、PHPから.NET/Javaへの呼び出しにかかるオーバーヘッドがずっと少なくてすみます。

+0

答えのサムに感謝します。はい、私もこれを試しました。しかし、私たちは.mファイルをmexファイルに変換できますか?このプロセスはより速く、同じですか?.mからmexファイルへの変換についてご意見がありましたら、お勧めします。 – user1583647

+0

あなたの他の質問への私の答えを見てください。 –

+0

.Netアセンブリの作成中にいくつかのツールボックスを除いて、プロセスabitをスピードアップしますか?コンソールベースのC#アプリケーションを作成し、PHPからEXEを呼び出す方法は他にありませんか? – user1583647

1

他の人が言ったように、実行可能ファイルが呼び出されると、実行可能ファイルがロードされるときに(本当に大きなmatlabのための)オーバーヘッドがあります。ソリューション?一度だけロードしてください。どうやってするの?複雑で、プラットフォームにもよります。

私はそれが一番好きなことをする方法は、matlabでサーバーを作ることです(私はこれが可能だと知っていますが、私は試みたことはありません)。したがって、あなたがそれを使用する必要があるときは、単にそれに接続して引数を送信するだけです。HTTP server in matlabこの:

はこれを見てください、あなたがやりたいことがありhttp://blogs.mathworks.com/loren/2011/05/27/transferring-data-between-two-computers-using-matlab/

関連する問題