1

我有这段代码,我想并行运行。传递给包含 parfor 循环的函数的参数之一是函数句柄,然后在 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,虽然非常好,但并不理解所有内容,因此如果它解释错误,请不要担心。

第三,在 R2012b 中,我什至不再收到警告(mlint 变得更聪明了),这进一步表明没有什么可担心的。

最后,如果确实存在切片问题,它仍然不是会阻止循环并行运行的问题 - 所有警告都说数组被完整发送给工作人员,这可能会减慢parfor循环速度以防万一数组很大。

于 2013-01-21T19:12:49.020 回答