我正在使用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对切片变量无效。但我不明白为什么,因为并行运行它是完全有效的。
除了原因,我怎么能实现这个并行运行呢?
答案 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