我有下面的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实现max的相同结果。
我知道在for j = (i+1):10中使用i有一些问题。
如有任何建议,我将不胜感激。
发布于 2017-07-25 19:51:35
您的对于依赖迭代,即在您的例子中,max是循环迭代之间的一个相依(共享)变量:
当循环中的迭代取决于其他迭代的结果时,不能使用parfor-循环。每个迭代必须独立于所有其他迭代。
这也反映在显示的警告消息中:
警告:临时变量
max将在parfor循环的每次迭代开始时清除。在循环之前分配给它的任何值都将丢失。如果在parfor循环中分配max之前使用它,则会发生运行时错误。参见MATLAB中的并行循环,“临时变量”。
此规则的例外情况是使用约简变量在循环中累积值。
因此,您可以重写代码以使用约简变量:
maxX = -1;
for i = 1:10
for j = (i+1):10
maxX = max(maxX, my_function(i, j));
end
end
disp(maxX)https://stackoverflow.com/questions/45310588
复制相似问题