2013-11-01 49 views
-1

谁能给我解释一下,为什么下面给出一个错误u,但也不是为hPARFOR循环已经错切变量

max_X = 100; 
max_Y = 100; 
h = ones(max_Y,max_X); 
u = zeros(max_Y,max_X); 

parfor l=1:max_X*max_Y 
i = mod(l-1,max_X) + 1; 
j = floor((l-1)/max_Y) + 1; 
    for k=1:9 
    m = i + floor((k-1)/3) - 1; 
    n = j + mod(k,-3) + 1; 
    h_average(k) = sqrt(h(i,j)*h(m,n)); 
    u_average(k) = (u(i,j)*sqrt(h(i,j)) + u(m,n)*sqrt(h(m,n)))/(sqrt(h(i,j)) + sqrt(h(m,n))); 
    end 
end 

我现在可以替代(i,j)(l),但即使我尝试计算我们把它称为p,根据(m,n),并写u(p)而不是u(m,n)它给我一个错误信息。 它只强调了u(m,n),分别。 u(p)但不是h(m,n)。 MATLAB说:

说明: 对于MATLAB有效地执行parfor循环,发送到MATLAB工作人员的数据量必须控制在最小限度。 MATLAB实现这一点的方法之一是通过限制变量在parfor迭代中的索引方式。指示的变量以与parfor不兼容的方式进行索引。 建议的操作 修复索引。有关索引限制的说明,请参见Parallel Computing Toolbox文档中的“切片变量”

任何想法,这里有什么问题?

+0

查看关于切片变量的部分[here](http://blogs.mathworks.com/loren/2009/10/02/using-parfor-loops-getting-up-and-running/#12)。 – chappjc

回答

2

uh的问题在于它们都作为广播变量发送到PARFOR循环。这不是一个错误 - 它只是一个警告,表明发送的数据可能超过了可能需要的数据量。

PARFOR循环无法运行,因为您正在建立索引而不是分割u_averageh_average。由于您每次覆盖了u_averageh_average,因此不清楚此循环要输出什么输出,因此PARFOR循环毫无意义。