1

並行して実行したいこのコードがあります。parforループを含む関数に渡される引数の1つは、parforループ内で実行される関数ハンドルです。このような

[X] = randstep( X,params,roomfun )
  ...
  parfor i=1:N
    while ~ok
      X(:,i) = A*X(:,i);
      if roomfun(X(:,i))
        ok = 1;
      end
    end
  end

ただし、MATLABはroomfunについて不平を言い、インデックスは付けられているがスライスされていないという。もちろん、他のループを繰り返さなくても正常に実行できる関数であるため、これは当てはまりません。

これが関数であるとmatlabに伝える方法はありますか、それともこれを並行して実行するためにループを編成する別の方法はありますか?

4

1 に答える 1

1

まず、これは単なる警告であり、エラーではありません。したがって、parforループは問題なく実行されるはずです。

第二に、何かがインデックス化されているがスライスされていないという警告は mlint から来ています。mlint は非常に優れていますが、すべてを理解しているわけではないため、何か間違ったことを解釈したとしても、気にしないでください。

第 3 に、R2012b では、警告さえも表示されなくなりました (mlint がよりスマートになりました)。これは、心配する必要がないことをさらに示しています。

parfor最後に、実際にスライシングの問題があったとしても、ループの並列実行を妨げる問題ではありません。すべての警告は、配列全体がワーカーに送信されることを示しており、場合によってはループが遅くなる可能性があります。配列が大きい。

于 2013-01-21T19:12:49.020 に答える