[OMPI users] Issues with MPI_Comm_Spawn

2020-08-12 Thread Alvaro Payero Pinto via users
Hi,

I’m using OpenMPI 4.0.4, where the Fortran side has been compiled with
Intel Fortran suite v17.0.6 and the C/C++ side with GNU suite v4.8.5 due to
requirements I cannot modify.

I am trying to parallelise a Fortran application by dynamically creating
processes on the fly with “MPI_Comm_Spawn” subroutine. The application
starts with only one parent and it takes a file throughout standard input,
but it looks like children are not inheriting the access to such file. I
would like to have all children processes inheriting the standard input of
the parent. I’m aware that perhaps the “-stdin all” argument of the
“mpirun“ binary might do it, but I am attempting to execute the binary
without mpirun unless strictly necessary.

So far, I have already tried to pass a non-null “MPI_Info“ to
“MPI_Comm_Spawn” with a key of “ompi_stdin_target“ and a value of “all” but
it does not work. I have also tried other values like none, 0, 1, -1, etc.)
without success either.

Here is the subroutine provoking the error at the MPI_Comm_spawn call:

===
SUBROUTINE ADmn_createSpawn(iNumberChilds, iCommBigWorld, iIDMpi,
 iNumberProcess)
IMPLICIT NONE

!ID of the communicator that contains all the process
INTEGER:: iCommBigWorld
!Number of child process
INTEGER :: iNumberChilds
INTEGER:: iNumberProcess
 CHARACTER(LEN=1) :: arguments(1)
 INTEGER  :: bigWorld, iC, iInic,
iFinal;
 INTEGER  :: ierror
  INTEGER  :: iIDFamiliar=0;

CHARACTER(LEN=128):: command
INTEGER   :: iInfoMPI
CHARACTER(LEN=*), Parameter  :: key=" ompi_stdin_target ",valueMPI=
"all";
logical :: FLAG

!Id number of the current process
INTEGER :: iIDMpi

CALL GET_COMMAND_ARGUMENT(0, command)
CALL MPI_Comm_get_parent(iParent, ierror)

IF (iParent .EQ. MPI_COMM_NULL) THEN
arguments(1) = ''
iIDFamiliar = 0;

call MPI_INFO_CREATE(iInfoMPI, ierror)
call MPI_INFO_SET(iInfoMPI, key, valueMPI, ierror)

CALL MPI_Comm_spawn(command, arguments, iNumberChilds, iInfoMPI, 0,
MPI_COMM_WORLD, iChild, iSpawn_error, ierror)

CALL MPI_INTERCOMM_MERGE(iChild, .false., iCommBigWorld, ierror)
ELSE
call MPI_COMM_RANK(MPI_COMM_WORLD, iIDFamiliar, ierror)

iIDFamiliar = iIDFamiliar + 1;

CALL MPI_INTERCOMM_MERGE(iParent, .true., iCommBigWorld, ierror)
END IF

CALL MPI_COMM_RANK(iCommBigWorld,iIDMpi,ierror)
call MPI_COMM_SIZE(iCommBigWorld, intasks, ierror)
iProcessIDInternal = iIDMpi
iNumberProcess = intasks

END SUBROUTINE ADmn_createSpawn
===

Binary is executed as:
Binaryname.bin < inputfilename.dat
And here is the segmentation fault produced when passing the MPI_Info
variable to MPI_Comm_Spawn:

