why the caculation results is different for parfor-loop and for-loop?

3 views (last 30 days)
load('matlab.mat')
for i =1:1
b_OLS(i) = X_*y;
end
parfor i =1:1
b_OLS_(i) = X_*y;
end
error = b_OLS_-b_OLS
The results is:
error =
1.8190e-11
why the caculation results is different for parfor-loop and for-loop?

Answers (1)

Matt J
Matt J on 23 Sep 2021
Edited: Matt J on 27 Sep 2021
Probably because, with a parpool active, the matrix multiplication code cannot multithread the operation in precisely the same way. The vectors are split into parallel blocks of one size if a parpool is open and another size if not.
  1 Comment
Edric Ellis
Edric Ellis on 27 Sep 2021
In particular, by default for process-based parpool, the workers run in single-computational-thread mode. This can definitely result in slightly different results compared to multithreaded mode. You can use maxNumCompThreads(1) to put the client in single-computational-thread mode to check. Like this:
A = rand(1,10000);
B = rand(10000,1);
maxNumCompThreads(4);
c1 = A*B;
maxNumCompThreads(1);
c2 = A*B;
c1-c2
ans = -4.5475e-13

Sign in to comment.

Categories

Find more on Parallel Computing Fundamentals in Help Center and File Exchange

Tags

Products


Release

R2018a

Community Treasure Hunt

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

Start Hunting!