gpt4 book ai didi

matlab - 如何在多个内核上批量(多个作业)运行 simulink 模型?

转载 作者:行者123 更新时间:2023-12-04 04:53:14 30 4
gpt4 key购买 nike

我有一个 Simulink 模型,在开始之前,它执行一个脚本(在回调中)(让我们调用脚本 constants.m)来设置基础工作区中的各种常量和参数。现在,我希望使用各种常量和参数集(即具有多个文件、 constants1.mconstants2.m 等)来执行 Simulink 模型,这样就无需每次在运行之前手动更改相同的脚本Simulink 模型。

我能够设置一个脚本( batchProcessing.m ),多次加载、执行和关闭模型。但是,我想让所有作业在不同的内核上同时运行(我有一个具有 12 个内核的 Xeon CPU)。如果没有 Parallel Toolbox,是否可以做到这一点?是否可以使用批处理脚本( .bat )?

更新:

这是我在 macduff 的帮助下尝试的回答:

我的测试功能:

function test3(n, ii)
A = rand(n);
B = rand(n);
tic; C=A*B;
tableTitle = {'Resultat'};
fileID = fopen(strcat('D:\Documents\MATLAB', '\', 'batchResults', num2str(ii), '.txt'),'w');
fprintf(fileID, '%12s\n', tableTitle{1});
fprintf(fileID, '%12.5f\n',C(1:10));
fclose(fileID);
toc
end

.bat 文件:
set MATLAB_EXE_PATH = "C:\MATLAB\R2010a\bin\matlab.exe"
start /MIN /LOW "MATLAB" "%MATLAB_EXE_PATH%" -nosplash -nodesktop -r "test3('%100%','%1');"
start /MIN /LOW "MATLAB" "%MATLAB_EXE_PATH%" -nosplash -nodesktop -r "test3('%100%','%2');"

什么也没有发生,.txt 也不会被创建。如果我直接在 Matlab 中运行 test3 函数,它可以正常工作。所以问题出在批处理文件上。

更新正确答案

再次,在 macduff 的帮助下回答,这是我所做的:
set MATLAB_EXE_PATH=C:\MATLAB\R2010a\bin\matlab.exe
set arg1=5000
set arg2=1
start /MIN /LOW %MATLAB_EXE_PATH% -nodesktop -nosplash -r "cd('D:\Documents\MATLAB\'); test3(%arg1%,%arg2%); exit;"
set arg2=2
start /MIN /LOW %MATLAB_EXE_PATH% -nodesktop -nosplash -r "cd('D:\Documents\MATLAB\'); test3(%arg1%,%arg2%); exit;"

现在,如果 Matlab 窗口可以保持关闭状态而不在屏幕上弹出,那就太好了。

最佳答案

这是一个经常出现的需求,需要在没有 Parallel Toolbox 的情况下运行多个 Matlab session 。这确实是可能的。我相信您建议的方法很有可能,而且可能是最简单的,尽管有很多方法可以解决这个问题。

set MATLAB_EXE_PATH = "C:\MATLAB\2009b\win32\matlab.exe"
start /MIN /LOW "MATLAB" "%MATLAB_EXE_PATH%" -nosplash -nodesktop -r "functionIWantToRun('%stringArgumentsToThisFunction%',...)"

您可以重复 start上面的命令与您的初始函数调用不同的参数,以制作您的批处理作业。

编辑

估计我说的不是很清楚,抱歉。下面是一个批处理文件的示例:
rem In a file like, runMe.bat on the Desktop that you double click
set MATLAB_EXE_PATH = "C:\MATLAB\2009b\win32\matlab.exe"
start /MIN /LOW "MATLAB" "%MATLAB_EXE_PATH%" -nosplash -nodesktop -r "functionIWantToRun('%stringArgumentsToThisFunction%',...)"
start /MIN /LOW "MATLAB" "%MATLAB_EXE_PATH%" -nosplash -nodesktop -r "functionIWantToRun('%differentStringArgumentsToThisFunction%',...)"

我从来不需要指定运行 Matlab 的核心。根据我的经验,当一个新进程启动时,它会被分发到每个内核,所以我总是运行与内核数量相同的进程。这非常有效,但是如果您需要更精细的粒度控制,您应该考虑关于 PSEXEC 等的 dbenham 建议。哼!

编辑

您需要将脚本放在启动目录中,即Matlab 启动的目录, see this link .我尝试了以下操作,就像快速而肮脏的检查一样,我在 C:\Data 中有 test3.m。
set V=100
set K=2
start "MATLAB" /LOW /MAX "MATLAB" -nosplash -nodesktop -r "chdir('C:\Data'); test3(%V%,%K%);"

它有效!但是我没有调用 MATLAB 版本,只是使用 PATH。

这是我最后的奉献。 :-)

m文件:
function test3(n, ii)
A = rand(n);
B = rand(n);
tic; C=A*B;
tableTitle = {'Resultat'};
fileID = fopen(strcat('C:\', 'batchResults', num2str(ii), '.txt'),'w');
fprintf(fileID, '%12s\n', tableTitle{1});
fprintf(fileID, '%12.5f\n',C(1:10));
fclose(fileID);
toc
exit;
end

bat 文件:
set MATLAB_EXE_PATH=C:\MATLAB\R2009bSP1\bin\win32\matlab.exe
start /MIN /LOW "MATLAB" "%MATLAB_EXE_PATH%" -nosplash -nodesktop -r "test3('100','1');"
start /MIN /LOW "MATLAB" "%MATLAB_EXE_PATH%" -nosplash -nodesktop -r "test3('100','2');"

set V=100
set K=2
start "MATLAB" /LOW /MAX "MATLAB" -nosplash -nodesktop -r "chdir('C:\Data'); test3(%V%,%K%);"
set V=100
set K=3
start "MATLAB" /LOW /MAX "MATLAB" -nosplash -nodesktop -r "chdir('C:\Data'); test3(%V%,%K%);"

示例输出:

Resultat
26.90660
25.58899
23.75740
23.83745
23.75160
27.37161
23.52786
28.48510
27.30217
22.07751


享受!

关于matlab - 如何在多个内核上批量(多个作业)运行 simulink 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17110450/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com