我正在使用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 与其引擎的通信?