Merging in latest from upstream (HDFFV/hdf5:refs/heads/develop)

* commit 'b30a1fe44aa804a67f2291005bf8135ac5c2dc99':
  Updated the parallel install docs.
  Eliminated the need for a separate script variable.
  Added a helpful message to the flush script.
  Added a shell script so we can run the parallel flush test on OpenMPI.
This commit is contained in:
Allen Byrne 2018-12-31 14:06:43 -06:00
commit 0e6cf18b06
7 changed files with 85 additions and 7 deletions

View File

@ -1295,6 +1295,7 @@
./testpar/t_span_tree.c
./testpar/t_init_term.c
./testpar/testpar.h
./testpar/testpflush.sh.in
./testpar/testphdf5.c
./testpar/testphdf5.h

View File

@ -249,7 +249,7 @@ build-check-p: $(LIB) $(PROGS) $(chk_TESTS)
echo "**** Hint ****"; \
echo "Parallel test files reside in the current directory" \
"by default."; \
echo "Set HDF5_PARAPREFIX to use another directory. E.g.,"; \
echo "Set HDF5_PARAPREFIX to use another directory. e.g.,"; \
echo " HDF5_PARAPREFIX=/PFS/user/me"; \
echo " export HDF5_PARAPREFIX"; \
echo " make check"; \

View File

@ -3411,6 +3411,7 @@ AC_CONFIG_FILES([src/libhdf5.settings
test/test_usecases.sh
test/test_vol_plugin.sh
testpar/Makefile
testpar/testpflush.sh
tools/Makefile
tools/lib/Makefile
tools/src/Makefile

View File

@ -102,7 +102,7 @@ qsub -I -q debug -l mppwidth=8
- configure HDF5:
RUNSERIAL="aprun -q -n 1" RUNPARALLEL="aprun -q -n 6" FC=ftn CC=cc /path/to/source/configure --enable-fortran --enable-parallel --disable-shared
RUNSERIAL and RUNPARALLEL tells the library how it should launch programs that are part of the build procedure.
RUNSERIAL and RUNPARALLEL tell the library how it should launch programs that are part of the build procedure.
- Compile HDF5:
gmake
@ -155,12 +155,16 @@ to run a parallel application on one processor and on many processors. If the
compiler is `mpicc' and the user hasn't specified values for RUNSERIAL and
RUNPARALLEL then configure chooses `mpiexec' from the same directory as `mpicc':
RUNSERIAL: /usr/local/mpi/bin/mpiexec -np 1
RUNPARALLEL: /usr/local/mpi/bin/mpiexec -np $${NPROCS:=6}
RUNSERIAL: mpiexec -n 1
RUNPARALLEL: mpiexec -n $${NPROCS:=6}
The `$${NPROCS:=6}' will be substituted with the value of the NPROCS
environment variable at the time `make check' is run (or the value 6).
Note that some MPI implementations (e.g. OpenMPI 4.0) disallow oversubscribing
nodes by default so you'll have to either set NPROCS equal to the number of
processors available (or fewer) or redefine RUNPARALLEL with appropriate
flag(s) (--oversubscribe in OpenMPI).
4. Parallel test suite
----------------------

View File

@ -613,7 +613,7 @@ h5_fixname_real(const char *base_name, hid_t fapl, const char *_suffix,
printf("*** Hint ***\n"
"You can use environment variable HDF5_PARAPREFIX to "
"run parallel test files in a\n"
"different directory or to add file type prefix. E.g.,\n"
"different directory or to add file type prefix. e.g.,\n"
" HDF5_PARAPREFIX=pfs:/PFS/user/me\n"
" export HDF5_PARAPREFIX\n"
"*** End of Hint ***\n");

View File

@ -21,11 +21,19 @@ include $(top_srcdir)/config/commence.am
AM_CPPFLAGS+=-I$(top_srcdir)/src -I$(top_srcdir)/test
# Test scripts--
# testpflush.sh:
TEST_SCRIPT_PARA = testpflush.sh
SCRIPT_DEPEND = t_pflush1$(EXEEXT) t_pflush2$(EXEEXT)
check_SCRIPTS = $(TEST_SCRIPT_PARA)
# Test programs. These are our main targets.
#
TEST_PROG_PARA=t_mpi t_bigio testphdf5 t_cache t_cache_image t_pflush1 t_pflush2 t_pread t_pshutdown t_prestart t_init_term t_shapesame t_filters_parallel
TEST_PROG_PARA=t_mpi t_bigio testphdf5 t_cache t_cache_image t_pread t_pshutdown t_prestart t_init_term t_shapesame t_filters_parallel
check_PROGRAMS = $(TEST_PROG_PARA)
# t_pflush1 and t_pflush2 are used by testpflush.sh
check_PROGRAMS = $(TEST_PROG_PARA) t_pflush1 t_pflush2
testphdf5_SOURCES=testphdf5.c t_dset.c t_file.c t_file_image.c t_mdset.c \
t_ph5basic.c t_coll_chunk.c t_span_tree.c t_chunk_alloc.c t_filter_read.c \

64
testpar/testpflush.sh.in Normal file
View File

@ -0,0 +1,64 @@
#! /bin/sh
#
# Copyright by The HDF Group.
# Copyright by the Board of Trustees of the University of Illinois.
# All rights reserved.
#
# This file is part of HDF5. The full HDF5 copyright notice, including
# terms governing use, modification, and redistribution, is contained in
# the COPYING file, which can be found at the root of the source code
# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.
# If you do not have access to either file, you may request a copy from
# help@hdfgroup.org.
#
#
# Test script for the parallel flush test
#
# The parallel flush test uses two programs to test flush operations
# in parallel HDF5. The first program purposely exits without calling
# MPI_Finalize(), which is an error under the MPI standard and mpiexec
# in some implementations will return an error code even though all
# processes exit successfully. This script lets us swallow the error
# from the first program.
#
# True errors in the first program will be detected as errors in the
# second program, so watch out for that.
#
# Programmer: Dana Robinson
# Fall 2018
# The build (current) directory might be different than the source directory.
if test -z "$srcdir"; then
srcdir=.
fi
# Turn the $$ we use to avoid Autotools munging into $
#
# Allowing $$ to substitute in both the RUNPARALLEL string and the
# regexp is intentional. There doesn't seem to be a way around
# this using quote shenanigans. The downside is that there is a remote
# chance that the shell's pid will match a number in the RUNPARALLEL
# variable, but that seems less likely to cause problems than expecting
# library builders to specify two almost identical versions of the
# RUNPARALLEL command, one for use in scripts and one via Makefiles.
RUNPARALLELSCRIPT=`echo "@RUNPARALLEL@" | sed "s/$$/\$/g"`
# ==========================================
# Run the first parallel flush test program
# (note that we ignore any errors here)
# ==========================================
echo "*** NOTE ***********************************************************"
echo "You may see complaints from mpiexec et al. that not all processes"
echo "called MPI_Finalize(). This is an intended characteristic of the"
echo "test and should not be considered an error."
echo "********************************************************************"
eval ${RUNPARALLELSCRIPT} ./t_pflush1
# ===========================================
# Run the second parallel flush test program
# The return code of this call is the return
# code of the script.
# ===========================================
eval ${RUNPARALLELSCRIPT} ./t_pflush2