-1

任何人都可以向我解释,为什么以下给出了一个错误,u但也不是h

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 文档中的“切片变量”

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

4

1 回答 1

2

u和的问题h是它们都作为广播变量发送到 PARFOR 循环。这不是一个错误 - 它只是一个警告,表明正在发送比其他方式可能需要的更多数据。

PARFOR 循环无法运行,因为您正在索引而不是切片u_averageh_average. 由于您每次都在覆盖,因此不清楚您希望从该循环中获得什么输出,因此 PARFOR 循环毫无意义u_averageh_average

于 2013-11-01T13:34:13.063 回答