在串行代码中使用MPI进行并行编程

时间:2016-09-14 08:32:32

标签: parallel-processing

我想并行化部分串行代码,我已经完成了这个

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);

        }
    }
}   

问题在于,随着处理器数量的增加,并行化时间增加。我们怎样解决这个问题?

0 个答案:

没有答案