MATLAB:parfor错误

时间:2017-07-25 18:01:37

标签: matlab for-loop iteration parfor

我有以下MATLAB代码,我想使用parfor来运行它:

max = -1;
for i = 1:10
    for j = (i+1):10
       X = my_function(i, j);
       if (X > max)
           max = X;
       end
    end
end
disp(max)

我想改变第一个为parfor。我阅读了几个教程和文档,但我不知道如何使用parfor获得相同的结果。

我知道在for j = (i+1):10中使用i时存在一些问题。

我很感激任何建议。

1 个答案:

答案 0 :(得分:2)

can not use parfor for dependent iterations,即在您的情况下max是您的循环迭代之间的依赖(共享)变量:

  

当循环中的迭代依赖时,不能使用parfor循环   其他迭代的结果。每次迭代必须独立于   所有其他人。

这也反映在显示的警告信息中:

  

警告:临时变量max将在开头清除   parfor循环的每次迭代。之前分配给它的任何值   循环将丢失。如果在max中分配之前使用maxX = -1; for i = 1:10 for j = (i+1):10 maxX = max(maxX, my_function(i, j)); end end disp(maxX)   parfor循环,将发生运行时错误。请参阅并行循环   MATLAB,"临时变量"。

MATLAB实现one exception to this rule,即Reduction Variables

  

此规则的例外情况是   使用Reduction Variables在循环中累积值。

因此,您可以重写代码以使用缩减变量:

select program, event
from OMEGA.HP
inner join POM.GT
on program = substring(name,7,4)
where LENGTH(name)= 25