【发布时间】:2015-07-31 20:48:08
【问题描述】:
我正在寻找并行运行 MATLAB 脚本的选项,而不会带来太多麻烦。
有没有例子或简单的场景说明在这种情况下如何进行?
【问题讨论】:
标签: matlab parallel-processing parfor
我正在寻找并行运行 MATLAB 脚本的选项,而不会带来太多麻烦。
有没有例子或简单的场景说明在这种情况下如何进行?
【问题讨论】:
标签: matlab parallel-processing parfor
以下注释假定为 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/
另一种避免依赖 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
【讨论】: