在这个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();
}
答案 0 :(得分:1)
在由
分隔的块内if(rank == 0){
}
在适当的位置插入
行work_like_a_slave(argument1, argument2,...)
适当的位置可能在发送消息的循环和接收消息的循环之间,这样主服务器就不会完全空闲。
这是否会对性能产生可衡量的影响取决于许多因素,您的问题无法提供足够的信息来确定哪个好的猜测;因素包括:有多少个从站,因此主站发送和接收消息的忙碌程度,每个进程与其发送的消息进行了多少工作,等。
如果数字不利于您,请做好准备,因为任何可衡量的影响都是负面影响,即按下主人服务以实际减慢计算速度。