在不使用parfor循环的情况下运行多个Matlab实例。

8 浏览
0 Comments

在不使用parfor循环的情况下运行多个Matlab实例。

我想要运行多个实例的Matlab而不是使用parfor循环。我的代码结构如下:\n

if k == 1
% 在这里设置一些参数
elseif k == 2
% 在这里设置一些其他参数
...
elseif k == 10
% 在这里设置一些其他参数
end

\n是否有一种高效的方法可以打开10个Matlab实例,其中每个实例将以给定的k值运行?\n我知道在使用slurm的集群中,我可以使用slurm数组,即我可以在Matlab代码的开头添加以下内容:\n

k = str2num(getenv('SLURM_ARRAY_TASK_ID'));

\n然后只需批量提交即可。在普通计算机上有类似的方法吗?

0
0 Comments

在MATLAB中运行多个实例而不使用parfor循环的原因是,运行多个实例会增加开销,这可能会削弱您认为正在实现的“并行化”。每个实例都需要多个引擎,因此会占用大量的内存和处理能力。实际上,使用for循环可能会更快。

然而,如果您仍然希望运行多个实例,有几种方法可以实现:

1. 通过命令行传递参数给MATLAB函数。您可以在DOS命令提示符下使用以下命令:matlab /r "myfunc(2)"来调用MATLAB函数,并传递参数。

2. 在Windows命令行中编写for循环。您可以使用以下命令:for /l %x in (1, 1, 100) do echo %x来创建一个循环,并在每次迭代中执行某些操作。

3. 在后台运行命令。您可以使用以下命令:START /B your_command在后台运行MATLAB命令。

需要注意的是,并行化的最佳方式是使用MATLAB的parfor循环。parfor循环可以充分利用所有可用的核心来计算结果,最大化资源利用率。因此,如果您希望实现最快的并行计算,建议使用parfor循环而不是运行多个实例。

总之,虽然可以通过运行多个MATLAB实例来实现并行计算,但这是最差和最慢的方法。如果您仍然希望这样做,可以使用上述提到的方法来实现。

0
0 Comments

在使用GNU parallel时,你可以得到类似于在集群上使用Slurm的设置。通过在parallel启动的命令中显式设置SLURM_ARRAY_TASK_ID变量,您可以在集群和本地工作站上同时使用相同的Matlab脚本。GNU Parallel提供了许多选项来管理、限制、调节甚至分派"作业"。

0
0 Comments

在Linux中,可以使用一个bash脚本来编写MATLAB脚本,并且可以并行执行。可以在每个MATLAB调用之后使用&符号(&),但是GNU parallel软件更好用:可以指定并行运行的作业数量。

这个bash脚本创建了N个MATLAB脚本(N是命令行参数),并在MATLAB中并行执行。每个脚本应该显示一个填充有数字M的MxM矩阵(M为1、2、...、N)。因此,命令runsN.sh 5同时运行5个MATLAB实例。

在脚本中,${ml_ex}可以替换为${ml_ex} -nodesktop -nosplash,这样可以更清楚地显示发生的情况。我有一个别名来始终使用这些选项。

如果您有一些耗时、不太需要资源的完全独立的作业,这可能值得一试。我用它来进行图像处理。

0