Indexing error using the 'parfor' command

I am new to parallizing code. I am trying to implement a simple parfor. Each iteration of the loop is independent of all others, which I thought was the only consideration in using parfor. But Matlab is giving me an error saying the the () line has invalid indexing for the density variable. What's interesting is it doesn't have a problem with the line just above it. I tried reading about "Sliced Variables" at Matlab's suggestion, but it didn't get me anywhere. Can anyone give me a pointer here?
Thanks, Dan
PS - I realize there's an error in those lines where I'm overwriting the "cen" index, but that's an independent issue.
len = length(phase);
parfor i = 1:length(data.phasemap)
line = phase(i,:);
if max(line) > 1e-2
cen = round(trapz(xaxis.*line)/trapz(line));
lhs = fliplr(line(1:cen));
rhs = line(cen:length(line));
denlhs = Abel_DanSteve(lhs,data.pixel);
denrhs = Abel_DanSteve(rhs,data.pixel);
density(i,1:cen) = fliplr(denlhs);
density(i,cen:len) = denrhs; %**
else
data.density(i,:) = 0;
end
end

 採用された回答

Edric Ellis
Edric Ellis 2013 年 5 月 4 日

1 投票

When slicing an output variable, PARFOR requires that you always use the same indexing expression. It should work to do:
density(i, :) = [fliplr(denlhs), denrhs];
Or similar. This way, you're always assigning into density the same way.

1 件のコメント

Dan
Dan 2013 年 5 月 6 日
編集済み: Dan 2013 年 5 月 6 日
Thank you Edric. That seemed to fix the problem with output variable indexing. Now, there is a new problem with the loop index. Here is the error:
--------------------------------------------------
Error using parallel_function (line 598)
Subscripted assignment dimension mismatch.
Error in Abel_Shell (line 17)
parfor i = 1:len
--------------------------------------------------
I have changed a couple lines to make things more simple, but it didn't change the problem.
--------------------
len = length(phase(1,:));
parfor i = 1:len
...
---------------------
I have confirmed that i = 3000 when the parfor loop starts. What could this be?
I guess I should post this as a new question. Look for parfor indexing problem.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeParallel for-Loops (parfor) についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by