MPI_Comm_join - Connect two MPI processed joined by a socket
#include <mpi.h> int MPI_Comm_join(int fd, MPI_Comm *newcomm)
fd - socket file descriptor
newcomm - intercommunicator with client as remote group
This function only works between two LAM/MPI processes that are connected by a socket. They either must have the same endian orientation, or not have used the homogeneous flag to mpirun (1) (-O). Both processes must be in a single LAM universe -- they must share LAM daemons that are already connected to each other. That is, they were either initially lamboot(1)ed together, or a lamgrow(1) command was given to grow an initial LAM universe such that the resulting set includes the two hosts in question. The socket may not be used by the calling application until MPI_Comm_join has completed. When MPI_Comm_join completes, fd may be used by the calling application. Per MPI-2, the socket is only used for initial handshaking -- it will not be used as the communications channel between the newly connected processes.
The following code shows an abbreviated example using MPI_Comm_join since no example is provided in the MPI-2 standard. Note that only one rank in each MPI application should call this function since each socket can only have two endpoints (i.e., an endpoint in each process). Upon successful completion, the intercommunicator that is returned will have two members -- the local process and the remote process. MPI_Comm do_join(char* server_name, int port) { int sfd, fd = -1; unsigned char addr[4]; MPI_Comm intercomm; if (server_name != NULL) { if (getinetaddr(server_name, &addr) == 0) fd = open_socket_to_server(addr, port); } else { if ((sfd = open_listening_socket(&port)) >= 0) { fd = accept_client_socket(sfd, -1); close(sfd); } } if (fd < 0) MPI_Abort(MPI_COMM_WORLD, 0); MPI_Comm_join(fd, &intercomm); return intercomm; } IMPI standard only supports MPI-1 functions. Hence, this function is currently not designed to operate within an IMPI job.. MPI_ERR_INTERN - An internal error has been detected. This is fatal. Please send a bug report to the LAM mailing list (see- mpi.org/contact.php ). MPI_ERR_OTHER - Other error; use MPI_Error_string to get more information about this error code.
lamboot(1), lamgrow(1), mpirun(1), MPI_Finalize(3)
For more information, please see the official MPI Forum web site, which contains the text of both the MPI-1 and MPI-2 standards. These documents contain detailed information about each MPI function (most of which is not duplicated in these man pages).
join.c