Communications between two MatLabs (1) over file

1 min read

Ref to: Communications between two MatLabs (2): over socket

It’s common that two MatLab programs needs to communicate. For instance, one program is collecting the brain imaging data but not display them, and the other program is to display the data. (Another case is at https://www.alivelearn.net/?p=1265) Sometimes it is not practical to merge the two program together (e.g. to keep the code clean). In this case we can run two MatLabs simultaneously. One keeps saving the data to a file, and the other keep reading the file.

Here I played with such a setup, and find they communicate well with small delay (small enough for hemodynamic responses). Check out the video below:

writeSomething.m

for ii=1:100
    save('data','ii');
    disp(['write ' num2str(ii)])
    pause(1)
end
readSomething.m

last_ii = 0;
while(1)
    try
        load data
        if(ii ~= last_ii)
            disp(['get data. i=' num2str(ii)])
        end
        last_ii = ii;
    end
    pause(0.1)
end

Caveat: writing/reading to/from disc is slow. So if your experiment requires real time communication without any delay (say <1ms), this method may not work. Also, the amount of data to write/read each time should be very small, and the frequency of write should be small too. The file needs to locate in your local hard drive instead of a network drive.

———- Comments ———–
Paul Mazaika from Stanford:
Cool piece of code! There may be a way to do this with one umbrella Matlab program that calls both components as subroutines. The potential advantage is that one program will keep memory in cache, not at disk, which can support rapidly updating information. For high speeds, it may be better to only occasionally update the graphical display, which otherwise may be a processing bottleneck.
-Paul

Aaron Piccirilli from Stanford:
There is, sort’ve! I think Xu’s little nugget is probably best choice for many applications, but if speed is an especially big concern then there are a couple of options that I’ve come across that will maintain some sort of shared memory.

Perhaps the easiest is to use sockets to communicate data, via UDP or TCP/IP, just like you use over the internet, but locally. You write some data to a socket in one program, and read it from that same socket in another program. This keeps all of your data in memory as opposed to writing it to disk, but there is definitely some overhead for housekeeping and to move the data from one program’s memory into the operating system’s memory then back into the other program’s memory. An added bonus here: you can communicate between different languages. If you have a logging function written in Python and a visualization program in MATLAB, they can pretty easily communicate with each other via sockets.

MATLAB doesn’t have explicit parallel computing built-in like many other languages, sadly, but we all have access here to the Parallel Computing Toolbox, which is another option for some more heavy-duty parallel processing where you have a problem you can easily distribute to multiple workers.

Finally, true shared memory might be more trouble than it’s worth for most applications, as you then have to deal with potential race conditions of accessing the same resource at the same time.

Aaron

More on this topic: Please continue to read Communications between two MatLabs (2): over socket



文献鸟 618 活动


写作助手,把中式英语变成专业英文


Want to receive new post notification? 有新文章通知我

第六十三期fNIRS Journal Club视频 张百强

Youtube: https://youtu.be/vBsdcx08ZV4 优酷:https://v.youku.com/video?vid=XNjQ4NTcxNjM4MA%3D%3D fNIRS信号
Wanling Zhu
13 sec read

第六十三期fNIRS Journal Club通知2025/6/14, 10am 张百强

该文章的声音简介(中文版): 该文章的声音简介(英文版): fNIRS信号容易受到头动伪影、接触不良以及生理噪声等影响,导致测量信号信噪比低和数据浪费。来自北京师范大学牛海晶课题组的张百强同学将分享一
Wanling Zhu
9 sec read

第六十二期fNIRS Journal Club视频 李杨卓博士

Youtube: https://youtu.be/RN0mUjUe99A 优酷:https://v.youku.com/video?vid=XNjQ3MzIyMTA1Ng== 说服是促进信息传播、人
Wanling Zhu
9 sec read

Leave a Reply

Your email address will not be published. Required fields are marked *