MATLAB和C++之间最有效的数据交换方式

Most efficient way to exchange data between MATLAB and C++?

本文关键字:数据 交换 方式 有效 C++ 之间 MATLAB      更新时间:2023-10-16

我正在开发一个应用程序,其中有两个程序同时运行:一个在C++中,另一个在MATLAB中。

C++程序周期性地生成三个数值作为输出。MATLAB程序需要定期访问这三个输出,但访问时间不同。

目前,我已经使用.txt文件解决了这个问题。C++在例程完成时写入该文件,MATLAB从中读取所需的内容。

但是,使用textscan命令,MATLAB使用Pentium I5-4250U读取.txt大约需要1.5毫秒。所以,我想知道是否有更快的方法来解决这个问题。

答:是的,使用消息层

如果不需要其他服务,C++端将充当信息提供者(ZMQ.PUB发布者),MATLAB端将充当消息订阅者(ZMQ.SUB)。

通过这种方式,与消息传递相关的低级细节由分布式处理消息传递层解决,您的解决方案将受益于速度快、现成的工具,并可以分布到专用网格计算/云计算架构上,使用相同的仪器,获得额外的性能等。

ZeroMQ对C++和MATLAB都有绑定,因此这是一个开始和尝试过程到过程消息层方法的地方。

% MATLAB script to setup zeromq-matlab
clear all;
if ~ispc
    s1 = zmq( 'subscribe', 'ipc', 'MATLAB' );   %% using IPC transport on <localhost>
else
    disp('0MQ IPC not supported on windows. Setup TCP transport class instead')
    disp('Setting up TCP')
    s1 = zmq( 'subscribe', 'tcp', 'localhost', 5555 );
end
recv_data1 = [];                                %% setup RECV buffer

MATLAB绑定可以在这里找到。

由于要发送一些浮点值,延迟将低于数百甚至数十[usec],正如您的通知所提到的异步数据调度模式,因此localhost只会在从localhost ZMQ.SUB-queue检索数据上花费一些时钟。

更复杂的应用程序到应用程序信令是可能的,只需受到ZeroMQ指南的启发