===
[sles12sp3-srv:10384] *** Process received signal ***
[sles12sp3-srv:10384] Signal: Segmentation fault (11)
[sles12sp3-srv:10384] Signal code: Address not mapped (1)
[sles12sp3-srv:10384] Failing at address: 0xfffe
[sles12sp3-srv:10384] [ 0] /lib64/libpthread.so.0(+0x10c10)[0x7fc6a8dd5c10]
[sles12sp3-srv:10384] [ 1]
/usr/local/lib64/libopen-rte.so.40(pmix_server_spawn_fn+0x1052)[0x7fc6aa283232]
[sles12sp3-srv:10384] [ 2]
/usr/local/lib64/openmpi/mca_pmix_pmix3x.so(+0x46210)[0x7fc6a602b210]
[sles12sp3-srv:10384] [ 3]
/usr/local/lib64/openmpi/mca_pmix_pmix3x.so(pmix_server_spawn+0x7c6)[0x7fc6a60a5ab6]
[sles12sp3-srv:10384] [ 4]
/usr/local/lib64/openmpi/mca_pmix_pmix3x.so(+0xb1a2f)[0x7fc6a6096a2f]
[sles12sp3-srv:10384] [ 5]
/usr/local/lib64/openmpi/mca_pmix_pmix3x.so(pmix_server_message_handler+0x41)[0x7fc6a6097511]
[sles12sp3-srv:10384] [ 6]
/usr/local/lib64/openmpi/mca_pmix_pmix3x.so(OPAL_MCA_PMIX3X_pmix_ptl_base_process_msg+0x1bf)[0x7fc6a610481f]
[sles12sp3-srv:10384] [ 7]
/usr/local/lib64/libopen-pal.so.40(opal_libevent2022_event_base_loop+0x8fc)[0x7fc6a9facd6c]
[sles12sp3-srv:10384] [ 8]
/usr/local/lib64/openmpi/mca_pmix_pmix3x.so(+0xcf7ce)[0x7fc6a60b47ce]
[sles12sp3-srv:10384] [ 9] /lib64/libpthread.so.0(+0x8724)[0x7fc6a8dcd724]
[sles12sp3-srv:10384] [10] /lib64/libc.so.6(clone+0x6d)[0x7fc6a8b0ce8d]
[sles12sp3-srv:10384] *** End of error message ***

===

Do you have any idea about what might be happening?

Thank you in advance!

Best regards,
Álvaro


Re: [OMPI users] Issues with MPI_Comm_Spawn

2020-08-12 Thread Ralph Castain via users
Setting aside the known issue with comm_spawn in v4.0.4, how are you planning 
to forward stdin without the use of "mpirun"? Something has to collect stdin of 
the terminal and distribute it to the stdin of the processes

