Hello,

Working with different MPI flavours, I have encountered limits when using 
MPI_spawn and threads.

The limit is that the number of spawns that can be made is limited. Over a 
given limit the application crashes.

I am trying to overcome the limitation but launching a new process that will 
make the spawn 
in place of the initial mpi process.

I actually fail to launch the "launching process" when it is a MPI process. If 
it is a "classic" program
it works.

I tried to launch the "launching" process with the "system" call and the 
"fork-exec" call.
If the launced program is a non mpi program all works fine. If it is a mpi 
program
it fails to run.
This has been overcome using ssh to run the mpi program but it not satisfactory.


Follows a short example of one of the different tries.

FYI a try without using MPI_THREAD... has also been made leading to the same 
results.

Solution 1:start with "mpiexec  --mca btl_tcp_if_exclude lo,eth1 --hostfile 
hostfile.txt -n 1 Test"
**********************************************************************
----------------------------------------------------------------------
*first process : solution1.c build :mpicc -g -Wall solution1.c -o Test
----------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/types.h>
#include <fcntl.h>
#include "mpi.h"
#include <unistd.h>

int main(int argc, char *argv[]){

    int ThreadLevelWanted=MPI_THREAD_MULTIPLE;
    int ThreadLevelNew=MPI_THREAD_MULTIPLE;

    printf("MPI_Init_thread start\n");
    if(MPI_SUCCESS!=MPI_Init_thread( &argc, 
        &argv, 
        ThreadLevelWanted, 
        &ThreadLevelNew )){
        printf("****************************************************\n");
        printf("**                    ERROR                       **\n");
        printf("****************************************************\n");
        return -1;         
    }

    printf("system return : %i\n",
        system("/usr/bin/mpiexec --mca btl_tcp_if_exclude lo,eth1 --hostfile 
hostfile.txt -n 1 ExeToStart");

    sleep (100);

    printf(" byebye ");
    return 0;

}

----------------------------------------------------------------------
*Second process : ExeToStart.c build :mpicc -g -Wall ExeToStart.c -o ExeToStart
----------------------------------------------------------------------
#include <stdio.h>
int main( int argc, char **argv ) {

        printf("hello\n");
        sleep (20);
        printf("byebye\n");
}

This test program doesn't start the second process;

If I don't make the "MPI_Init_thread" at the beggining of the first process 
there is no problem, but I need a MPI environnement for the two processes.

Thank you for you help.



Reply via email to