【问题标题】:Slicing Variable in Parfor loopParfor 循环中的切片变量
【发布时间】:2014-12-10 09:38:52
【问题描述】:

您好,我想使用 PARFOR 运行如下代码。 当我尝试时,它说:

“A_x”和“A_y”的有效索引在 PARFOR 循环中受到限制。 说明为了让 MATLAB 有效地执行 parfor 循环, 发送给 MATLAB 工作人员的数据量必须最少。中的一个 MATLAB 实现这一点的方法是通过限制变量的方式 在 parfor 迭代中索引。指示的变量在 与 parfor 不兼容的方式。建议的操作

修复索引。有关索引限制的说明,请参阅 >Parallel Computing Toolbox 文档中的“切片变量”:

 N=eveninteger;
 H=zeros(N);
 V=zeros(N);
 A_x=zeros(N);
 A_y=zeros(N);
    parfor i=1:N;
      for j=1:N;
        if H(i,j)==-2;
          t=0.3;
          As_x=t*(j-i)/a;
          As_y=t*(j-i)/a;


       elseif H(i,j)==-3;
           t=0.8;
          As_x=t*(j-i)/(a*sqrt3);
          As_y=t*(j-i)/(a*sqrt3);

      elseif i==j

               As_x=i;
               As_y=i;
      else
          t=0;
          As_x=0;
          As_y=0;

        end
      for p=1:N/2
        for q=N/2+1:N

             A_x(p,q)=A_x(p,q)+As_x*(V(i,p)*V(j,q));
             A_y(p,q)=A_y(p,q)+As_y*(V(i,p)*V(j,q));


        end
      end
end

结束

我找不到解决方案。你能给我一个解决方案吗。 提前致谢。 埃里科

【问题讨论】:

  • 您的代码不完整,至少缺少一个“结尾”。请正确缩进你的代码,在编辑器中使用 rightlick->“Smart Indent”。
  • 从未尝试过,但是在parfor 循环中嵌套了一堆for 循环似乎很尴尬。而且其中一些(嵌套的for 循环)似乎可以被矢量化表达式替换。

标签: matlab


【解决方案1】:

您似乎正在尝试使用+A_xA_y 执行“缩减”。您可以通过执行以下操作来解决此问题:

parfor i = 1:N
  A_x_tmp = zeros(N);
  A_y_tmp = zeros(N);
  for p=1:N/2
    for q=N/2+1:N
      A_x_tmp(p,q) = A_x_tmp(p,q) + ...
      A_y_tmp(p,q) = A_y_tmp(p,q) + ...
    end
  end
  A_x = A_x + A_x_tmp;
  A_y = A_y + A_y_tmp;
end

这样,PARFOR 将了解 A_xA_y 上的归约操作。

【讨论】:

    猜你喜欢
    • 2016-09-12
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多