Matlab并行工具箱:parfor错误

时间:2014-06-22 14:02:33

标签: matlab

我写了一个代码如下

....
index = 1;
parfor mi=initmu:maxmu
    for la1i=initla+1:(maxla-initla)/stepla+1
        ImageD=uint8(GaussPoisonDenoise(Image, mu(mi), la1(la1i), la2(la1i)));
        p = psnr(ImageD, Image0);
        index=index+1;
    end
end
....

但Matlab告诉我“由于使用变量索引的方式,parfor循环无法运行”。那是什么意思?我需要做什么?

2 个答案:

答案 0 :(得分:0)

parfor循环将循环分开,以任意顺序同时运行不同的循环迭代。

问题在于变量" index"在不同的迭代和不同的值上同时增加。

例如,当一个matlab工作者计算迭代mu = 2并且将索引增加3时,另一个是计算迭代mu = 10并且将索引增加1。 在这种情况下,指数的有效价值是多少? (指数+ 3或指数+ 1?)

当循环中的迭代取决于其他迭代的结果时,不能使用parfor。

如果您需要"索引"只计算迭代次数,我想你可以计算它在intmu,maxmu,intla,maxla,stepla上运行。 (但你肯定还有另一个蠢事!)

答案 1 :(得分:0)

只有在要运行的多次迭代之间没有依赖关系时才能使用Parfor。在这种情况下,两次迭代之间存在依赖关系,因此parfor不起作用。