我有以下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时存在一些问题。
我很感激任何建议。
答案 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