Re: [mpich-devel] proper way to detect if program launched by mpiexec?
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 <[email protected]> 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. [[email protected]] match_arg (../../../../src/pm/hydra/utils/args/args.c:159): unrecognized argument pmi_args [[email protected]] HYDU_parse_array (../../../../src/pm/hydra/utils/args/args.c:174): argument matching returned error [[email protected]] parse_args (../../../../src/pm/hydra/ui/mpich/utils.c:1596): error parsing input array [[email protected]] HYD_uii_mpx_get_parameters (../../../../src/pm/hydra/ui/mpich/utils.c:1648): unable to parse user arguments [[email protected]] 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 [email protected] 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
participants (1)
-
Balaji, Pavan