Parfor and symmetric matrix

1 Ansicht (letzte 30 Tage)
Maria
Maria am 12 Aug. 2021
Bearbeitet: Matt J am 13 Aug. 2021
Hi,
I need to fill in a matrix. Since it is symmetrical, the two for loops look like this
for i = 1 : m
for j = i : n
operation on the matrix ....
end
end
The other elements of the matrix are filled in by using "permute" (it is a 3D matrix).
I am now modifying the code to make it parallelizable. I tried with the parfor like this
parfor i = 1 : m
for j = i : n
operation on the matrix ....
end
end
At running time, I get the error because matlab does not know the value of "i". I guess this is because the two "for" are not independent.
My question is:
  • is there a way to fill in a symmetric matrix by exploiting the symmetry, and using the parfor? Or shall I ignore the symmetry, have the second "for" starting from 1, and getting rid of "permute" ?

Antworten (1)

Matt J
Matt J am 12 Aug. 2021
Bearbeitet: Matt J am 12 Aug. 2021
[I,J]=ndgrid(1:m,1:n);
keep=J>=I;
I=I(keep);
J=J(keep);
parfor k=1:numel(I)
i=I(k);
j=J(k);
operation on the matrix ....
end
  4 Kommentare
Matt J
Matt J am 13 Aug. 2021
Bearbeitet: Matt J am 13 Aug. 2021
Here's one possible fix.
temp = zeros(m,n);
H=0;
parfor k=1:numel(I)
dH=temp;
i=I(k);
j=J(k);
dH(i,j) = 3;
H=H+dH;
end
Matt J
Matt J am 13 Aug. 2021
Bearbeitet: Matt J am 13 Aug. 2021
Another possible fix (probably better):
temp = zeros(size(I));
H=0;
parfor k=1:numel(I)
temp(k)=3;
end
idx=sub2ind([m,n],I,J);
H(idx)=temp(:);

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Parallel for-Loops (parfor) finden Sie in Help Center und File Exchange

Tags

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by