在不使用parfor循环的情况下运行多个Matlab实例。
在不使用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然后只需批量提交即可。在普通计算机上有类似的方法吗?
在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实例来实现并行计算,但这是最差和最慢的方法。如果您仍然希望这样做,可以使用上述提到的方法来实现。
在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
,这样可以更清楚地显示发生的情况。我有一个别名来始终使用这些选项。
如果您有一些耗时、不太需要资源的完全独立的作业,这可能值得一试。我用它来进行图像处理。