# Why is my parfor loop running slower than a regular for loop

1 visualizzazione (ultimi 30 giorni)
tiwwexx il 19 Dic 2023
Risposto: Christine Tobler il 19 Dic 2023
Hello all, I have a 3D array that takes an SVD of the first two dimensions for the size of the 3rd dimension. This seems like it would be extreemly parallelizable to me so I tried to run it in a parfor loop but for some reason the computation is like 10x slower running the parfor vs the standard for loop. Any help will be much appriciated!!
im_vec = rand(4,4,1000);
U = zeros(size(im_vec,1),size(im_vec,1),size(im_vec,3));
sig = zeros(size(im_vec));
V = zeros(size(im_vec,2),size(im_vec,2),size(im_vec,3));
%%% For loop time %%%
tic
for n = 1:size(im_vec,3)
[U(:,:,n), sig(:,:,n),V(:,:,n)] = svd(im_vec(:,:,n));
end
toc
%%% Parfor loop time %%%
p = gcp('nocreate');
if isempty(p)
parpool;
end
tic
parfor n = 1:size(im_vec,3)
[U(:,:,n), sig(:,:,n),V(:,:,n)] = svd(im_vec(:,:,n));
end
toc
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Walter Roberson il 19 Dic 2023
On my system, if I expand the work by a factor of 100, then the regular for loop takes about 0.58 seconds and the parfor loop takes about 0.22 seconds the first time (and about 0.15 seconds after that.)

Accedi per commentare.

### Risposte (1)

Christine Tobler il 19 Dic 2023
The problem is likely that the cost of each iteration is still too small to warrant the start-up time of the parfor loop.
You could take a look at the pagesvd function, which applies the SVD to each page A(:, :, i) of the input array, just like what you're doing here. It uses threading on a lower level when the size of the array means we expect the threading to be worthwhile.
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

R2023b

### Community Treasure Hunt

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

Start Hunting!

Translated by