首页 > 解决方案 > 通过批处理文件同时运行多个 MATLAB 实例

问题描述

有没有办法通过批处理文件在不同的 MATLAB 实例中同时运行多个 .m 文件?我想要完成的任务如下:

  1. 打开 x 个 MATLAB 实例;

  2. 让不同的实例同时运行不同的.m文件(这样我的CPU能力就可以完全利用);

  3. 当所有实例完成后,退出所有 MATLAB。

单个批处理文件可以完成这个过程吗?我想使用单个批处理文件的原因是我想在我的 MATLAB 脚本中调用这个批处理文件。本质上,我想做并行计算。(由于我的一些脚本必须在没有并行计算工具箱的 MATLAB 2007 上运行,我必须想办法解决。)

请解释一下代码的语法,因为我对命令提示符知之甚少。

目前,我只知道如何按顺序执行任务,就像下面显示的代码一样。

cd "C:\My_MATLAB_folder_path"

matlab r- "mfile01;exit"

matlab r- "mfile02;exit"

...

matlab r- "mfilexx;exit"

如果命令提示符无法实现此过程,我可以使用哪些替代方法?一件重要的事情是,无论使用什么方法,它都必须能够在 MATLAB 脚本中调用。

标签: matlabbatch-file

解决方案


当 CMD 从批处理文件执行命令或程序时,它会等待启动的程序退出,然后执行下一个命令。为了克服这个问题,您可以在每次调用 MATLAB 之前加上 start 命令:start "" matlab r- "mfilexx;exit"

此外,在 MATLAB 调用之间稍作延迟可能是防止硬盘承受过大压力的好主意。

因此,可以通过以下方式完成任务:

@echo off
setlocal

REM Delay is in seconds after /t switch
set "delay=timeout /t 1 /nobreak >nul"
REM Or this for Windows XP: (Delay is in milliseconds after -w switch)
set "delay=ping -n 1 -w 1000 127.255.255.255 >nul"

cd /d "C:\My_MATLAB_folder_path"

start "" matlab -r "this.m;exit"
%delay%

start "" matlab -r "that.m;exit"
%delay%
...

或者,可以通过以下方式简化批处理脚本:

cd /d "C:\My_MATLAB_folder_path"
for %%A in (
    "this.m"
    "that.m"
    "other.m"
    "add each file in a new line or on the same line separated with space.m" "one another.m"
) do (
    start "" matlab -r "%%~A;exit"
    %delay%
)

推荐阅读