MATLAB和C++之间最有效的数据交换方式
Most efficient way to exchange data between MATLAB and C++?
我正在开发一个应用程序,其中有两个程序同时运行:一个在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指南的启发
相关文章:
- 如何将 std::vector 索引交换到<int>数据,将数据交换到索引
- 在UNIX中通过recv/send交换数据时,如何正确使用缓冲区
- 数据交换在CPropertyPage中完成::OnOK?
- TCP 连接中的超时,没有数据交换
- 如何将 Matlab 与 Visual Studio 连接以进行实时数据交换?
- 根据 C++ 中的特定数据交换这些对象
- (De/)序列化作为C++中基于文件的数据交换的接口
- 矢量和指针队列数据交换:深层和浅层副本
- 数据交换的设计模式
- 类 COpenGLControl 的两个实例之间的动态数据交换
- MATLAB和C++之间最有效的数据交换方式
- C++应用程序(Sci)Python之间的数据交换
- 如何使用c++网络编程进行数据交换
- std::带有数据交换的矢量指针
- MPI进程之间的数据交换(halo)
- 使用PHP和c++进行数据交换
- MFC数据交换验证
- linux上c++线程间的线程安全数据交换/共享内存
- 使用wininet与服务器进行数据交换
- 2 个本地服务器(C++上的逻辑服务器和用于网页的 Web 服务器)数据交换.如何