큰 MATLAB 데이터 구조에 반복적으로 액세스해야하는 C 프로그램에서 작업하고 있습니다. 이것은 OpenGL을 사용하는 그래픽 집약적 인 프로그램이므로 빠르지 않아야합니다.C 포인터를 Matlab 변수
Matlab Engine을 사용하여이 데이터 구조에 반복적으로 액세스하는 데 너무 오래 걸리는 것처럼 보입니다 (engGetVariable 및 engPutVariable을 호출 할 때마다 ~ 10-20ms). 나는이 함수들이 메모리에있는 데이터를 복사하기 때문이라고 생각한다.
따라서 데이터 구조 자체에 engGetVariable을 사용하는 대신 데이터 구조에 대한 포인터를 얻으려고합니다. 포인터에 engGetVariable을 호출하면 포인터를 역 참조하여 데이터를 메모리에 먼저 복사하지 않고 C의 데이터 구조에 액세스 할 수 있습니다. 그러나 나는이 일을 지금까지 할 수 없었습니다. 이게 가능한가?
// Make vars in matlab workspace
engEvalString(ep, "a=9");
engEvalString(ep, "ap=getPointer(a)");
// Get variables in C
ap = engGetVariable(ep, "ap");
a = *mxGetPr(ap);
printf("a = %f", a);
'ap' 변수가 무슨 소용이 있습니까? 왜 그냥'a'에 해당하는'mxArray'를 얻고,'mxGetPr'을 원하는만큼 여러 번 호출할까요? –
보고있는 출력은 무엇입니까? – AnonSubmitter85
'a' 자료 구조는 엔진이 접근하는 시간 사이에 Matlab에서 수정할 수 있습니다. 'a'가 수정되면 다른 메모리 위치에 복사 된 것처럼 보이므로'mxGetPr'은 업데이트 된 복사본을 가리 키지 않습니다. –