【问题标题】:Run a script that uses multiple MATLAB sessions运行使用多个 MATLAB 会话的脚本
【发布时间】:2013-08-13 08:53:28
【问题描述】:

如何在多个 MATLAB 会话中自动调用具有简单输入的函数?

手动的方法是:

  • 打开三个会话
  • 调用magic(t),其中t分别为1、2或3

所以,我的问题是:如何以编程方式完成这一切?

如果相关,我不想使用并行处理工具箱。


请注意,我不认为 parfor 循环可以做我想做的事。首先,这需要并行处理工具箱,其次,我希望能够在其中一个操作失败时立即进行调试,而不会打扰其他会话。

【问题讨论】:

    标签: matlab parallel-processing


    【解决方案1】:

    首先必须找到以编程方式打开会话的方法。 基于thisthis 发现您可以执行以下操作(也适用于Windows):

    % Opening 3 matlab sessions
    for t = 1:3
    !matlab &
    end
    

    除了简单的打开之外,还可以给出一个简单的命令

    !matlab -r "magic(5)" &
    

    现在,要最终结合这个,只剩下一个小技巧:

    for t = 1:3
       str = ['!matlab -r "magic(' num2str(t) ')" &'];
       eval(str)
    end
    

    请注意,如果您想使用更复杂的输入,您可以简单地将它们保存在一个结构中,并通过使用包装脚本作为被调用函数来使用此索引调用它们。

    【讨论】:

    • 请注意,单独的 MATLAB 许可证允许您在该许可证下最多同时打开两个 MATLAB 实例。因此,除非您可以访问并发许可证(在这种情况下,上面启动的每个实例都会签出一个许可证,其成本远高于 Parallel Computing Toolbox 的副本),否则上述内容将违反许可协议。跨度>
    • @SamRoberts 虽然一开始我没有想到这一点,但在阅读了我们的许可协议后,我似乎并没有违反它。此外,虽然我还没有找到个人许可证,但我记得它限制了用户/计算机的数量。不过不确定会话。
    • 实际上,在重新阅读许可证时,我认为您可能是对的。它似乎只限制同时最多两个 计算机,而不是像我想象的那样同时限制两个 MATLAB 实例。我撤回了我的评论——尽管读者仍然应该意识到他们应该考虑你建议做的任何潜在的许可影响,而且我们都不是律师(除非你是:)
    【解决方案2】:

    您可以尝试 Multicore,它使用多个 Matlab 实例来完成 parfor 所做的事情,方法是通过公共目录传递信息。如果您可以重写代码循环以调用返回值的函数,那么 Multicore 可能会满足您的需求。

    http://www.mathworks.com/matlabcentral/fileexchange/13775-multicore-parallel-processing-on-multiple-cores

    【讨论】:

    • 实际上这并没有使用多个会话,但在其他情况下它可能对我仍然有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多