C指针Matlab的变量
我的工作,需要反复地访问大量数据Matlab的结构的C程序。这是一个使用OpenGL的图形密集型程序,因此它必须快速。C指针Matlab的变量
多次访问与Matlab引擎这个数据结构似乎太长了(10-20〜毫秒每次调用engGetVariable和engPutVariable)。我认为这是因为这些函数将数据复制到内存中。
因此,而不是在数据结构本身使用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);
MATLAB engine通过在后台运行,作为与程序分开的进程运行,并拥有自己的地址空间。因此,指向另一个进程的内存中的数据是不可能的,唯一的选择是使用某种IPC机制进行通信。
在Windows引擎API是基于COM接口,而UNIX系统上的引擎是基于pipes(它甚至可以对远程计算机上运行与rsh
的帮助)。
所以你唯一的选择是使用公开的函数engGetVariable
和engPutVariable
交换数据:您可以使用engGetVariable
获得从MATLAB工作空间中的变量的副本,你得到的与mxGetData
底层mxArray
数据指针和处理数组如你所愿,然后你使用engPutVariable
将更新的副本发送回MATLAB。
将MATLAB引擎视为客户机/服务器模型的抽象;你当然不能直接访问服务器上的远程对象的数据,你只能通过客户端暴露的接口和API来实现。 – Amro 2014-10-09 23:28:26
什么好处了'ap'变量在做什么?为什么不只是获得对应于'a'的'mxArray',并根据需要多次调用'mxGetPr'? – 2014-10-09 19:48:28
你看到的输出是什么? – AnonSubmitter85 2014-10-09 20:05:46
'a'数据结构可以在Matlab中在引擎访问它的时间之间修改。当'a'被修改时,它似乎被复制到不同的存储位置,所以'mxGetPr'不指向更新的副本。 – 2014-10-09 20:11:54