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: 0xfffffffe >> > [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 >> >> >> >