【问题标题】:Can I run a script on multiple MATLAB sessions instead of parallelizing the script?我可以在多个 MATLAB 会话上运行脚本而不是并行化脚本吗?
【发布时间】:2013-03-29 13:43:21
【问题描述】:

我有一个脚本,它可以为 for 循环中的许多参数求解微分方程组。 (迭代是完全独立的,但在每次迭代结束时,都会根据计算结果修改一个大矩阵(mat))。下面是代码:(B是一个包含参数的矩阵)

   mat=zeros(20000,1);

   for n=1:20000         


         prop=B(n,:); % B is a (20000 * 2 ) matrix  that contains U and V parameters
         U=prop(1);
         V=prop(2);


         options=odeset('RelTol',1e-6,'AbsTol',1e-20);
         [T,X]=ode45(@acceleration,tspan,x0,options);

         rad=X(:,1);
         if max(rad)<radius   % radius is a constant
        mat(n)=1;

      end

      function xprime=acceleration(T,X)
      .
      .
      .
      end

首先我尝试使用parfor,但是因为加速函数(ode45输入)被定义为内联函数,(为了获得更好的性能)我不能这样做。

我可以打开 4 个 MATLAB 会话(我的 CPU 有 4 个内核)并在每个会话中单独运行代码,而不是修改代码以将加速作为单独的函数来实现,因此,使用 parfor?它的性能是在一个会话上运行的 4 倍吗? (或者它是否提供与并行代码相同的性能?-在并行代码中我无法定义内联函数-) (在 Windows 上)

【问题讨论】:

    标签: matlab optimization parallel-processing parfor


    【解决方案1】:

    如果您已准备好将问题分离出来以在 4 个会话中单独运行,然后重新组合结果,那么您肯定可以做到。根据我的经验(在 Windows 上),在四个单独的会话中运行代码实际上比使用 4 个工作人员的 parfor 循环运行得更快。不如单个会话的 4 倍性能快,因为操作系统还有其他工作要做……例如,如果您没有运行其他需要大量处理器的应用程序,则操作系统本身可能会占用一个内核的 25% ,为您提供单次会话的 3.75 倍性能。但是,这假设您有足够的内存,这不是限制因素。

    如果您想定期执行此操作,您可能需要创建一些基于文件的信号/数据传递系统。

    这显然不如parfor 优雅,但适合您的情况,或者如果您负担不起并行工具箱的许可费。

    【讨论】:

    • 虽然您在技术上可能能够按照@pancake 的建议进行操作,但单独的 MATLAB 许可证允许您同时启动最多两个 MATLAB 实例。如果您有一个并发许可证,您可以签出尽可能多的许可证。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2017-01-07
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多