What is causing this intermittent error in parfor?

조회 수: 36 (최근 30일)
Chris
Chris 2025년 12월 8일 21:59
편집: Matt J 2025년 12월 9일 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
Chris
Chris 2025년 12월 8일 22:10
Replacing "test(ii,1)=Test(input,ii);" with "test{ii}=Test(input,ii);" also appears to prevent the error from occuring.

댓글을 달려면 로그인하십시오.

채택된 답변

Matt J
Matt J 2025년 12월 9일 0:56
편집: Matt J 2025년 12월 9일 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
Matt J
Matt J 2025년 12월 9일 1:01
편집: Matt J 2025년 12월 9일 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
Chris
Chris 2025년 12월 9일 4:08
Thanks Matt!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

제품


릴리스

R2025b

Community Treasure Hunt

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

Start Hunting!

Translated by