如何改进这个程序工作高手也

时间:2013-05-03 08:55:10

标签: mpi master-slave

在这个mpi程序中只能工作从属节点。如何修改它也工作高手。因为主人的工作也提高了系统的性能。

int A,B,C, slaveid,recvid,root, rank,size;

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

/*-------------------------- master ------------------------------*/

if(rank == 0){

    N =10;  

    for(slaveid=1; slaveid<size; slaveid++){

       MPI_Send(&N, 1, MPI_INT, slaveid, 1, MPI_COMM_WORLD);
    }

    for(recvid=1; recvid<size; recvid++){
        MPI_Recv(&A, 1, MPI_INT, recvid, 2, MPI_COMM_WORLD, &status);

    printf(" My id = %d and i send = %d\n",recvid,A);
    }
}

/*-------------------------- Slave ------------------------------*/

if(rank>0){

    MPI_Recv(&B, 1, MPI_INT, 0, 1, MPI_COMM_WORLD, &status);

    C = B*3;

    MPI_Send(&C, 1, MPI_INT, 0, 2, MPI_COMM_WORLD);

}

MPI_Finalize();

}

1 个答案:

答案 0 :(得分:1)

在由

分隔的块内
if(rank == 0){

}

在适当的位置插入

work_like_a_slave(argument1, argument2,...)

适当的位置可能在发送消息的循环和接收消息的循环之间,这样主服务器就不会完全空闲。

这是否会对性能产生可衡量的影响取决于许多因素,您的问题无法提供足够的信息来确定哪个好的猜测;因素包括:有多少个从站,因此主站发送和接收消息的忙碌程度,每个进程与其发送的消息进行了多少工作,

如果数字不利于您,请做好准备,因为任何可衡量的影响都是负面影响,即按下主人服务以实际减慢计算速度。