parfor loop , how should i use
Info
This question is closed. Reopen it to edit or answer.
Show older comments
Hi,
this is part of my code, it is my frist time to use par for.
the first question, how to fix this error such that The variable Evaluation in a parfor cannot be classified.
second shoud i use parfor loop for eac for loop or that one time as my code?
Thanks in advance.
parfor i=1:iteration
for k=1:swarm_size
zz=1;
for j=1 :centers
[fbest,best]=min(Evaluation);
gbest= swarm(best,:);
new_pos =swarm(k,:);
v(k,zz:zz+1)=v(k,zz:zz+1)+c1*rand*(Pbest(k,zz:zz+1)-swarm(k,zz:zz+1))+c2*rand*(gbest(1,zz:zz+1)-swarm(k,zz:zz+1));
new_pos(1,zz:zz+1)=swarm(k,zz:zz+1)+v(k,zz:zz+1);
zo=1; lo=1;
for Io=1: centers
C3C(:,Io) = f(Invpoints(:,1), new_pos(1,zo),Invpoints(:,2), new_pos(1,zo+1));
zo=zo+2;
end
fnewpos= sum(min(C3C,[],2));
for go=1: centers
C4C(:,go) = f(Invpoints(:,1), swarm(k,lo),Invpoints(:,2), swarm(k,lo+1));
lo=lo+2;
end
fswarm = sum(min(C4C,[],2));
zz=zz+2;
end
end
min(Evaluation)
end
16 Comments
Walter Roberson
on 22 Mar 2019
The variable Evaluation is not changed inside your loop. It is not clear why you do not do the
[fbest, best] = min(Evaluation);
once, before the parfor ?
Walter Roberson
on 22 Mar 2019
It looks to me as if v is plausibly an output variable. You should explicitly initialize it inside for k to make it easier for parfor to figure out that it is intended to be local.
You do not index anything with the variable of your parfor loop. What is your intended output?
Hassan
on 22 Mar 2019
Walter Roberson
on 22 Mar 2019
In what you posted, you do not change Evaluation .
If you were to do
Evalution = min(Evaluation, some_new_value);
then that would generally be permitted, as it is a "min reduction". However to get it to work you might perhaps not be able to test Evaluation.
I am unclear as to whether Evaluation is a scalar or a vector? If it is a vector then it is not obvious what it means for a value to be better than the value in Evaluation ?
Hassan
on 22 Mar 2019
Walter Roberson
on 22 Mar 2019
Since we do not have your actual code, it is difficult to say whether your iterations are independent of each other. Going only by the code you have posted, I suspect your for i loop needs to be serial, as it looks like you are doing iterative pso algorithm work, and for pso each iteration starts from where the previous iteration ended, rather than each iteration being independent of the others.
If I am correct that your for i needs to be serial, then my suspicion is that using parfor for your k loop (swarm size) will require more communications overhead than you gain in efficiency by having the swarm members processed in parallel. If you are doing pso, then you would be better off vectorizing the work on the smarm members.
Hassan
on 23 Mar 2019
Walter Roberson
on 23 Mar 2019
If the above were your actual code, then I would optimize it by replacing
parfor i=1:iteration
.... bunch of code
end
with
... bunch of code, done only once, with no parfor loop.
Hassan
on 23 Mar 2019
Walter Roberson
on 23 Mar 2019
Why are you not simply using particleswarm() ?
Hassan
on 24 Mar 2019
Walter Roberson
on 24 Mar 2019
Was using parfor given as part of the project definition?
Hassan
on 25 Mar 2019
Walter Roberson
on 25 Mar 2019
That is an assumption not a requirement .
Your code is difficult to understand, but when I looked at it earlier, it looked to me that it was likely that using parfor will slow you down rather than improving performance.
What range of values do you expect for swarm_size ?
Hassan
on 25 Mar 2019
Walter Roberson
on 25 Mar 2019
I am not sure what Dimensions corresponds to in your code?
What kind of value does centers have?
Your code appears to run j=1:centers and within that loop runs for Io = 1:centers, and also for go=1:centers . That suggests a run time on the order of swarm_size * centers^2 -- or possibly more as it is not clear whether f is a function or a 4D array being indexed.
Your code would really benefit from comments; it is difficult to understand what you are doing and why.
Answers (0)
This question is closed.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!