> On Aug 12, 2020, at 9:20 AM, Alvaro Payero Pinto via users 
>  wrote:
> 
> Hi,
> 
> I’m using OpenMPI 4.0.4, where the Fortran side has been compiled with Intel 
> Fortran suite v17.0.6 and the C/C++ side with GNU suite v4.8.5 due to 
> requirements I cannot modify.
> 
> I am trying to parallelise a Fortran application by dynamically creating 
> processes on the fly with “MPI_Comm_Spawn” subroutine. The application starts 
> with only one parent and it takes a file throughout standard input, but it 
> looks like children are not inheriting the access to such file. I would like 
> to have all children processes inheriting the standard input of the parent. 
> I’m aware that perhaps the “-stdin all” argument of the “mpirun“ binary might 
> do it, but I am attempting to execute the binary without mpirun unless 
> strictly necessary.
>  
> So far, I have already tried to pass a non-null “MPI_Info“ to 
> “MPI_Comm_Spawn” with a key of “ompi_stdin_target“ and a value of “all” but 
> it does not work. I have also tried other values like none, 0, 1, -1, etc.) 
> without success either.
> 
> Here is the subroutine provoking the error at the MPI_Comm_spawn call:
> 
> ===
> SUBROUTINE ADmn_createSpawn(iNumberChilds, iCommBigWorld, iIDMpi,
> iNumberProcess)
> IMPLICIT NONE
> 
> !ID of the communicator that contains all the process
> INTEGER:: iCommBigWorld
> !Number of child process
> INTEGER :: iNumberChilds
> INTEGER:: iNumberProcess
>  CHARACTER(LEN=1) :: arguments(1)
>  INTEGER  :: bigWorld, iC, iInic, iFinal;
>  INTEGER  :: ierror
>   INTEGER  :: iIDFamiliar=0;
> 
> CHARACTER(LEN=128):: command
> INTEGER   :: iInfoMPI
> CHARACTER(LEN=*), Parameter  :: key=" ompi_stdin_target ",valueMPI= "all";
> logical :: FLAG
> 
> !Id number of the current process
> INTEGER :: iIDMpi
> 
> CALL GET_COMMAND_ARGUMENT(0, command)
> CALL MPI_Comm_get_parent(iParent, ierror)
> 
> IF (iParent .EQ. MPI_COMM_NULL) THEN
> arguments(1) = ''
> iIDFamiliar = 0;
> 
> call MPI_INFO_CREATE(iInfoMPI, ierror)
> call MPI_INFO_SET(iInfoMPI, key, valueMPI, ierror)
> 
> CALL MPI_Comm_spawn(command, arguments, iNumberChilds, iInfoMPI, 0, 
> MPI_COMM_WORLD, iChild, iSpawn_error, ierror)
>
> CALL MPI_INTERCOMM_MERGE(iChild, .false., iCommBigWorld, ierror)
> ELSE
> call MPI_COMM_RANK(MPI_COMM_WORLD, iIDFamiliar, ierror)
> 
> iIDFamiliar = iIDFamiliar + 1;
> 
> CALL MPI_INTERCOMM_MERGE(iParent, .true., iCommBigWorld, ierror)
> END IF
> 
> CALL MPI_COMM_RANK(iCommBigWorld,iIDMpi,ierror)
> call MPI_COMM_SIZE(iCommBigWorld, intasks, ierror)
> iProcessIDInternal = iIDMpi
> iNumberProcess = intasks
> 
> END SUBROUTINE ADmn_createSpawn
> ===
> 
> Binary is executed as:
> Binaryname.bin < inputfilename.dat
> And here is the segmentation fault produced when passing the MPI_Info 
> variable to MPI_Comm_Spawn:
> 
> ===
> [sles12sp3-srv:10384] *** Process received signal ***
> [sles12sp3-srv:10384] Signal: Segmentation fault (11)
> [sles12sp3-srv:10384] Signal code: Address not mapped (1)
> [sles12sp3-srv:10384] Failing at address: 0xfffe
> [sles12sp3-srv:10384] [ 0] /lib64/libpthread.so.0(+0x10c10)[0x7fc6a8dd5c10]
> [sles12sp3-srv:10384] [ 1] 
> /usr/local/lib64/libopen-rte.so.40(pmix_server_spawn_fn+0x1052)[0x7fc6aa283232]
> [sles12sp3-srv:10384] [ 2] 
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(+0x46210)[0x7fc6a602b210]
> [sles12sp3-srv:10384] [ 3] 
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(pmix_server_spawn+0x7c6)[0x7fc6a60a5ab6]
> [sles12sp3-srv:10384] [ 4] 
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(+0xb1a2f)[0x7fc6a6096a2f]
> [sles12sp3-srv:10384] [ 5] 
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(pmix_server_message_handler+0x41)[0x7fc6a6097511]
> [sles12sp3-srv:10384] [ 6] 
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(OPAL_MCA_PMIX3X_pmix_ptl_base_process_msg+0x1bf)[0x7fc6a610481f]
> [sles12sp3-srv:10384] [ 7] 
> /usr/local/lib64/libopen-pal.so.40(opal_libevent2022_event_base_loop+0x8fc)[0x7fc6a9facd6c]
> [sles12sp3-srv:10384] [ 8] 
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(+0xcf7ce)[0x7fc6a60b47ce]
> [sles12sp3-srv:10384] [ 9] /lib64/libpthread.so.0(+0x8724)[0x7fc6a8dcd724]
> [sles12sp3-srv:10384] [10] /lib64/libc.so.6(clone+0x6d)[0x7fc6a8b0ce8d]
> [sles12sp3-srv:10384] *** End of error message ***
> 
> 

Re: [OMPI users] Issues with MPI_Comm_Spawn

2020-08-12 Thread Alvaro Payero Pinto via users
I was planning to create a MPI Info variable with a pair of ompi stdin
target as key and all as value. Is not the way of archieve this goal?

El mié., 12 ago. 2020 18:29, Ralph Castain via users <
users@lists.open-mpi.org> escribió:

