如何使用双索引获取输出变量以使用parfor?

时间:2013-04-21 11:28:54

标签: matlab parallel-processing

我正在使用Matlab进行一段时间的研究,并希望了解有关并行计算的更多信息。 Parfor似乎是一种非常有用的技术。我无法使用以下代码:

resultsOfRW = ones(100,N);

parfor i= 1:100

   RWs{i} = A; %I want to modify A in every iteration

   j = 1;
   S = 2; %just something larger than 1

   while j <= N && S > 1
        RWs{i} = DoSomethingRandomly(RWs{i}); % Make some (stochastic) change to RWs{i}
        S = GetSomeResultFrom(RWs{i});

        resultOfRW(i,j) = S; %This is invalid

        j = j+1;
   end
end

现在,我知道它与索引j有关,索引j对切片变量无效。但我不明白为什么,因为并行运行它是完全有效的。

除了原因,我怎么能实现这个并行运行呢?

1 个答案:

答案 0 :(得分:2)

M-lint会显示以下错误:

  

修复索引。有关索引限制的说明,请参阅   并行计算工具箱文档中的“Sliced Variables”

具体而言,未满足以下要求:

  

索引形式 - 在变量的索引列表中,只有一个索引涉及循环变量。

解决此问题的一种方法是使用临时数组:

parfor i=1:1000
    %# ...

    tmp = ones(1,N);
    while j <= N && S > 1
        %# ...

        tmp(j) = S;
        j = j+1;
    end
    resultsOfRW(i,:) = tmp;
end