MATLAB Engine API을 사용하여 MATLAB을 C/C++와 인터페이스합니다. 내 특별한 경우 MATLAB에서 Matlab 엔진 호출 속도 향상
뭔가를 계산하는 데 사용되며, 결과는 양쪽에 다양한 테스트를 통해, 그러나 C.에 인쇄되어 내가 여기C.
에 상당한 성능 손실을 눈치 MATLAB 함수 호출의 예입니다 : 는 C 측면에서tic;
data = predictIM(data);
toc;
다음과 같이 나는 유사한 기능을 호출
이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 상기 코드는 24 FPS의 C 코드 반면, 대략 매트릭스 (data
)를 설정 포함한 초당 180 개 프레임을 실행. 나는 내 자신의 타이머 구현이 C/C++ 측에서 사용되는 반면 MATLAB에서 실행 시간을 측정하기 위해 tic
/toc
을 사용했다.
응용 프로그램을 프로파일 링하는 동안 MATLAB 엔진 호출이 병목 현상을 발견했습니다. Linux MATLAB 엔진 구현은 MATLAB과 인터페이스하기 위해 명명 된 파이프를 사용하고 있으며 엔진이있는 MATLAB 통신 속도를 높이는 방법이 있는지 궁금합니다.
그건 C가 아니에요. C++입니다. –
참. 명확하지 않은 것에 대해 유감스럽게 생각합니다. 나는 C로 Matlab 엔진을 구현하고 C++에서 타이밍을 계산한다. (어디에서 Matlab 결과를 더 많이 사용하는지) – Dave
@Dave : 나는 당신이 할 수있는 것이 아무것도 없다고 생각한다. 엔진 API는 모든 데이터 때문에 오버 헤드를 추가하는 또 다른 계층이다. marshaling back and forth ... 당신이 MATLAB에 한 번 연결되면 각 계산에 대해 열린 연결을 재사용한다고 가정합니다. 반복적으로 MATLAB 프로세스에 대한 열기 및 닫기 연결이 느려질 수 있습니다. – Amro