Add simple test that sends a message between all the ranks in the job.
Useful to prove a cluster is up and working. Reviewed by Jeff Squyres. This commit was SVN r13857.
Этот коммит содержится в:
родитель
ec82d01555
Коммит
eaf71a2e74
@ -9,7 +9,7 @@
|
||||
# University of Stuttgart. All rights reserved.
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
|
||||
# Copyright (c) 2006-2007 Sun Microsystems, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -41,12 +41,12 @@ FCFLAGS = -g
|
||||
# Example programs to build
|
||||
|
||||
EXAMPLES = hello_c hello_cxx hello_f77 hello_f90 \
|
||||
ring_c ring_cxx ring_f77 ring_f90
|
||||
ring_c ring_cxx ring_f77 ring_f90 connectivity_c
|
||||
|
||||
# Default target. Always build the C example. Only build the others
|
||||
# if Open MPI was build with the relevant language bindings.
|
||||
|
||||
all: hello_c ring_c
|
||||
all: hello_c ring_c connectivity_c
|
||||
@ if test "`ompi_info --parsable | grep bindings:cxx:yes`" != ""; then \
|
||||
$(MAKE) hello_cxx ring_cxx; \
|
||||
fi
|
||||
|
@ -11,6 +11,7 @@
|
||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||
# All rights reserved.
|
||||
# Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
|
||||
# Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
|
||||
# $COPYRIGHT$
|
||||
#
|
||||
# Additional copyrights may follow
|
||||
@ -37,4 +38,5 @@ EXTRA_DIST += \
|
||||
examples/ring_c.c \
|
||||
examples/ring_cxx.cc \
|
||||
examples/ring_f77.f \
|
||||
examples/ring_f90.f90
|
||||
examples/ring_f90.f90 \
|
||||
examples/connectivity_c.c
|
||||
|
67
examples/connectivity_c.c
Обычный файл
67
examples/connectivity_c.c
Обычный файл
@ -0,0 +1,67 @@
|
||||
/*
|
||||
* Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Test the connectivity between all processes.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
#include <mpi.h>
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
MPI_Status status;
|
||||
int verbose = 0;
|
||||
int rank;
|
||||
int np; /* number of processes in job */
|
||||
int peer;
|
||||
int i;
|
||||
int j;
|
||||
int length;
|
||||
char name[MPI_MAX_PROCESSOR_NAME+1];
|
||||
|
||||
MPI_Init(&argc, &argv);
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
||||
MPI_Comm_size(MPI_COMM_WORLD, &np);
|
||||
|
||||
/*
|
||||
* If we cannot get the name for whatever reason, just
|
||||
* set it to unknown. */
|
||||
if (MPI_SUCCESS != MPI_Get_processor_name(name, &length)) {
|
||||
strcpy(name, "unknown");
|
||||
}
|
||||
|
||||
if (argc>1 && strcmp(argv[1], "-v")==0)
|
||||
verbose = 1;
|
||||
|
||||
for (i=0; i<np; i++) {
|
||||
if (rank==i) {
|
||||
/* rank i sends to and receives from each higher rank */
|
||||
for(j=i+1; j<np; j++) {
|
||||
if (verbose)
|
||||
printf("checking connection between rank %d on %s and rank %-4d\n",
|
||||
i, name, j);
|
||||
MPI_Send(&rank, 1, MPI_INT, j, rank, MPI_COMM_WORLD);
|
||||
MPI_Recv(&peer, 1, MPI_INT, j, j, MPI_COMM_WORLD, &status);
|
||||
}
|
||||
} else if (rank>i) {
|
||||
/* receive from and reply to rank i */
|
||||
MPI_Recv(&peer, 1, MPI_INT, i, i, MPI_COMM_WORLD, &status);
|
||||
MPI_Send(&rank, 1, MPI_INT, i, rank, MPI_COMM_WORLD);
|
||||
}
|
||||
}
|
||||
|
||||
MPI_Barrier(MPI_COMM_WORLD);
|
||||
if (rank==0)
|
||||
printf("Connectivity test on %d processes PASSED.\n", np);
|
||||
|
||||
MPI_Finalize();
|
||||
return 0;
|
||||
}
|
Загрузка…
Ссылка в новой задаче
Block a user