并行工具箱抱怨在MATLAB中没有为函数句柄切片的数组

时间:2013-01-21 17:46:03

标签: matlab parallel-processing

我有这段代码,我想并行运行。传递给包含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这是一个函数,还是我可以组织循环的另一种方式,以便并行运行?

1 个答案:

答案 0 :(得分:1)

首先,这只是一个警告,而不是错误。所以parfor循环应该运行得很好。

其次,关于被索引但没有被切片的东西的警告来自mlint,虽然相当不错,但并不理解所有内容,所以如果它解释错误的话,就不要冒汗了。

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

最后,如果确实存在切片问题,那么它仍然不是阻止循环并行运行的问题 - 所有警告都表明数组完全发送给工作者,这可能会减慢如果数组很大,则parfor循环。