将同一节点上运行的进程划分到同一个通信域

来源:互联网 发布:搜狐媒体大厦淘宝地址 编辑:程序博客网 时间:2024/06/08 05:45

在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; }