【问题标题】:How do I run MATLAB scripts in parallel (i.e. on multiple cores and without using parfor)?如何并行运行 MATLAB 脚本(即在多个内核上且不使用 parfor)?
【发布时间】:2015-07-31 20:48:08
【问题描述】:

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

有没有例子或简单的场景说明在这种情况下如何进行?

【问题讨论】:

    标签: matlab parallel-processing parfor


    【解决方案1】:

    以下注释假定为 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

    【讨论】:

    • 我冒昧地重新格式化了您的帖子。您所说的很好,但是如果格式正确并且语法已修复,那就更好了……现在就是这种情况。如果您同意修改,请告诉我。
    • 也许您可以明确说明哪些操作系统支持这些命令行参数。
    • @CarlWitthoft - 从命令来看,它要么是 Mac OS 要么是 Linux……但不能确定。
    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多