LAM/MPI logo

LAM/MPI General User's Mailing List Archives

  |   Home   |   Download   |   Documentation   |   FAQ   |   all just in this list

From: giuseppa sciortino (sciortinogiusy_at_[hidden])
Date: 2006-12-15 07:50:05


I have this code :

#include "mpi.h"

#include <stdio.h>

#include <stdlib.h>

MPI_Status status;

MPI_Group orig_group, group;

MPI_Comm new_comm,comm_master;

int main(argc,argv)

int argc;

char *argv[];

{

int
colore,chiave,myrank,num_procc,ult_grup,mysize,color,key,new_rank,new_rank2,new_size,*ranks;

int x[3];

int bay,distpun,alber;

int i=0,gruppo,j;

x[0]=0;

x[1]=0;

x[2]=0;

colore=4;

MPI_Init(&argc,&argv);

MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

MPI_Comm_size(MPI_COMM_WORLD, &mysize);

num_procc=mysize/colore;

MPI_Comm_group(MPI_COMM_WORLD, &orig_group);

ranks=(int *)malloc((int)colore*sizeof(int));

for(i=0;i<colore;i++)

ranks[i]=i*num_procc;

MPI_Group_incl(orig_group,colore,ranks,&group);

MPI_Group_rank(group,&new_rank2);

MPI_Comm_create(MPI_COMM_WORLD,group,&comm_master);

if(new_rank2==0)

{

for(i=0;i<3;i++)

x[i]=9999;

}

if(new_rank2!=-32766)

{

MPI_Bcast(&x,3,MPI_INT,0,comm_master);

for(i=0;i<3;i++)

{

printf(" x[%d]= %d ",i,x[i]);

printf("**********rank= %d newrank2= %d *********** \n",myrank,new_rank2);

}

}

MPI_Barrier(MPI_COMM_WORLD);

for(i=0;i<colore;i++)

{

if( (( myrank >= (i*num_procc)) || (myrank >(i*num_procc)) ) &&
(myrank<((i+1)*num_procc)) )

{

color=i+1;

key=myrank-(i*num_procc);

}

if((myrank)>=(colore-1)*num_procc)

{

color=colore;

key=myrank-((colore-1)*num_procc);

}

}

MPI_Comm_split(MPI_COMM_WORLD,color,key,&new_comm);

MPI_Comm_rank(new_comm,&new_rank);

MPI_Comm_size(new_comm,&new_size);

if(new_rank==0)

{

for(i=0;i<3;i++)

x[i]=color+100;

}

MPI_Bcast(&x,3,MPI_INT,0,new_comm);

for(i=0;i<3;i++)

printf(" x[%d]= %d ",i,x[i]);

printf("rank= %d newrank= %d new_size=%d color=%d
\n",myrank,new_rank,new_size,color);

MPI_Finalize();

return 0;

}

When num_procc assuming value=3 then I have error( with mpirun -np 12
name_file.c, or if colore=3 and I execute mpirun -np 9 file_name.c)