On Jan 5, 2011, at 10:36 AM, Bernard Secher - SFME/LGLS wrote:

> MPI_Comm remoteConnect(int myrank, int *srv, char *port_name, char* service)
> {
>   int clt=0;
>   MPI_Request request; /* requete pour communication non bloquante */
>   MPI_Comm gcom;
>   MPI_Status status; 
>   char   port_name_clt[MPI_MAX_PORT_NAME]; 
> 
>   if( service == NULL ) service = defaultService;
> 
>   /* only process of rank null can publish name */
>   MPI_Barrier(MPI_COMM_WORLD);
> 
>   /* A lookup for an unpublished service generate an error */
>   MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
>   if( myrank == 0 ){
>     /* Try to be a server. If there service is already published, try to be a 
> cient */
>     MPI_Open_port(MPI_INFO_NULL, port_name); 
>     printf("[%d] Publish name\n",myrank);
>     if ( MPI_Publish_name(service, MPI_INFO_NULL, port_name) == MPI_SUCCESS ) 
>  {
>       *srv = 1;
>       printf("[%d] service %s available at %s\n",myrank,service,port_name);
>     }
>     else if ( MPI_Lookup_name(service, MPI_INFO_NULL, port_name_clt) == 
> MPI_SUCCESS ){
>       MPI_Close_port( port_name ); 
>       clt = 1;
>     }
>     else
>       /* Throw exception */
>       printf("[%d] Error\n",myrank);
>   }
>   else{
>     /* Waiting rank 0 publish name */
>     sleep(1);
>     printf("[%d] Lookup name\n",myrank);
>     if ( MPI_Lookup_name(service, MPI_INFO_NULL, port_name_clt) == 
> MPI_SUCCESS ){
>       clt = 1;
>     }
>     else
>       /* Throw exception */
>       ;
>   }
>   MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_ARE_FATAL);
>   
>   MPI_Bcast(srv,1,MPI_INT,0,MPI_COMM_WORLD);

You're broadcasting srv here -- won't everyone now have *srv==1, such that they 
all call MPI_COMM_ACCEPT, below?

>   if ( *srv )
>     /* I am the Master */
>     MPI_Comm_accept( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD, &gcom );
>   else{
>     /*  Connect to service SERVER, get the inter-communicator server*/
>     MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_RETURN);
>     if ( MPI_Comm_connect(port_name_clt, MPI_INFO_NULL, 0, MPI_COMM_WORLD, 
> &gcom )  == MPI_SUCCESS )
>       printf("[%d] I get the connection with %s at %s !\n",myrank, service, 
> port_name_clt);
>     MPI_Errhandler_set(MPI_COMM_WORLD, MPI_ERRORS_ARE_FATAL);
>   }
> 
>   if(myrank != 0) *srv = 0;
> 
>   return gcom;
> 
> }
> 
> 
> 
> 
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users


-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/


Reply via email to