5 views (last 30 days)

Hey, I am very new to the parallel computing and i got some trouble.

So basicly i have so example code very similar to this one:

a = (normrnd(1,1,[100000,1]))+5;

i=0;

while i<=10000

for j=1:length(a)

a(j)=a(j)+1/a(j);

end

i=i+1;

end

Inside the nested for loop are many more alculations which takes a huge amount of time, so i basically want to cut a into as much pieces as i have physical cores, so in this case 4 *20000 and then do the same calculations of thos 20000 arrays parrallel.

But I direclty get some error cause i cannot use my input variable from outside the parfor loop because of classification (Code without the outside while loop)

parfor i=1:cores

v=d(:,i);

v=v(v>0);

lim=size(v,1);

for j=1:lim

v(j)=v(j)+1/v(j);

end

d(1:length(v),i)=v;

end

Shouldnt my input d (20000x4 array) not work as an broadcast variable as defined in https://de.mathworks.com/help/parallel-computing/troubleshoot-variables-in-parfor-loops.html ?

Or am I missanderstanding something very basic in parallel computing?

Many thanks in advance

Best regards

Daniel M
on 9 Nov 2019

Walter Roberson
on 10 Nov 2019

If so then,

parfor i=1:cores

v=d(:,i);

vc = v;

v=v(v>0);

v = v + 1./v; %optimized out loop

vc(1:length(v)) = v;

d(:,i)=v;

end

Note that if your non-zeros are not consecutive that this can result in entries that were 0 being populated. [1 2 0 3] would be replaced with [1+1/1, 2+1/2, 3+1/3, 3] for example. It is not obvious that is what you would want.

Opportunities for recent engineering grads.

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

Start Hunting!
## 0 Comments

Sign in to comment.