MATLAB并行计算。 Parfor:我可以在循环中使用输出吗?

时间:2014-12-20 01:40:58

标签: matlab parallel-processing parfor

我有一个适用于简单循环的示例代码:

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

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

1 个答案:

答案 0 :(得分:2)

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循环,要么找到更改功能的方法,以便他们不依赖于之前的值。