Hi there,

I am trying to create a client/server application with OpenMPI, which has been installed on a Windows machine, by following the instruction (with CMake) in the README.WINDOWS file in the OpenMPI distribution (version 1.4.2). I have ran other test application that compile file under the Visual Studio 2008 Command Prompt. However I get the following errors on the server side when accepting a new client that is trying to connect:

[Lazar:02716] [[47880,1],0] ORTE_ERROR_LOG: Not found in file ..\..\orte\mca\grp
comm\base\grpcomm_base_allgather.c at line 222
[Lazar:02716] [[47880,1],0] ORTE_ERROR_LOG: Not found in file ..\..\orte\mca\grp
comm\basic\grpcomm_basic_module.c at line 530
[Lazar:02716] [[47880,1],0] ORTE_ERROR_LOG: Not found in file ..\..\ompi\mca\dpm
\orte\dpm_orte.c at line 363
[Lazar:2716] *** An error occurred in MPI_Comm_accept
[Lazar:2716] *** on communicator MPI_COMM_WORLD
[Lazar:2716] *** MPI_ERR_INTERN: internal error
[Lazar:2716] *** MPI_ERRORS_ARE_FATAL (your MPI job will now abort)
--------------------------------------------------------------------------
mpirun has exited due to process rank 0 with PID 476 on
node Lazar exiting without calling "finalize". This may
have caused other processes in the application to be
terminated by signals sent by mpirun (as reported here).
--------------------------------------------------------------------------

The server and client code is attached. I have straggled with this problem for quite a while, so please let me know what the issue might be. I have looked at the archives and the FAQ, and the only thing similar that I have found had to do with different version of OpenMPI installed, but I only have one version, and I believe it is the one being used.

Thank you,
Kalin
#include "mpi.h" 
int main( int argc, char **argv ) 
{ 
    MPI_Comm client; 
    MPI_Status status; 
    char port_name[MPI_MAX_PORT_NAME]; 
    double buf[100]; 
    int    size, again; 

    MPI_Init( &argc, &argv ); 
    MPI_Comm_size(MPI_COMM_WORLD, &size); 
    MPI_Open_port(MPI_INFO_NULL, port_name); 
    //printf("server available at %s\n",port_name); 
    while (1) { 
        MPI_Comm_accept( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD,  
                         &client ); 
        again = 1; 
        while (again) { 
            MPI_Recv( buf, 100, MPI_DOUBLE,  
                      MPI_ANY_SOURCE, MPI_ANY_TAG, client, &status ); 
            switch (status.MPI_TAG) { 
                case 0: MPI_Comm_free( &client ); 
                        MPI_Close_port(port_name); 
                        MPI_Finalize(); 
                        return 0; 
                case 1: MPI_Comm_disconnect( &client ); 
                        again = 0; 
                        break; 
                case 2: 
					//printf("test");
                default: 
                        /* Unexpected message type */ 
                        MPI_Abort( MPI_COMM_WORLD, 1 ); 
                } 
            } 
        } 
} 
#include "mpi.h" 
int main( int argc, char **argv ) 
{ 
    MPI_Comm server; 
    double buf[100]; 
    char port_name[MPI_MAX_PORT_NAME]; 

    MPI_Init( &argc, &argv ); 
    strcpy(port_name, argv[1] );/* assume server's name is cmd-line arg */ 

    MPI_Comm_connect( port_name, MPI_INFO_NULL, 0, MPI_COMM_WORLD,  
                      &server ); 

	bool done = false;

    while (!done) { 
        int tag = 2; /* Action to perform */ 
        MPI_Send( buf, 100, MPI_DOUBLE, 0, tag, server ); 
        /* etc */ 
        } 
    MPI_Send( buf, 0, MPI_DOUBLE, 0, 1, server ); 
    MPI_Comm_disconnect( &server ); 
    MPI_Finalize(); 
    return 0; 
} 

Reply via email to