MATLAB Engine APIを使用して MATLAB と C/C++ を接続しています。
私の特定のケースでは、MATLAB を使用して何かを計算し、結果を C で出力します。ただし、両側でのさまざまなテストを通じて、C のパフォーマンスが大幅に低下していることに気付きました。
以下は、MATLAB 関数呼び出しの例です。
tic;
data = predictIM(data);
toc;
C 側では、次のように同様の関数を呼び出します。
iMod::Timer_T<high_resolution_clock> t;
engPutVariable(ep, "data", dataContent);
engEvalString(ep, "[posture] = predictIM(data);");
UT_NOTIFY(LV_DEBUG,"The execution took "<<t.seconds());
C++ でのタイマーの実装は次のようになります。
template< class Clock >
class Timer_T
{
typename Clock::time_point start;
public:
Timer_T() : start( Clock::now() ) {}
typename Clock::duration elapsed() const {
return Clock::now() - start;
}
double seconds() const {
return elapsed().count() *
((double)Clock::period::num/Clock::period::den);
}
};
上記の MATLAB コードは、行列 ( ) の設定を含めて毎秒約 180 フレームで実行されますがdata
、C コードは 24 FPS でのみ実行されます。tic
/を使用toc
して MATLAB で実行時間を測定しましたが、独自のタイマーの実装は C/C++ 側で使用されています。
アプリケーションのプロファイリング中に、MATLAB エンジンの呼び出しがボトルネックであることに気付きました。Linux MATLAB エンジンの実装が MATLAB とのインターフェイスに名前付きパイプを使用していることは知っていますが、MATLAB とそのエンジンとの通信を高速化する方法があるかどうか疑問に思っていました。