程序 下面是使用任意源和任意标识的例子程序
#include "mpi.h"
#include <stdio.h>
int main(argc, argv)
int argc;
char **argv;
{
int rank, size, i, buf[1];
MPI_Status status;
MPI_Init( &argc, &argv );/*初始化*/
MPI_Comm_rank( MPI_COMM_WORLD, &rank );/*进程号*/
MPI_Comm_size( MPI_COMM_WORLD, &size );/*总的进程个数*/
if (rank == 0) {
for (i=0; i<100*(size-1); i++) {
MPI_Recv( buf, 1, MPI_INT, MPI_ANY_SOURCE,
MPI_ANY_TAG, MPI_COMM_WORLD, &status );/*使用任意源和任意标识接收*/
printf( "Msg=%d from %d with tag %d\n",
buf[0], status.MPI_SOURCE, status.MPI_TAG );
}
}
else {
for (i=0; i<100; i++) {
buf[0]=rank+i;
MPI_Send( buf, 1, MPI_INT, 0, i, MPI_COMM_WORLD );/*发送*/
}
}
MPI_Finalize();/*结束*/
}
讲解:
在接收操作中,通过使用任意源和任意tag标识,使得该接收操作可以接收任何进程以任何标识发送给本进程的数据,但是该消息的数据类型必须和接收操作的数据类型相一致。
这里给出了一个使用任意源和任意标识的例子。其中ROOT进程(进程0)接收来自其它所有进程的消息,然后将各消息的内容,消息来源和消息标识打印出来。

各进程向ROOT进程发送消息