如何并行运行MATLAB脚本(即在多个内核上运行而不使用parfor)?

时间:2015-07-30 11:31:32

标签: matlab parallel-processing parfor

我正在寻找可以并行运行MATLAB脚本的选项,而不会有太多麻烦。

在这种情况下,是否有关于如何处理的示例或简单方案?

1 个答案:

答案 0 :(得分:3)

  

注意下面是MacOSX / Linux。但parallel可以在Windows上的msys等环境中使用

这是一个如何在您的计算机上并行启动MATLAB作业的示例(不使用parfor或需要依赖Parallel Toolbox许可证):

seq 1 4 | parallel 'matlab -singleCompThread -nojvm -r "myprint({}); exit"'

其中myprint.m是以下MATLAB函数(放在当前工作目录中):

cat myprint.m 
function myprint(text)
   disp(text)
end

可以使用Octave复制此行为:http://www.gnu.org/software/octave/

seq 1 4 | parallel 'octave --eval "myprint({}); exit"'
应安装

parallel。有关该工具的更多信息,请访问GNU项目主页:http://www.gnu.org/software/parallel/man.html

一些显示最常见用法的短视频可在以下网址获得:http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1。如果您更喜欢Ogg / Theora格式的视频:http://tinyogg.com/watch/TORaR/http://tinyogg.com/watch/hfxKj/

替代方法 - 编译MATLAB代码

避免依赖Parallel Toolbox许可证的另一种方法是编译为代码,如下所示

mcc -m myprint.m

如果一切正常(即编译没有任何错误),您将看到myprint可执行文件和bash脚本。要运行脚本,只需在终端中执行此操作:

run_myprint.sh

找到你的MATLAB安装位置(使用$MATLABROOT bash变量或$MCR [MATLAB运行时文件夹])。您现在可以开始您的计划:

./run_myprint.sh /usr/local/MATLAB/R2010b 2

你会看到

------------------------------------------
Setting up environment variables
---
LD_LIBRARY_PATH is .:/usr/local/MATLAB/R2010b/runtime/glnxa64:/usr/local/MATLAB/R2010b/bin/glnxa64:/usr/local/MATLAB/R2010b/sys/os/glnxa64:/usr/local/MATLAB/R2010b/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/usr/local/MATLAB/R2010b/sys/java/jre/glnxa64/jre/lib/amd64/server:/usr/local/MATLAB/R2010b/sys/java/jre/glnxa64/jre/lib/amd64/client:/usr/local/MATLAB/R2010b/sys/java/jre/glnxa64/jre/lib/amd64
2

并行运行编译的MATLAB代码的并行bash版本如下所示:

seq 1 4 | parallel './run_myprint.sh /usr/local/MATLAB/R2010b {}'

一条忠告

如果您的问题以及您的代码令人尴尬地并行,请保持这种方式。

parfor只是真正需要解耦数据中的依赖关系:

点击此处查看详情:http://en.wikipedia.org/wiki/Embarrassingly_parallel