2013-05-03 25 views
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(); 

}

回答

1

在由

if(rank == 0){ 

} 

插入件限定,在适当的位置的块,线

work_like_a_slave(argument1, argument2,...) 

适当的位置可能是发送所述环路之间消息和接收消息的循环,以便主站不完全空闲鞭打奴仆。

这是否会对性能产生可衡量的影响取决于许多因素,你的问题未提供在其基础很好的猜测足够的信息;因素如:有多少个奴隶,因此主人发送和接收消息的繁忙程度,每个流程与其发送的消息相比的工作量,

准备,如果数字对你的工作,对于任何可测量的影响是负面的,这是按主成服务于您的计算实际上减慢。

+0

问题是我想只使用MPI函数来实现。不是功能电话。 – Alex 2013-05-03 13:25:55

+0

我不明白你的评论 - 你想使用MPI函数来处理你的主进程? – 2013-05-03 13:56:23

+0

是的。我的意思是某种MPI_Bcast()或其他机制 – Alex 2013-05-03 15:48:35