0

在这个 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();

}

4

1 回答 1

1

在由分隔的块内

if(rank == 0){

}

在适当的位置插入该行

work_like_a_slave(argument1, argument2,...)

适当的位置可能在发送消息的循环和接收消息的循环之间,这样主机在从机工作时不会完全空闲。

这是否对性能有可衡量的影响取决于许多因素,您的问题没有提供足够的信息来进行良好的猜测;诸如:有多少个从属设备,因此主设备发送和接收消息的繁忙程度,每个进程与它所做的消息传递相比的工作量

准备好,如果数字对你不利,任何可衡量的影响都是负面的,那就是让主服务器投入服务以实际减慢你的计算速度。

于 2013-05-03T09:30:22.613 回答