將同一節點上執行的程序劃分到同一個通訊域
阿新 • • 發佈:2019-02-08
在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; }