在MPI中,需要将同一个节点上运行的程序划分到同一个通行域中,这样可以使得消息的传递更加快捷和方便,实现代码如下:
#include "mpi.h"
#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc,char ** argv)
{
int rank;
int size;
char myName[100];
int i=0;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
// printf("%d\n",size);
char *allHostName=(char *)malloc(size*sizeof(MPI_CHAR)*100);
gethostname(myName,100);
MPI_Allgather(myName,100,MPI_CHAR,allHostName,100,MPI_CHAR,MPI_COMM_WORLD);
int color,key;
int count=0;
MPI_Comm myWorld,splitWorld;
for(i=0;i<size;i++)
{
if(strcmp(myName,allHostName+100*i)==0)
{
if(count==0)
key=i;
if(i==rank)
{
color=count;
break;
}
count++;
}
}
MPI_Comm_dup(MPI_COMM_WORLD,&myWorld);
MPI_Comm_split(myWorld,color,key,&splitWorld);
MPI_Finalize();
return 0;
}