我如何 运行 并行执行 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
我正在寻找 运行 我并行使用的 MATLAB 脚本的选项,没有太多麻烦。
是否有关于如何在这种情况下进行的示例或简单场景?
Note below MacOSX/Linux are assumed. But
parallel
will work inside envs likemsys
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