> Setting aside the known issue with comm_spawn in v4.0.4, how are you
> planning to forward stdin without the use of "mpirun"? Something has to
> collect stdin of the terminal and distribute it to the stdin of the
> processes
>
> > On Aug 12, 2020, at 9:20 AM, Alvaro Payero Pinto via users <
> users@lists.open-mpi.org> wrote:
> >
> > Hi,
> >
> > I’m using OpenMPI 4.0.4, where the Fortran side has been compiled with
> Intel Fortran suite v17.0.6 and the C/C++ side with GNU suite v4.8.5 due to
> requirements I cannot modify.
> >
> > I am trying to parallelise a Fortran application by dynamically creating
> processes on the fly with “MPI_Comm_Spawn” subroutine. The application
> starts with only one parent and it takes a file throughout standard input,
> but it looks like children are not inheriting the access to such file. I
> would like to have all children processes inheriting the standard input of
> the parent. I’m aware that perhaps the “-stdin all” argument of the
> “mpirun“ binary might do it, but I am attempting to execute the binary
> without mpirun unless strictly necessary.
> >
> > So far, I have already tried to pass a non-null “MPI_Info“ to
> “MPI_Comm_Spawn” with a key of “ompi_stdin_target“ and a value of “all” but
> it does not work. I have also tried other values like none, 0, 1, -1, etc.)
> without success either.
> >
> > Here is the subroutine provoking the error at the MPI_Comm_spawn call:
> >
> > ===
> > SUBROUTINE ADmn_createSpawn(iNumberChilds, iCommBigWorld, iIDMpi,
> iNumberProcess)
> > IMPLICIT NONE
> >
> > !ID of the communicator that contains all the process
> > INTEGER:: iCommBigWorld
> > !Number of child process
> > INTEGER :: iNumberChilds
> > INTEGER:: iNumberProcess
> >  CHARACTER(LEN=1) :: arguments(1)
> >  INTEGER  :: bigWorld, iC, iInic,
> iFinal;
> >  INTEGER  :: ierror
> >   INTEGER  :: iIDFamiliar=0;
> >
> > CHARACTER(LEN=128):: command
> > INTEGER   :: iInfoMPI
> > CHARACTER(LEN=*), Parameter  :: key=" ompi_stdin_target ",valueMPI=
> "all";
> > logical :: FLAG
> >
> > !Id number of the current process
> > INTEGER :: iIDMpi
> >
> > CALL GET_COMMAND_ARGUMENT(0, command)
> > CALL MPI_Comm_get_parent(iParent, ierror)
> >
> > IF (iParent .EQ. MPI_COMM_NULL) THEN
> > arguments(1) = ''
> > iIDFamiliar = 0;
> >
> > call MPI_INFO_CREATE(iInfoMPI, ierror)
> > call MPI_INFO_SET(iInfoMPI, key, valueMPI, ierror)
> >
> > CALL MPI_Comm_spawn(command, arguments, iNumberChilds, iInfoMPI,
> 0, MPI_COMM_WORLD, iChild, iSpawn_error, ierror)
> >
> > CALL MPI_INTERCOMM_MERGE(iChild, .false., iCommBigWorld, ierror)
> > ELSE
> > call MPI_COMM_RANK(MPI_COMM_WORLD, iIDFamiliar, ierror)
> >
> > iIDFamiliar = iIDFamiliar + 1;
> >
> > CALL MPI_INTERCOMM_MERGE(iParent, .true., iCommBigWorld, ierror)
> > END IF
> >
> > CALL MPI_COMM_RANK(iCommBigWorld,iIDMpi,ierror)
> > call MPI_COMM_SIZE(iCommBigWorld, intasks, ierror)
> > iProcessIDInternal = iIDMpi
> > iNumberProcess = intasks
> >
> > END SUBROUTINE ADmn_createSpawn
> > ===
> >
> > Binary is executed as:
> > Binaryname.bin < inputfilename.dat
> > And here is the segmentation fault produced when passing the MPI_Info
> variable to MPI_Comm_Spawn:
> >
> > ===
> > [sles12sp3-srv:10384] *** Process received signal ***
> > [sles12sp3-srv:10384] Signal: Segmentation fault (11)
> > [sles12sp3-srv:10384] Signal code: Address not mapped (1)
> > [sles12sp3-srv:10384] Failing at address: 0xfffe
> > [sles12sp3-srv:10384] [ 0]
> /lib64/libpthread.so.0(+0x10c10)[0x7fc6a8dd5c10]
> > [sles12sp3-srv:10384] [ 1]
> /usr/local/lib64/libopen-rte.so.40(pmix_server_spawn_fn+0x1052)[0x7fc6aa283232]
> > [sles12sp3-srv:10384] [ 2]
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(+0x46210)[0x7fc6a602b210]
> > [sles12sp3-srv:10384] [ 3]
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(pmix_server_spawn+0x7c6)[0x7fc6a60a5ab6]
> > [sles12sp3-srv:10384] [ 4]
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(+0xb1a2f)[0x7fc6a6096a2f]
> > [sles12sp3-srv:10384] [ 5]
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(pmix_server_message_handler+0x41)[0x7fc6a6097511]
> > [sles12sp3-srv:10384] [ 6]
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(OPAL_MCA_PMIX3X_pmix_ptl_base_process_msg+0x1bf)[0x7fc6a610481f]
> > [sles12sp3-srv:10384] [ 7]
> /usr/local/lib64/libopen-pal.so.40(opal

Re: [OMPI users] Issues with MPI_Comm_Spawn

2020-08-12 Thread Ralph Castain via users
No, I'm afraid that won't do anything - all the info key does is tell the 
launcher (mpirun or whatever you used) that you would like it to collect and 
distribute the stdin. However, it will just be ignored if you don't have the 
launcher there to provide that support.

How are you planning on starting these processes?


On Aug 12, 2020, at 9:59 AM, Alvaro Payero Pinto via users 
mailto:users@lists.open-mpi.org> > wrote:

I was planning to create a MPI Info variable with a pair of ompi stdin target 
as key and all as value. Is not the way of archieve this goal?

El mié., 12 ago. 2020 18:29, Ralph Castain via users mailto:users@lists.open-mpi.org> > escribió:
Setting aside the known issue with comm_spawn in v4.0.4, how are you planning 
to forward stdin without the use of "mpirun"? Something has to collect stdin of 
the terminal and distribute it to the stdin of the processes

> On Aug 12, 2020, at 9:20 AM, Alvaro Payero Pinto via users 
> mailto:users@lists.open-mpi.org> > wrote:
> 
> Hi,
> 
> I’m using OpenMPI 4.0.4, where the Fortran side has been compiled with Intel 
> Fortran suite v17.0.6 and the C/C++ side with GNU suite v4.8.5 due to 
> requirements I cannot modify.
> 
> I am trying to parallelise a Fortran application by dynamically creating 
> processes on the fly with “MPI_Comm_Spawn” subroutine. The application starts 
> with only one parent and it takes a file throughout standard input, but it 
> looks like children are not inheriting the access to such file. I would like 
> to have all children processes inheriting the standard input of the parent. 
> I’m aware that perhaps the “-stdin all” argument of the “mpirun“ binary might 
> do it, but I am attempting to execute the binary without mpirun unless 
> strictly necessary.
>  
> So far, I have already tried to pass a non-null “MPI_Info“ to 
> “MPI_Comm_Spawn” with a key of “ompi_stdin_target“ and a value of “all” but 
> it does not work. I have also tried other values like none, 0, 1, -1, etc.) 
> without success either.
> 
> Here is the subroutine provoking the error at the MPI_Comm_spawn call:

