What is causing this intermittent error in parfor?

36 views (last 30 days)
Chris
Chris on 8 Dec 2025 at 21:59
Edited: Matt J on 9 Dec 2025 at 13:04
The attached script produces an intermittent error:
Increasing n in untitled_script.m appears to increase the likelihood of the error occuring. Replacing parfor with for prevents the error from occuring. Setting n=1 prevents the error from occuring. Replacing "test(ii,1)=Test(input,ii);" with "Test(input,ii);" prevents the error from occuring.
Anyone understand what is going on here?
  1 Comment
Chris
Chris on 8 Dec 2025 at 22:10
Replacing "test(ii,1)=Test(input,ii);" with "test{ii}=Test(input,ii);" also appears to prevent the error from occuring.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 9 Dec 2025 at 0:56
Edited: Matt J on 9 Dec 2025 at 1:04
If you add the indicated line, your class constructor will support no-argument calls, and the error will go away:
function obj = Test(inputArg1,ii)
arguments
inputArg1
ii = 2
end
if ~nargin, return; end %<---- Add this
display(num2str(ii))
obj = obj.method1(inputArg1);
end
This is necessary because the loop variable values ii in a parfor loop will not be visited in in sequential order, meaning that certain elements in the vector test will need to be populated temporarily with argument-free constructor calls.
  2 Comments
Matt J
Matt J on 9 Dec 2025 at 1:01
Edited: Matt J on 9 Dec 2025 at 1:05
Alternattively (and perhaps preferably), pre-allocate the test array,
input.test_field=1;
input.test_field2=1;
n=3;
test(1:n,1)=Test(input); %<--- pre-allocate
parfor ii=1:n
test(ii,1)=Test(input,ii);
end

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Tags

Products


Release

R2025b

Community Treasure Hunt

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

Start Hunting!