3

MATLAB から生成された C++ 共有ライブラリを Win32 コンソール アプリケーションに組み込みました。MATLAB プログラムの実行には MATLAB で 2 ~ 3 秒かかりますが、コンソール アプリケーションの実行には 11 ~ 12 秒かかります。これは MCR の起動時間が原因であると読みました。MCR が初期化された後は、matlab でかかる時間と同じ時間がかかるはずです。では、コンソール アプリケーションの実行に 2 ~ 3 秒かかるように、MCR を常に RAM またはキャッシュにロードまたは初期化するにはどうすればよいでしょうか。MCR が継続的にロードされるように、無限ループを作成する必要がありますか?? 私は Windows OS で作業しており、PHP からコンソール アプリケーションを呼び出しています。そのためのチュートリアルやリンクはありますか?

MCR_CACHE_ROOT をフォルダー (一時的ではない) を指す環境変数として追加しました。私のコンソールアプリケーションコードは次のとおりです。

// shoes_shared.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "shoes_sharedlibrary.h"
#include <iostream>
#include <string.h>
#include "mex.h"



using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    /* Call the MCR and library initialization functions */
 //const char *pStrings[]={"-nojvm","-nojit"};
 //   if (!mclInitializeApplication(pStrings,2))
 //   {
 //       fprintf(stderr, "Could not initialize MCR for the application.\n");
 //       return -1;
 //   }

if (!shoes_sharedlibraryInitialize())
{

    exit(1);
}



     mwArray img(argv[1]); 

     double wt1 = _tstof(argv[2]);
     mwArray C(wt1);
    double wt2 = _tstof(argv[3]);
    mwArray F(wt2);
    double wt3 = _tstof(argv[4]);
    mwArray T(wt3);
    double wt4 = _tstof(argv[5]);
    mwArray S(wt4);



           test_shoes(img,C,F,T,S);
            //shoes_sharedlibraryTerminate();
            //mclTerminateApplication();
            return 0;
}

上記の行にコメントしましたが、それは速くなるが運が悪いと考えています。何か助けはありますか?

4

3 に答える 3

0

MCR とすべての共有ライブラリの依存関係を RAM ドライブに配置してみてください。

RAM ドライブを作成する方法はたくさんあります。ImDiskを使用することをお勧めします

于 2013-05-16T20:20:26.037 に答える
0

どの vm matlab が実行されているかはわかりませんが、たとえば JVM には、バックグラウンドで実行され、一部の Java アプリケーションを実行する必要があるときに呼び出すことができる Java サーバーである Nailgun があります。Matlab が Java を使用していることは知っていますが、DLL がまだ Java を呼び出しているかどうかはわかりません。もしそうなら、それが問題かもしれません。

于 2013-05-16T03:49:50.903 に答える
0

デバッグまたはリリースで実行していますか? デバッグで実行している場合は、リリースで実行してみて、問題が解決するかどうかを確認してください。Visual Studio を使用していますか? その場合は、モジュール ウィンドウを開くと、読み込まれた dll のリストが表示されます。ライブラリが常にロードおよびアンロードされているかどうか、または一度ロードされてロードされたままになっていないかどうかを確認してください。

于 2013-05-13T15:07:19.517 に答える