我如何 运行 并行执行 MATLAB 脚本(即在多核上且不使用 parfor)?

How do I run MATLAB scripts in parallel (i.e. on multiple cores and without using parfor)?

我正在寻找 运行 我并行使用的 MATLAB 脚本的选项,没有太多麻烦。

是否有关于如何在这种情况下进行的示例或简单场景?

Note below MacOSX/Linux are assumed. But parallel will work inside envs like msys on Windows

这是一个关于如何在您的计算机上并行启动 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. If you prefer a video in Ogg/Theora format: http://tinyogg.com/watch/TORaR/ and http://tinyogg.com/watch/hfxKj/

替代方法 - 编译 MATLAB 代码

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

mcc -m myprint.m

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

run_myprint.sh

查找您的 MATLAB 安装位置(使用 $MATLABROOT bash 变量或 $MCR [MATLAB 运行time 文件夹]。您现在可以开始您的程序了:

./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

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

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

忠告

如果您的问题以及您的代码是令人尴尬的并行,请保持这种状态。

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

点击这里了解更多详情:http://en.wikipedia.org/wiki/Embarrassingly_parallel