Hi all,
For the following code I want to stop early completing processes and wait for the others at the point with (world.barrier)(); statement.
But the problem is stop- and stop+ do interleave. Am I doing something wrong with the synchronization, or there is something wrong with my code?
if (world.rank() == MASTER){
m_mySize = n / world.size() + n % world.size();
w_mySize = n / world.size();
for(int p = 1; p < world.size(); p++){
world.send(p, 1, w_mySize);
world.send(p, 2, n);
}
relMyValues = new possibleClause[w_mySize];
scatter(world, pC, relMyValues, w_mySize, 0);
}
else{
world.recv(0, 1, w_mySize);
relMyValues = new possibleClause[w_mySize];
scatter(world, pC, relMyValues, w_mySize, 0);
}
for(i = 0; i < w_mySize; i++){
//do something
}
cout << world.rank() << " stop - " << world.rank() << endl;
(world.barrier)();
cout << world.rank() << " stop + " << world.rank() << endl;
if (world.rank() == MASTER){
relAllValues = new possibleClause[n - n % world.size()];
gather(world, relMyValues, w_mySize, relAllValues, 0);
}
else{
world.recv(0, 2, n);
gather(world, relMyValues, w_mySize, relAllValues, 0);
}