Question about parfor nested loop

Hi,
I have a question about the nested parfor loop. Please see the following codes:
clc
clear
parfor i=1:3
for j=1:3
if j<2
B(i,j)=j;
end
end
end
The result of this code should be B=[1;1;1], but the Matlab gives B=[1,1,1;1,1,1;1,1,1]. I have been confused by this problem for a long time and thank you in advance if you have some time to look into the problem.
Haonan

7 个评论

Ive J
Ive J 2021-1-1
编辑:Ive J 2021-1-1
Well, you may wanna retry, because this is just impossible!
When I test, I get [1;1;1] as you expected.
Thanks for your answer. I have tried many times and via different versions of Matlab, including 2016b and 2019a, but the results are the same [1,1,1;1,1,1;1,1,1], which is not expected. I think it is the issue with parallel programming. Please see the following picture for the Matlab result. Thanks very much.
clc
clear
parfor i=1:3
for j=1:3
if j<2
B(i,j)=j;
end
end
end
B
B = 3×1
1 1 1
Can you also check this?
B = (0);
parfor ii=1:3
for jj=1:3
if jj<2
B(ii,jj)=jj;
end
end
end
disp(size(B))
Thanks Rik. I reran the code on Matlab 2020b and the result was correct, but it was not as expected when I used old versions, e.g, 2016a 2019a. So maybe it is the bug of the old versions.
Thanks Ive. I think the problem may be caused by different versions. When I ran your code on old versions, there was a system error "Index beyond matrix dimension", but it is correct on the lateset version 2020b. So maybe it is the bug of the old versions.

请先登录,再进行评论。

 采纳的回答

Matt J
Matt J 2021-1-2
编辑:Matt J 2021-1-2
So maybe it is the bug of the old versions.
Yes, it appears to be version-related. I get the same thing in R2018a. Regardless, it is not good practice to use parfor to loop over sliced variables whose slices, in this case the B(i,:), are not allocated in advance. This cleaner version, for example, does not have the issue:
clc
clear
B=nan(3); %pre-allocate
parfor i=1:3
for j=1:3
if j<2
B(i,j)=j;
end
end
end

更多回答(0 个)

类别

在 帮助中心 和 File Exchange 中查找有关 Startup and Shutdown 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by