[mpich-devel] proper way to detect if program launched by mpiexec?

Jeff Hammond jeff.science at gmail.com
Mon Oct 20 12:43:16 CDT 2014


Is this because MPICH can't spawn processes except through
PMI/Hydra/whatever and you - justifiably - do not want to implement a
special case workaround using execvp() directly?

Jeff

On Mon, Oct 20, 2014 at 9:44 AM, Balaji, Pavan <balaji at anl.gov> wrote:
>
> This is a known issue with MPICH.  There’s no portable way to detect this, but for MPICH you can look for PMI variables in the environment.
>
>   — Pavan
>
>> On Oct 20, 2014, at 11:34 AM, Jeff Hammond <jeff.science at gmail.com> wrote:
>>
>> I wrote a trivial program that uses MPI_Comm_spawn.  It works when I
>> launch with mpiexec but not if I run directly.
>>
>> 1) Is this a bug in MPICH?
>> 2) What is the proper way for the program to detect how the program
>> was launched?  I would like to provide a helpful warning message...
>>
>> Thanks!
>>
>> Jeff
>>
>> jrhammon-mac01:comm_spawn jrhammon$ ./parent
>> I am 0 of 1 for the parent program.
>> [mpiexec at jrhammon-mac01.local] match_arg
>> (../../../../src/pm/hydra/utils/args/args.c:159): unrecognized
>> argument pmi_args
>> [mpiexec at jrhammon-mac01.local] HYDU_parse_array
>> (../../../../src/pm/hydra/utils/args/args.c:174): argument matching
>> returned error
>> [mpiexec at jrhammon-mac01.local] parse_args
>> (../../../../src/pm/hydra/ui/mpich/utils.c:1596): error parsing input
>> array
>> [mpiexec at jrhammon-mac01.local] HYD_uii_mpx_get_parameters
>> (../../../../src/pm/hydra/ui/mpich/utils.c:1648): unable to parse user
>> arguments
>> [mpiexec at jrhammon-mac01.local] main
>> (../../../../src/pm/hydra/ui/mpich/mpiexec.c:153): error parsing
>> parameters
>> ^C
>>
>> jrhammon-mac01:comm_spawn jrhammon$ mpiexec -n 1 ./parent
>> I am 0 of 1 for the parent program.
>> I am 0 of 1 for the child program.
>>
>> ==> parent.c <==
>> #include <stdio.h>
>> #include <mpi.h>
>>
>> int main(int argc, char * argv[])
>> {
>>    MPI_Init(&argc,&argv);
>>
>>    int size, rank;
>>    MPI_Comm_size(MPI_COMM_WORLD, &size);
>>    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
>>
>>    printf("I am %d of %d for the parent program.\n", rank, size);
>>
>>    MPI_Comm intercomm;
>>    int errors[size];
>>    MPI_Comm_spawn( (char*)"./child", MPI_ARGV_NULL, 1, MPI_INFO_NULL,
>> 0 /* root */, MPI_COMM_WORLD, &intercomm, errors);
>>
>>    MPI_Finalize();
>>    return 0;
>> }
>>
>> ==> child.c <==
>> #include <stdio.h>
>> #include <mpi.h>
>>
>> int main(int argc, char * argv[])
>> {
>>    MPI_Init(&argc,&argv);
>>
>>    int size, rank;
>>    MPI_Comm_size(MPI_COMM_WORLD, &size);
>>    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
>>
>>    printf("I am %d of %d for the child program.\n", rank, size);
>>
>>    MPI_Finalize();
>>    return 0;
>> }
>>
>> ==> Makefile <==
>> CC      = mpicc
>> CFLAGS  = -g -O2 -Wall -std=c99
>>
>> LD      = $(CC)
>> LDFLAGS = $(COPT)
>>
>> LIBS =
>>
>> TESTS= parent child
>>
>> all: $(TESTS)
>>
>> %: %.o
>>       $(CC) $(CFLAGS) $< $(LIBS) -o $@
>>
>> clean:
>>       -rm -f *.o
>>       -rm -f $(TESTS)
>>
>> --
>> Jeff Hammond
>> jeff.science at gmail.com
>> http://jeffhammond.github.io/
>> _______________________________________________
>> To manage subscription options or unsubscribe:
>> https://lists.mpich.org/mailman/listinfo/devel
>
> --
> Pavan Balaji  ✉️
> http://www.mcs.anl.gov/~balaji
>
> _______________________________________________
> To manage subscription options or unsubscribe:
> https://lists.mpich.org/mailman/listinfo/devel



-- 
Jeff Hammond
jeff.science at gmail.com
http://jeffhammond.github.io/


More information about the devel mailing list