我想并行化部分串行代码,我已经完成了这个
void Cup::tellMoleculesToMove()
{
fullPosition dfp;
int rank,task,i;
for(list<Molecule*>::iterator mlc = Active_Molecules.begin(); mlc != Active_Molecules.end(); ++mlc)
{
std::vector<Gestalt>::iterator it;
std::vector<Gestalt> *gstV = (*mlc)->getGestalten();
for(it =gstV->begin()+rank*task; it!=gstV->begin()+rank*task+task;it++)
{
// calculate displacement from all the force contributions and perform step
(it)->makeBrownianStep();
MPI_Bcast(&dfp.pos[0],1,MPI_DOUBLE,rank,MPI_COMM_WORLD);
MPI_Bcast(&dfp.pos[1],1,MPI_DOUBLE,rank,MPI_COMM_WORLD);
MPI_Bcast(&dfp.pos[2],1,MPI_DOUBLE,rank,MPI_COMM_WORLD);
MPI_Bcast(&dfp.rot.phi,1,MPI_DOUBLE,rank,MPI_COMM_WORLD);
MPI_Bcast(&dfp.rot.n[0],1,MPI_DOUBLE,rank,MPI_COMM_WORLD);
MPI_Bcast(&dfp.rot.n[1],1,MPI_DOUBLE,rank,MPI_COMM_WORLD);
MPI_Bcast(&dfp.rot.n[2],1,MPI_DOUBLE,rank,MPI_COMM_WORLD);
}
}
}
问题在于,随着处理器数量的增加,并行化时间增加。我们怎样解决这个问题?