【问题标题】:MATLAB Parallel Computing. Parfor: can I use the output inside the loop?MATLAB 并行计算。 Parfor:我可以在循环内使用输出吗?
【发布时间】:2014-12-20 16:35:05
【问题描述】:

我有这个与简单循环配合得很好的示例代码:

for i=1:n
   y = function1(X(1:i-1))
   X(i) = function2(y)
end

我的输出是 X。我知道 parfor 会在每次循环迭代时清除变量。 有人可以帮助我在循环中使用 X 将它与 parfor 并行化吗?有没有办法在每次循环迭代时将输出变量 X 传达给工作人员?谢谢。

【问题讨论】:

    标签: matlab parallel-processing parfor


    【解决方案1】:

    MATLAB 不会在每次迭代中清除所有变量,这背后有一些智能:看下面的parfor 循环:

    parfor k=1:n
        x = function1(a(k));
        y(k) = function2(a(k));
    end
    

    首先,重要的是要知道迭代顺序不是固定的,因此没有执行迭代的顺序。这就是为什么你不知道在这个循环之后x 会有什么价值。所以 MATLAB 决定清除这个变量,以防止可能出现的问题。另一方面,对于y,很明显在循环之后它将具有什么值,所以这将起作用。

    在您的情况下,这意味着您不能在循环外使用y 的值,但您可以使用X。问题是别的:

    X(i) 依赖于X(1:i-1)。这意味着迭代必须按照从 1 到 n 的顺序进行。 parfor 不可能做到这一点。假设您有一个四核 CPU,那么您将有 4 个工作人员。假设迭代 1 到 4 是同时在一个工作人员上开始的。迭代 2 到 4 必须等待迭代 1 完成,然后迭代 3 到 5 将等待 2 完成,依此类推。

    您要么必须继续使用for 循环,要么找到一种方法来更改您的函数,使它们不依赖于以前的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      相关资源
      最近更新 更多