> 
> ===
> SUBROUTINE ADmn_createSpawn(iNumberChilds, iCommBigWorld, iIDMpi,    
> iNumberProcess)
>     IMPLICIT NONE
> 
>     !ID of the communicator that contains all the process
>     INTEGER:: iCommBigWorld
>     !Number of child process
>     INTEGER :: iNumberChilds
>     INTEGER:: iNumberProcess
>      CHARACTER(LEN=1)                         :: arguments(1)
>      INTEGER                                  :: bigWorld, iC, iInic, iFinal;
>      INTEGER                                  :: ierror
>       INTEGER                                  :: iIDFamiliar=0;
> 
>     CHARACTER(LEN=128)        :: command
>     INTEGER                               :: iInfoMPI
>     CHARACTER(LEN=*), Parameter  :: key=" ompi_stdin_target ",valueMPI= "all";
>     logical :: FLAG
> 
>     !Id number of the current process
>     INTEGER :: iIDMpi
> 
>     CALL GET_COMMAND_ARGUMENT(0, command)
>     CALL MPI_Comm_get_parent(iParent, ierror)
> 
>     IF (iParent .EQ. MPI_COMM_NULL) THEN
>         arguments(1) = ''
>         iIDFamiliar = 0;
> 
>         call MPI_INFO_CREATE(iInfoMPI, ierror)
>         call MPI_INFO_SET(iInfoMPI, key, valueMPI, ierror)
> 
>         CALL MPI_Comm_spawn(command, arguments, iNumberChilds, iInfoMPI, 0, 
>MPI_COMM_WORLD, iChild, iSpawn_error, ierror)
>        
>         CALL MPI_INTERCOMM_MERGE(iChild, .false., iCommBigWorld, ierror)
>     ELSE
>         call MPI_COMM_RANK(MPI_COMM_WORLD, iIDFamiliar, ierror)
> 
>         iIDFamiliar = iIDFamiliar + 1;
> 
>         CALL MPI_INTERCOMM_MERGE(iParent, .true., iCommBigWorld, ierror)
>     END IF
> 
>     CALL MPI_COMM_RANK(iCommBigWorld,iIDMpi,ierror)
>     call MPI_COMM_SIZE(iCommBigWorld, intasks, ierror)
>     iProcessIDInternal = iIDMpi
>     iNumberProcess = intasks
> 
> END SUBROUTINE ADmn_createSpawn
> ===
> 
> Binary is executed as:
> Binaryname.bin < inputfilename.dat
> And here is the segmentation fault produced when passing the MPI_Info 
> variable to MPI_Comm_Spawn:
> 
> ===
> [sles12sp3-srv:10384] *** Process received signal ***
> [sles12sp3-srv:10384] Signal: Segmentation fault (11)
> [sles12sp3-srv:10384] Signal code: Address not mapped (1)
> [sles12sp3-srv:10384] Failing at address: 0xfffe
> [sles12sp3-srv:10384] [ 0] /lib64/libpthread.so.0(+0x10c10)[0x7fc6a8dd5c10]
> [sles12sp3-srv:10384] [ 1] 
> /usr/local/lib64/libopen-rte.so.40(pmix_server_spawn_fn+0x1052)[0x7fc6aa283232]
> [sles12sp3-srv:10384] [ 2] 
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(+0x46210)[0x7fc6a602b210]
> [sles12sp3-srv:10384] [ 3] 
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(pmix_server_spawn+0x7c6)[0x7fc6a60a5ab6]
> [sles12sp3-srv:10384] [ 4] 
> /usr/local/lib64/openmpi/mca_pmix_pmix3x.so(+0xb1a2f)[0x7fc6a6096a2f]
> [sles12sp3-srv

Re: [OMPI users] Issues with MPI_Comm_Spawn

2020-08-12 Thread Alvaro Payero Pinto via users
Thanks for your help. To be honest, my intention was to init the processes
from the code with the MPI comm spawn. However I will try with mpirun.
Thanks again.

El mié., 12 ago. 2020 19:20, Ralph Castain via users <
users@lists.open-mpi.org> escribió:

> No, I'm afraid that won't do anything - all the info key does is tell the
> launcher (mpirun or whatever you used) that you would like it to collect
> and distribute the stdin. However, it will just be ignored if you don't
> have the launcher there to provide that support.
>
> How are you planning on starting these processes?
>
>
> On Aug 12, 2020, at 9:59 AM, Alvaro Payero Pinto via users <
> users@lists.open-mpi.org> wrote:
>
> I was planning to create a MPI Info variable with a pair of ompi stdin
> target as key and all as value. Is not the way of archieve this goal?
>
> El mié., 12 ago. 2020 18:29, Ralph Castain via users <
> users@lists.open-mpi.org> escribió:
>
>> Setting aside the known issue with comm_spawn in v4.0.4, how are you
>> planning to forward stdin without the use of "mpirun"? Something has to
>> collect stdin of the terminal and distribute it to the stdin of the
>> processes
>>
>> > On Aug 12, 2020, at 9:20 AM, Alvaro Payero Pinto via users <
>> users@lists.open-mpi.org> wrote:
>> >
>> > Hi,
>> >
>> > I’m using OpenMPI 4.0.4, where the Fortran side has been compiled with
>> Intel Fortran suite v17.0.6 and the C/C++ side with GNU suite v4.8.5 due to
>> requirements I cannot modify.
>> >
>> > I am trying to parallelise a Fortran application by dynamically
>> creating processes on the fly with “MPI_Comm_Spawn” subroutine. The
>> application starts with only one parent and it takes a file throughout
>> standard input, but it looks like children are not inheriting the access to
>> such file. I would like to have all children processes inheriting the
>> standard input of the parent. I’m aware that perhaps the “-stdin all”
>> argument of the “mpirun“ binary might do it, but I am attempting to execute
>> the binary without mpirun unless strictly necessary.
>> >
>> > So far, I have already tried to pass a non-null “MPI_Info“ to
>> “MPI_Comm_Spawn” with a key of “ompi_stdin_target“ and a value of “all” but
>> it does not work. I have also tried other values like none, 0, 1, -1, etc.)
>> without success either.
>> >
>> > Here is the subroutine provoking the error at the MPI_Comm_spawn call:
>> >
>> > ===
>> > SUBROUTINE ADmn_createSpawn(iNumberChilds, iCommBigWorld, iIDMpi,
>> iNumberProcess)
>> > IMPLICIT NONE
>> >
>> > !ID of the communicator that contains all the process
>> > INTEGER:: iCommBigWorld
>> > !Number of child process
>> > INTEGER :: iNumberChilds
>> > INTEGER:: iNumberProcess
>> >  CHARACTER(LEN=1) :: arguments(1)
>> >  INTEGER  :: bigWorld, iC, iInic,
>> iFinal;
>> >  INTEGER  :: ierror
>> >   INTEGER  :: iIDFamiliar=0;
>> >
>> > CHARACTER(LEN=128):: command
>> > INTEGER   :: iInfoMPI
>> > CHARACTER(LEN=*), Parameter  :: key=" ompi_stdin_target ",valueMPI=
>> "all";
>> > logical :: FLAG
>> >
>> > !Id number of the current process
>> > INTEGER :: iIDMpi
>> >
>> > CALL GET_COMMAND_ARGUMENT(0, command)
>> > CALL MPI_Comm_get_parent(iParent, ierror)
>> >
>> > IF (iParent .EQ. MPI_COMM_NULL) THEN
>> > arguments(1) = ''
>> > iIDFamiliar = 0;
>> >
>> > call MPI_INFO_CREATE(iInfoMPI, ierror)
>> > call MPI_INFO_SET(iInfoMPI, key, valueMPI, ierror)
>> >
>> > CALL MPI_Comm_spawn(command, arguments, iNumberChilds,
>> iInfoMPI, 0, MPI_COMM_WORLD, iChild, iSpawn_error, ierror)
>> >
>> > CALL MPI_INTERCOMM_MERGE(iChild, .false., iCommBigWorld, ierror)
>> > ELSE
>> > call MPI_COMM_RANK(MPI_COMM_WORLD, iIDFamiliar, ierror)
>> >
>> > iIDFamiliar = iIDFamiliar + 1;
>> >
>> > CALL MPI_INTERCOMM_MERGE(iParent, .true., iCommBigWorld, ierror)
>> > END IF
>> >
>> > CALL MPI_COMM_RANK(iCommBigWorld,iIDMpi,ierror)
>> > call MPI_COMM_SIZE(iCommBigWorld, intasks, ierror)
>> > iProcessIDInternal = iIDMpi
>> > iNumberProcess = intasks
>> >
>> > END SUBROUTINE ADmn_createSpawn
>> > ===
>> >
>> > Binary is executed as:
>> > Binaryname.bin < inputfilename.dat
>> > And here is the segmentation fault produced when passing the MPI_Info
>> variable to MPI_Comm_Spawn:
>> >
>> > ===
>> > [sles12sp3-srv:10384] *** Process received signal ***
>> > [sles12sp3-srv:10384] Signal: Segmentation fault (11)
>> > [sles12sp3-srv:10384] Signal code: Address not mapped (1)
>> > [sles12sp3-srv:10384] Failing at address: 0xfffe
>> > [sles12sp3-srv:10384] [ 0]
>> /lib64/libpthread.so.0(+0x10c10)[