[mpich-discuss] Client - server programs on Windows

Thierry Roudier thierry.roudier at kiastek.com
Wed Aug 17 14:14:21 CDT 2011


Hi,

I try to connect 2 programs together using MPICH2 v1.4 between 2 Windows 
7 64-bit computers.
I tested various configurations without success. Below is the last 
config I tried:

- Windows 1: Server
 From a command prompt I set the following variables, and ran the server:
set PMI_ROOT_HOST=windows_1
set PMI_KVS=mpich2
set PMI_ROOT_LOCAL=1
set PMI_ROOT_PORT=9222
set PMI_SIZE=2
set PMI_RANK=0
Here is the C code for the server:
#include <stdio.h>
#include <mpi.h>
int main(int nArgc, char ** sArgv)
{
     int nMyRank = 0;
     MPI_Comm mInterComm;
     int nRet;

     char sPortName[MPI_MAX_PORT_NAME];

     nRet = MPI_Init(&nArgc, &sArgv);
     printf("Init - nRet: %d\n", nRet);
     fflush(stdout);
     nRet = MPI_Comm_rank(MPI_COMM_WORLD, &nMyRank);
     printf("Comm_rank - nRet: %d - MyRank: %d\n", nRet, nMyRank);
     fflush(stdout);

     nRet = MPI_Open_port(MPI_INFO_NULL, sPortName);
     printf("Open_port - nRet: %d - Port name: -%s-\n", nRet, sPortName);
     fflush(stdout);

     nRet = MPI_Comm_accept(sPortName, MPI_INFO_NULL, 0, MPI_COMM_WORLD, 
&mInterComm);
     printf("Comm_accept - nRet: %d\n", nRet);
     fflush(stdout);

     MPI_Comm_disconnect(&mInterComm);
     MPI_Finalize();

     return 0;
}


- Windows 2: Client (on a command prompt on the second computer)
set PMI_ROOT_HOST=windows_1
set PMI_KVS=mpich2
set PMI_ROOT_LOCAL=0
set PMI_ROOT_PORT=9222
set PMI_SIZE=2
set PMI_RANK=1
Here is the C code for the client:
#include <stdio.h>
#include <mpi.h>
int main(int nArgc, char ** sArgv)
{
     int nMyRank;
     MPI_Comm mInterComm;
     int nRet;

     char sPortName[MPI_MAX_PORT_NAME];
     char sPortNumber[MPI_MAX_PORT_NAME];

     nRet = MPI_Init(&nArgc, &sArgv);
     printf("Init - nRet: %d\n", nRet);
     fflush(stdout);
     nRet = MPI_Comm_rank(MPI_COMM_WORLD, &nMyRank);
     printf("Comm_rank - nRet: %d - MyRank: %d\n", nRet, nMyRank);
     fflush(stdout);

     printf("Enter the port number: ");
     fflush(stdout);
     gets(sPortNumber);
     sprintf(sPortName, "tag=0 description=windows_1 port=%s 
ifname=192.168.1.101 ", sPortNumber);

     printf("Connecting to: -%s-\n", sPortName);
     fflush(stdout);
     nRet = MPI_Comm_connect(sPortName, MPI_INFO_NULL, 0, 
MPI_COMM_WORLD, &mInterComm);
     printf("Comm_connect - nRet: %d\n", nRet);
     fflush(stdout);

     MPI_Comm_disconnect(&mInterComm);
     MPI_Finalize();

     return 0;
}

I don't use mpiexec. I directly start the programs on each computer from 
the command prompts. And the smpd services are stopped.
Note: I also checked without fixing the variables above, and with a 
mpiexec command (smpd(s) running). It doesn't work. Same problem as 
described below.

The issue I encountered is the following: The server initializes, wait 
in the MPI_Init function until the client starts. Once the client 
initialized, both programs get their respective rank 0 (server) and 1 
(client). The server opens the port and displays the info. I enter the 
port number in the client program. And both waits. The connection is 
never established. The server waits in MPI_Comm_accept and the client 
waits in MPI_Comm_connect.

Note: I didn't set a domain name on my machines. I only set a unique 
workgroup name.

Any help would be really appreciated.

Regards,

Thierry

-- 
===================================================
Thierry Roudier
KiasTek SAS
E-mail: thierry.roudier at kiastek.com
===================================================



More information about the mpich-discuss mailing list