Я взаимодействую с MATLAB с C/C++, используя MATLAB Engine API.Ускорение вызова Matlab Engine
В моем конкретном случае MATLAB используется для вычисления что-то и результат выводится в 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 кадров в секунду. Я использовал tic
/toc
для измерения времени выполнения в MATLAB, тогда как моя собственная реализация таймера используется на стороне C/C++.
При профилировании приложения я заметил, что вызовы MATLAB Engine являются узким местом. Я знаю, что реализация Linux MATLAB Engine использует именованные каналы для взаимодействия с MATLAB, и мне было интересно, есть ли способ ускорить связь MATLAB с его Engine?
Это не C, это C++. –
Правда. Извините за то, что я не понимаю. Я реализовал Matlab Engine в C и вычислил тайминги в C++ (где я снова использую результаты Matlab) – Dave
@Dave: Я думаю, что вы ничего не можете сделать, API Engine - это еще один уровень, который добавляет накладные расходы из-за всех данных marshaling взад-вперед ... Я предполагаю, что вы подключаетесь к MATLAB один раз при запуске и повторно используете открытое соединение для каждого вычисления, не так ли? Открытие и закрытие соединения с процессом MATLAB неоднократно может быть очень медленным. – Amro