diff options
97 files changed, 444 insertions, 4694 deletions
@@ -694,8 +694,6 @@ ./src/H5FDmpi.h ./src/H5FDmpio.c ./src/H5FDmpio.h -./src/H5FDmpiposix.c -./src/H5FDmpiposix.h ./src/H5FDmulti.c ./src/H5FDmulti.h ./src/H5FDpkg.h @@ -1157,14 +1155,12 @@ ./testpar/t_ph5basic.c ./testpar/t_pflush1.c ./testpar/t_pflush2.c -./testpar/t_posix_compliant.c ./testpar/t_prop.c ./testpar/t_shapesame.c ./testpar/t_span_tree.c ./testpar/testpar.h ./testpar/testphdf5.c ./testpar/testphdf5.h -./testpar/testph5.sh.in ./tools/COPYING ./tools/Makefile.am diff --git a/Makefile.in b/Makefile.in index 0c6890b..0378c52 100644 --- a/Makefile.in +++ b/Makefile.in @@ -248,7 +248,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/bin/checkposix b/bin/checkposix index e3617e5..69d43b4 100755 --- a/bin/checkposix +++ b/bin/checkposix @@ -83,7 +83,7 @@ if(<>) { next if $name =~ /^(ABS|ADDR_OVERFLOW|ALL_MEMBERS|BOUND|CONSTR|DETECT_[I|F|M]|DOWN)$/; next if $name =~ /^(MIN3?|MAX3?|NELMTS|POWER_OF_TWO|REGION_OVERFLOW)$/; next if $name =~ /^(UNIQUE_MEMBERS)$/; - next if $name =~ /^(IS_H5FD_MPIO|IS_H5FD_MPIPOSIX)$/; + next if $name =~ /^(IS_H5FD_MPIO)$/; next if $name =~ /^addr_defined$/; # These functions/macros are exempt. @@ -93,9 +93,6 @@ if(<>) { next if $name =~ /^(_get_osfhandle|GetFileInformationByHandle|SetFilePointer|GetLastError|SetEndOfFile)$/; next if $name =~ /^(FindNextFile|FindClose|_tzset|Wgettimeofday|GetSystemTimeAsFileTime|Wgetlogin|GetUserName)$/; - # These are GPFS function calls. Ignore them. - next if $name =~ /^gpfs_fcntl$/; - # These are MPI function calls. Ignore them. next if $name =~ /^(MPI_|MPE_)/; diff --git a/c++/Makefile.in b/c++/Makefile.in index 492970b..80bffc2 100644 --- a/c++/Makefile.in +++ b/c++/Makefile.in @@ -213,7 +213,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/c++/examples/Makefile.in b/c++/examples/Makefile.in index dee7c11..72e333a 100644 --- a/c++/examples/Makefile.in +++ b/c++/examples/Makefile.in @@ -180,7 +180,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/c++/src/H5FaccProp.h b/c++/src/H5FaccProp.h index 5b56f6e..5dd108f 100644 --- a/c++/src/H5FaccProp.h +++ b/c++/src/H5FaccProp.h @@ -67,14 +67,6 @@ class H5_DLLCPP FileAccPropList : public PropList { void setSplit( FileAccPropList& meta_plist, FileAccPropList& raw_plist, const H5std_string& meta_ext, const H5std_string& raw_ext ) const; -#ifdef H5_HAVE_STREAM // for Stream Virtual File Driver - // Modifies this file access property list to use the Stream driver. - void setStream(H5FD_stream_fapl_t &fapl) const; - - // Retrieves the streaming I/O driver settings - H5FD_stream_fapl_t getStream() const; -#endif - // Sets the maximum size of the data sieve buffer. void setSieveBufSize(size_t bufsize) const; diff --git a/c++/src/Makefile.in b/c++/src/Makefile.in index dfc3167..6399253 100644 --- a/c++/src/Makefile.in +++ b/c++/src/Makefile.in @@ -256,7 +256,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/c++/test/Makefile.in b/c++/test/Makefile.in index 0aad590..5e88a09 100644 --- a/c++/test/Makefile.in +++ b/c++/test/Makefile.in @@ -216,7 +216,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake index 03a7975..9816755 100644 --- a/config/cmake/ConfigureChecks.cmake +++ b/config/cmake/ConfigureChecks.cmake @@ -144,13 +144,6 @@ if (WIN32) endif (NOT UNIX AND NOT CYGWIN AND NOT MINGW) endif (WIN32) -#if (WIN32) -# set (DEFAULT_STREAM_VFD OFF) -#else (WIN32) -# set (DEFAULT_STREAM_VFD ON) -#endif (WIN32) -#option (HDF5_STREAM_VFD "Compile Stream Virtual File Driver support" ${DEFAULT_STREAM_VFD}) - # TODO -------------------------------------------------------------------------- # Should the Default Virtual File Driver be compiled? # This is hard-coded now but option should added to match configure @@ -817,16 +810,6 @@ if (NOT WINDOWS) endif (NOT WINDOWS) #----------------------------------------------------------------------------- -# Check for the Stream VFD driver -#----------------------------------------------------------------------------- -if (HDF5_STREAM_VFD) - CHECK_INCLUDE_FILE_CONCAT ("netdb.h" H5_HAVE_NETDB_H) - CHECK_INCLUDE_FILE_CONCAT ("netinet/tcp.h" H5_HAVE_NETINET_TCP_H) - CHECK_INCLUDE_FILE_CONCAT ("sys/filio.h" H5_HAVE_SYS_FILIO_H) - set (H5_HAVE_STREAM 1) -endif (HDF5_STREAM_VFD) - -#----------------------------------------------------------------------------- # Check if InitOnceExecuteOnce is available #----------------------------------------------------------------------------- if (WINDOWS) @@ -892,18 +875,6 @@ if (WINDOWS) endif (WINDOWS) #----------------------------------------------------------------------------- -# Option to see if GPFS is available on this filesystem --enable-gpfs -#----------------------------------------------------------------------------- -option (HDF5_ENABLE_GPFS "Enable GPFS hints for the MPI/POSIX file driver" OFF) -if (HDF5_ENABLE_GPFS) - CHECK_INCLUDE_FILE_CONCAT ("gpfs.h" HAVE_GPFS) - if (HAVE_GPFS) - HDF5_FUNCTION_TEST (HAVE_GPFS) - endif (HAVE_GPFS) -endif (HDF5_ENABLE_GPFS) -MARK_AS_ADVANCED (HDF5_ENABLE_GPFS) - -#----------------------------------------------------------------------------- # Determine how 'inline' is used #----------------------------------------------------------------------------- set (HDF5_EXTRA_TEST_DEFINITIONS INLINE_TEST_INLINE) diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in index f3e1d75..25a0e37 100644 --- a/config/cmake/H5pubconf.h.in +++ b/config/cmake/H5pubconf.h.in @@ -217,12 +217,6 @@ /* Define to 1 if you have the `get_fpc_csr' function. */ #cmakedefine H5_HAVE_GET_FPC_CSR @H5_HAVE_GET_FPC_CSR@ -/* Define if we have GPFS support */ -#cmakedefine H5_HAVE_GPFS @H5_HAVE_GPFS@ - -/* Define to 1 if you have the <gpfs.h> header file. */ -#cmakedefine H5_HAVE_GPFS_H @H5_HAVE_GPFS_H@ - /* Define if library will contain instrumentation to detect correct optimization operation */ #cmakedefine H5_HAVE_INSTRUMENTED_LIBRARY @H5_HAVE_INSTRUMENTED_LIBRARY@ diff --git a/config/cmake/HDF5Tests.c b/config/cmake/HDF5Tests.c index 21206e0..355c06f 100644 --- a/config/cmake/HDF5Tests.c +++ b/config/cmake/HDF5Tests.c @@ -437,17 +437,6 @@ main () #endif -#ifdef HAVE_GPFS - -#include <gpfs.h> -int main () -{ - int fd = 0; - gpfs_fcntl(fd, (void *)0); -} - -#endif /* HAVE_GPFS */ - #ifdef HAVE_IOEO #include <windows.h> diff --git a/config/cmake/libhdf5.settings.cmake.in b/config/cmake/libhdf5.settings.cmake.in index 3970a9f..418a6cf 100644 --- a/config/cmake/libhdf5.settings.cmake.in +++ b/config/cmake/libhdf5.settings.cmake.in @@ -63,7 +63,6 @@ Features: Clear file buffers before write: @HDF5_Enable_Clear_File_Buffers@ Using memory checker: @HDF5_ENABLE_USING_MEMCHECKER@ Function Stack Tracing: @HDF5_ENABLE_CODESTACK@ - GPFS: @HDF5_ENABLE_GPFS@ Strict File Format Checks: @HDF5_STRICT_FORMAT_CHECKS@ Optimization Instrumentation: @HDF5_Enable_Instrument@ Large File Support (LFS): @HDF5_ENABLE_LARGE_FILE@ @@ -788,7 +788,6 @@ HAVE_DMALLOC CODESTACK INSTRUMENT LARGEFILE -GPFS HDF5_HL CXX HDF_CXX @@ -913,7 +912,6 @@ with_zlib with_szlib enable_threadsafe with_pthread -enable_gpfs enable_debug enable_codestack enable_metadata_trace_file @@ -1596,8 +1594,6 @@ Optional Features: --enable-production Determines how to run the compiler. --disable-largefile omit support for large files --enable-threadsafe Enable thread-safe capability - --enable-gpfs Enable GPFS hints for the MPI/POSIX file driver. - [default=no] --enable-debug=all Turn on debugging in all packages. One may also specify a comma-separated list of package names without the leading H5 or the word no. The default @@ -3975,7 +3971,6 @@ $as_echo "done" >&6; } ## HDF_CXX: whether C++ is enabled. Default no. ## CXX: C++ compiler. ## HDF5_HL: whether high-level library is enabled. Default is yes. -## GPFS: whether gpfs is enabled. Default no. ## LARGEFILE: whether largefile support is enabled. Default yes. ## INSTRUMENT: whether INSTRUMENT is enabled. No default set here. ## CODESTACK: whether CODESTACK is enabled. Default no. @@ -3997,7 +3992,6 @@ $as_echo "done" >&6; } HDF_CXX=no HDF_CXX=no HDF5_HL=yes - GPFS=no LARGEFILE=yes CODESTACK=no @@ -27683,74 +27677,6 @@ $as_echo "no" >&6; } fi ## ---------------------------------------------------------------------- -## Checking to see if GPFS is available on this filesystem -## -# Check whether --enable-gpfs was given. -if test "${enable_gpfs+set}" = set; then : - enableval=$enable_gpfs; -else - enableval=no -fi - - -case "X-$enableval" in - X-yes) - for ac_header in gpfs.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "gpfs.h" "ac_cv_header_gpfs_h" "$ac_includes_default" -if test "x$ac_cv_header_gpfs_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_GPFS_H 1 -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GPFS support" >&5 -$as_echo_n "checking for GPFS support... " >&6; } - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <gpfs.h> -#ifdef FC_DUMMY_MAIN -#ifndef FC_DUMMY_MAIN_EQ_F77 -# ifdef __cplusplus - extern "C" -# endif - int FC_DUMMY_MAIN() { return 1; } -#endif -#endif -int -main () -{ -int fd = 0; gpfs_fcntl(fd, (void *)0); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -$as_echo "#define HAVE_GPFS 1" >>confdefs.h - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - LIBS="$LIBS -lgpfs" - GPFS="yes" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - GPFS="no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi - -done - - ;; - X-no|*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gpfs" >&5 -$as_echo_n "checking for gpfs... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: suppressed" >&5 -$as_echo "suppressed" >&6; } - ;; -esac - -## ---------------------------------------------------------------------- ## Turn on debugging by setting compiler flags ## This must come after the enable-production since it depends on production. ## @@ -31244,7 +31170,7 @@ PARALLEL_MAKE="" FORTRAN_PARALLEL_MAKE="" if test -n "$TESTPARALLEL"; then - PARALLEL_MAKE="$TESTPARALLEL/Makefile $TESTPARALLEL/testph5.sh" + PARALLEL_MAKE="$TESTPARALLEL/Makefile" if test "X$HDF_FORTRAN" = "Xyes"; then FORTRAN_PARALLEL_MAKE=fortran/$TESTPARALLEL/Makefile @@ -33192,7 +33118,7 @@ else fi -ac_config_files="$ac_config_files src/libhdf5.settings Makefile src/Makefile test/Makefile test/testcheck_version.sh test/testerror.sh test/H5srcdir_str.h test/testlibinfo.sh test/testlinks_env.sh test/test_plugin.sh testpar/Makefile testpar/testph5.sh perform/Makefile tools/Makefile tools/h5dump/Makefile tools/h5dump/testh5dump.sh tools/h5dump/testh5dumppbits.sh tools/h5dump/testh5dumpxml.sh tools/h5ls/testh5ls.sh tools/h5import/Makefile tools/h5import/h5importtestutil.sh tools/h5diff/Makefile tools/h5diff/testh5diff.sh tools/h5diff/testph5diff.sh tools/h5jam/Makefile tools/h5jam/testh5jam.sh tools/h5repack/Makefile tools/h5repack/h5repack.sh tools/h5repack/h5repack_plugin.sh tools/h5ls/Makefile tools/h5copy/Makefile tools/h5copy/testh5copy.sh tools/lib/Makefile tools/misc/Makefile tools/misc/h5cc tools/misc/testh5mkgrp.sh tools/misc/testh5repart.sh tools/h5stat/testh5stat.sh tools/h5stat/Makefile examples/Makefile examples/run-c-ex.sh examples/testh5cc.sh c++/Makefile c++/src/Makefile c++/src/h5c++ c++/test/Makefile c++/test/H5srcdir_str.h c++/examples/Makefile c++/examples/run-c++-ex.sh c++/examples/testh5c++.sh fortran/Makefile fortran/src/h5fc fortran/src/Makefile fortran/test/Makefile fortran/testpar/Makefile fortran/examples/Makefile fortran/examples/run-fortran-ex.sh fortran/examples/testh5fc.sh hl/Makefile hl/src/Makefile hl/test/Makefile hl/test/H5srcdir_str.h hl/tools/Makefile hl/tools/gif2h5/Makefile hl/tools/gif2h5/h52giftest.sh hl/examples/Makefile hl/examples/run-hlc-ex.sh hl/c++/Makefile hl/c++/src/Makefile hl/c++/test/Makefile hl/c++/examples/Makefile hl/c++/examples/run-hlc++-ex.sh hl/fortran/Makefile hl/fortran/src/Makefile hl/fortran/test/Makefile hl/fortran/examples/Makefile hl/fortran/examples/run-hlfortran-ex.sh" +ac_config_files="$ac_config_files src/libhdf5.settings Makefile src/Makefile test/Makefile test/testcheck_version.sh test/testerror.sh test/H5srcdir_str.h test/testlibinfo.sh test/testlinks_env.sh test/test_plugin.sh testpar/Makefile perform/Makefile tools/Makefile tools/h5dump/Makefile tools/h5dump/testh5dump.sh tools/h5dump/testh5dumppbits.sh tools/h5dump/testh5dumpxml.sh tools/h5ls/testh5ls.sh tools/h5import/Makefile tools/h5import/h5importtestutil.sh tools/h5diff/Makefile tools/h5diff/testh5diff.sh tools/h5diff/testph5diff.sh tools/h5jam/Makefile tools/h5jam/testh5jam.sh tools/h5repack/Makefile tools/h5repack/h5repack.sh tools/h5repack/h5repack_plugin.sh tools/h5ls/Makefile tools/h5copy/Makefile tools/h5copy/testh5copy.sh tools/lib/Makefile tools/misc/Makefile tools/misc/h5cc tools/misc/testh5mkgrp.sh tools/misc/testh5repart.sh tools/h5stat/testh5stat.sh tools/h5stat/Makefile examples/Makefile examples/run-c-ex.sh examples/testh5cc.sh c++/Makefile c++/src/Makefile c++/src/h5c++ c++/test/Makefile c++/test/H5srcdir_str.h c++/examples/Makefile c++/examples/run-c++-ex.sh c++/examples/testh5c++.sh fortran/Makefile fortran/src/h5fc fortran/src/Makefile fortran/test/Makefile fortran/testpar/Makefile fortran/examples/Makefile fortran/examples/run-fortran-ex.sh fortran/examples/testh5fc.sh hl/Makefile hl/src/Makefile hl/test/Makefile hl/test/H5srcdir_str.h hl/tools/Makefile hl/tools/gif2h5/Makefile hl/tools/gif2h5/h52giftest.sh hl/examples/Makefile hl/examples/run-hlc-ex.sh hl/c++/Makefile hl/c++/src/Makefile hl/c++/test/Makefile hl/c++/examples/Makefile hl/c++/examples/run-hlc++-ex.sh hl/fortran/Makefile hl/fortran/src/Makefile hl/fortran/test/Makefile hl/fortran/examples/Makefile hl/fortran/examples/run-hlfortran-ex.sh" cat >confcache <<\_ACEOF @@ -34468,7 +34394,6 @@ do "test/testlinks_env.sh") CONFIG_FILES="$CONFIG_FILES test/testlinks_env.sh" ;; "test/test_plugin.sh") CONFIG_FILES="$CONFIG_FILES test/test_plugin.sh" ;; "testpar/Makefile") CONFIG_FILES="$CONFIG_FILES testpar/Makefile" ;; - "testpar/testph5.sh") CONFIG_FILES="$CONFIG_FILES testpar/testph5.sh" ;; "perform/Makefile") CONFIG_FILES="$CONFIG_FILES perform/Makefile" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "tools/h5dump/Makefile") CONFIG_FILES="$CONFIG_FILES tools/h5dump/Makefile" ;; diff --git a/configure.ac b/configure.ac index 31381ab..87baba5 100644 --- a/configure.ac +++ b/configure.ac @@ -160,7 +160,6 @@ AC_MSG_RESULT([done]) ## HDF_CXX: whether C++ is enabled. Default no. ## CXX: C++ compiler. ## HDF5_HL: whether high-level library is enabled. Default is yes. -## GPFS: whether gpfs is enabled. Default no. ## LARGEFILE: whether largefile support is enabled. Default yes. ## INSTRUMENT: whether INSTRUMENT is enabled. No default set here. ## CODESTACK: whether CODESTACK is enabled. Default no. @@ -182,7 +181,6 @@ AC_SUBST([FC2003]) HDF_FORTRAN2003=no AC_SUBST([HDF_CXX]) HDF_CXX=no AC_SUBST([CXX]) HDF_CXX=no AC_SUBST([HDF5_HL]) HDF5_HL=yes -AC_SUBST([GPFS]) GPFS=no AC_SUBST([LARGEFILE]) LARGEFILE=yes AC_SUBST([INSTRUMENT]) AC_SUBST([CODESTACK]) CODESTACK=no @@ -2392,35 +2390,6 @@ else fi ## ---------------------------------------------------------------------- -## Checking to see if GPFS is available on this filesystem -## -AC_ARG_ENABLE([gpfs], - [AS_HELP_STRING([--enable-gpfs], - [Enable GPFS hints for the MPI/POSIX file - driver. [default=no]])],, - [enableval=no]) - -case "X-$enableval" in - X-yes) - AC_CHECK_HEADERS([gpfs.h], - [AC_MSG_CHECKING([for GPFS support]) - AC_TRY_COMPILE([#include <gpfs.h>], - [int fd = 0; gpfs_fcntl(fd, (void *)0);], - [AC_DEFINE([HAVE_GPFS], [1], - [Define if we have GPFS support]) - AC_MSG_RESULT([yes]) - LIBS="$LIBS -lgpfs" - GPFS="yes"], - [AC_MSG_RESULT([no]) - GPFS="no"])]) - ;; - X-no|*) - AC_MSG_CHECKING([for gpfs]) - AC_MSG_RESULT([suppressed]) - ;; -esac - -## ---------------------------------------------------------------------- ## Turn on debugging by setting compiler flags ## This must come after the enable-production since it depends on production. ## @@ -4456,7 +4425,7 @@ PARALLEL_MAKE="" FORTRAN_PARALLEL_MAKE="" if test -n "$TESTPARALLEL"; then - PARALLEL_MAKE="$TESTPARALLEL/Makefile $TESTPARALLEL/testph5.sh" + PARALLEL_MAKE="$TESTPARALLEL/Makefile" if test "X$HDF_FORTRAN" = "Xyes"; then FORTRAN_PARALLEL_MAKE=fortran/$TESTPARALLEL/Makefile @@ -4532,7 +4501,6 @@ AC_CONFIG_FILES([src/libhdf5.settings test/testlinks_env.sh test/test_plugin.sh testpar/Makefile - testpar/testph5.sh perform/Makefile tools/Makefile tools/h5dump/Makefile diff --git a/examples/Makefile.in b/examples/Makefile.in index a564dd4..394b996 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -180,7 +180,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/fortran/Makefile.in b/fortran/Makefile.in index 4196fe2..ca646ce 100644 --- a/fortran/Makefile.in +++ b/fortran/Makefile.in @@ -217,7 +217,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/fortran/examples/Makefile.in b/fortran/examples/Makefile.in index 1cc0825..53dc2b6 100644 --- a/fortran/examples/Makefile.in +++ b/fortran/examples/Makefile.in @@ -188,7 +188,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/fortran/src/H5FDmpiof.c b/fortran/src/H5FDmpiof.c index 993b5ac..bbdb170 100644 --- a/fortran/src/H5FDmpiof.c +++ b/fortran/src/H5FDmpiof.c @@ -220,87 +220,6 @@ nh5pget_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode) return ret_value; } -/****if* H5FDmpiof/h5pset_fapl_mpiposix_c - * NAME - * h5pset_fapl_mpiposix_c - * PURPOSE - * Call H5Pset_fapl_mpiposix to set mode for parallel I/O and the user - * supplied communicator - * INPUTS - * prp_id - property list identifier - * comm - MPI communicator - * flag - flag to use GPFS hints - * RETURNS - * 0 on success, -1 on failure - * AUTHOR - * Elena Pourmal - * Tuesday, May 6, 2003 - * HISTORY - * - * SOURCE -*/ -int_f -nh5pset_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag) -/******/ -{ - int ret_value = -1; - hid_t c_prp_id; - herr_t ret; - hbool_t c_flag; - MPI_Comm c_comm; - c_comm = MPI_Comm_f2c(*comm); - c_flag = (hbool_t)*flag; - /* - * Call H5Pset_fapl_mpiposix function. - */ - c_prp_id = (hid_t) *prp_id; - ret = H5Pset_fapl_mpiposix(c_prp_id, c_comm, c_flag); - if (ret < 0) return ret_value; - ret_value = 0; - return ret_value; -} - -/****if* H5FDmpiof/h5pget_fapl_mpiposix_c - * NAME - * h5pget_fapl_mpiposix_c - * PURPOSE - * Call H5Pget_fapl_mpiposix to retrieve communicator and info object - * INPUTS - * prp_id - property list identifier - * OUTPUTS - * comm - buffer to return MPI communicator - * flag - flag to use GPFS hints - * RETURNS - * 0 on success, -1 on failure - * AUTHOR - * Elena Pourmal - * Tuesday, May 6, 2003 - * HISTORY - * - * SOURCE -*/ -int_f -nh5pget_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag) -/******/ -{ - int ret_value = -1; - hid_t c_prp_id; - herr_t ret; - hbool_t c_flag; - MPI_Comm c_comm; - - /* - * Call H5Pget_fapl_mpiposix function. - */ - c_prp_id = (hid_t) *prp_id; - ret = H5Pget_fapl_mpiposix(c_prp_id, &c_comm, &c_flag); - if (ret < 0) return ret_value; - *comm = (int_f) MPI_Comm_c2f(c_comm); - *flag = (int_f) c_flag; - ret_value = 0; - return ret_value; -} - /****if* H5Pf/h5pget_mpio_actual_io_mode_c * NAME * h5pget_mpio_actual_io_mode_c diff --git a/fortran/src/H5FDmpioff.f90 b/fortran/src/H5FDmpioff.f90 index 5c81bc8..50a77d9 100644 --- a/fortran/src/H5FDmpioff.f90 +++ b/fortran/src/H5FDmpioff.f90 @@ -131,6 +131,7 @@ CONTAINS INTEGER, EXTERNAL :: h5pset_dxpl_mpio_c hdferr = h5pset_dxpl_mpio_c(prp_id, data_xfer_mode) END SUBROUTINE h5pset_dxpl_mpio_f + !****s* H5FDMPIO/h5pget_dxpl_mpio_f ! ! NAME @@ -164,76 +165,6 @@ CONTAINS hdferr = h5pget_dxpl_mpio_c(prp_id, data_xfer_mode) END SUBROUTINE h5pget_dxpl_mpio_f -!****s* H5FDMPIO/h5pset_fapl_mpiposix_f -! -! NAME -! h5pset_fapl_mpiposix_f -! -! PURPOSE -! Stores MPI IO communicator information to the file -! access property list. -! -! INPUTS -! prp_id - File access property list identifier. -! comm - MPI-2 communicator. -! use_gpfs - Logical flag to use the GPFS hints. -! OUTPUTS -! hdferr - Returns 0 if successful and -1 if fails. -! -! AUTHOR -! Elena Pourmal -! May 6, 2003 -! -! Fortran90 Interface: - SUBROUTINE h5pset_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr) - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: prp_id - INTEGER, INTENT(IN) :: comm - LOGICAL, INTENT(IN) :: use_gpfs - INTEGER, INTENT(OUT) :: hdferr -!***** - INTEGER :: flag - INTEGER, EXTERNAL :: h5pset_fapl_mpiposix_c - flag = 0 - IF(use_gpfs) flag = 1 - hdferr = h5pset_fapl_mpiposix_c(prp_id, comm, flag) - END SUBROUTINE h5pset_fapl_mpiposix_f - -!****s* H5FDMPIO/h5pget_fapl_mpiposix_f -! -! NAME -! h5pget_fapl_mpiposix_f -! -! PURPOSE -! Returns MPI communicator information. -! -! INPUTS -! prp_id - File access property list identifier. -! OUTPUTS -! comm - MPI-2 communicator. -! use_gpfs - Flag to use GPFS hints. -! hdferr - Returns 0 if successful and -1 if fails. -! AUTHOR -! Elena Pourmal -! May 6, 2003 -! -! Fortran90 Interface: - SUBROUTINE h5pget_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr) - IMPLICIT NONE - INTEGER(HID_T), INTENT(IN) :: prp_id - INTEGER, INTENT(OUT) :: comm - LOGICAL, INTENT(OUT) :: use_gpfs - INTEGER, INTENT(OUT) :: hdferr -!***** - INTEGER :: flag - - INTEGER, EXTERNAL :: h5pget_fapl_mpiposix_c - hdferr = h5pget_fapl_mpiposix_c(prp_id, comm, flag) - use_gpfs = .FALSE. - IF (flag .EQ. 1) use_gpfs = .TRUE. - END SUBROUTINE h5pget_fapl_mpiposix_f - - !****s* H5P/h5pget_mpio_actual_io_mode_f ! NAME ! h5pget_mpio_actual_io_mode_f diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h index 2c5e9a1..ae848bf 100644 --- a/fortran/src/H5f90proto.h +++ b/fortran/src/H5f90proto.h @@ -914,8 +914,6 @@ H5_FCDLL int_f nh5oget_comment_by_name_c (hid_t_f *loc_id, _fcd name, size_t_f * #define nh5pset_btree_ratios_c H5_FC_FUNC_(h5pset_btree_ratios_c, H5PSET_BTREE_RATIOS_C) #define nh5pset_fapl_mpio_c H5_FC_FUNC_(h5pset_fapl_mpio_c, H5PSET_FAPL_MPIO_C) #define nh5pget_fapl_mpio_c H5_FC_FUNC_(h5pget_fapl_mpio_c, H5PGET_FAPL_MPIO_C) -#define nh5pset_fapl_mpiposix_c H5_FC_FUNC_(h5pset_fapl_mpiposix_c, H5PSET_FAPL_MPIPOSIX_C) -#define nh5pget_fapl_mpiposix_c H5_FC_FUNC_(h5pget_fapl_mpiposix_c, H5PGET_FAPL_MPIPOSIX_C) #define nh5pset_dxpl_mpio_c H5_FC_FUNC_(h5pset_dxpl_mpio_c, H5PSET_DXPL_MPIO_C) #define nh5pget_dxpl_mpio_c H5_FC_FUNC_(h5pget_dxpl_mpio_c, H5PGET_DXPL_MPIO_C) #define nh5pget_fclose_degree_c H5_FC_FUNC_(h5pget_fclose_degree_c, H5PGET_FCLOSE_DEGREE_C) @@ -1072,8 +1070,6 @@ H5_FCDLL int_f nh5pget_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* mid H5_FCDLL int_f nh5pset_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* right); H5_FCDLL int_f nh5pget_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info); H5_FCDLL int_f nh5pset_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info); -H5_FCDLL int_f nh5pget_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag); -H5_FCDLL int_f nh5pset_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag); H5_FCDLL int_f nh5pget_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode); H5_FCDLL int_f nh5pset_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode); H5_FCDLL int_f nh5pset_fclose_degree_c(hid_t_f *fapl, int_f *degree); diff --git a/fortran/src/Makefile.in b/fortran/src/Makefile.in index 7845bb8..c566ee2 100644 --- a/fortran/src/Makefile.in +++ b/fortran/src/Makefile.in @@ -306,7 +306,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/fortran/src/hdf5_fortrandll.def.in b/fortran/src/hdf5_fortrandll.def.in index 62030f0..c549d34 100644 --- a/fortran/src/hdf5_fortrandll.def.in +++ b/fortran/src/hdf5_fortrandll.def.in @@ -567,6 +567,4 @@ H5Z_mp_H5ZGET_FILTER_INFO_F @H5_NOPAREXP@H5FDMPIO_mp_H5PGET_FAPL_MPIO_F
@H5_NOPAREXP@H5FDMPIO_mp_H5PSET_DXPL_MPIO_F
@H5_NOPAREXP@H5FDMPIO_mp_H5PGET_DXPL_MPIO_F
-@H5_NOPAREXP@H5FDMPIO_mp_H5PSET_FAPL_MPIPOSIX_F
-@H5_NOPAREXP@H5FDMPIO_mp_H5PGET_FAPL_MPIPOSIX_F
@H5_NOPAREXP@H5FDMPIO_mp_H5PGET_MPIO_ACTUAL_IO_MODE_F
diff --git a/fortran/test/Makefile.in b/fortran/test/Makefile.in index 9f8b6d0..9db74e8 100644 --- a/fortran/test/Makefile.in +++ b/fortran/test/Makefile.in @@ -291,7 +291,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/fortran/testpar/Makefile.in b/fortran/testpar/Makefile.in index 1903529..60f24b9 100644 --- a/fortran/testpar/Makefile.in +++ b/fortran/testpar/Makefile.in @@ -215,7 +215,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/Makefile.in b/hl/Makefile.in index 6ca962b..8b00085 100644 --- a/hl/Makefile.in +++ b/hl/Makefile.in @@ -217,7 +217,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/c++/Makefile.in b/hl/c++/Makefile.in index 210fcc5..a63388c 100644 --- a/hl/c++/Makefile.in +++ b/hl/c++/Makefile.in @@ -213,7 +213,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/c++/examples/Makefile.in b/hl/c++/examples/Makefile.in index 1e66687..a3be41c 100644 --- a/hl/c++/examples/Makefile.in +++ b/hl/c++/examples/Makefile.in @@ -179,7 +179,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/c++/src/Makefile.in b/hl/c++/src/Makefile.in index c13f26a..06e6dea 100644 --- a/hl/c++/src/Makefile.in +++ b/hl/c++/src/Makefile.in @@ -250,7 +250,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/c++/test/Makefile.in b/hl/c++/test/Makefile.in index c873d32..de668da 100644 --- a/hl/c++/test/Makefile.in +++ b/hl/c++/test/Makefile.in @@ -212,7 +212,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/examples/Makefile.in b/hl/examples/Makefile.in index ee4d885..8ff7579 100644 --- a/hl/examples/Makefile.in +++ b/hl/examples/Makefile.in @@ -179,7 +179,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/fortran/Makefile.in b/hl/fortran/Makefile.in index 8cb74cd..be754a2 100644 --- a/hl/fortran/Makefile.in +++ b/hl/fortran/Makefile.in @@ -217,7 +217,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/fortran/examples/Makefile.in b/hl/fortran/examples/Makefile.in index 8413c2d..ea66cab 100644 --- a/hl/fortran/examples/Makefile.in +++ b/hl/fortran/examples/Makefile.in @@ -180,7 +180,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/fortran/src/Makefile.in b/hl/fortran/src/Makefile.in index 37aac6b..3a9d569 100644 --- a/hl/fortran/src/Makefile.in +++ b/hl/fortran/src/Makefile.in @@ -263,7 +263,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/fortran/test/Makefile.in b/hl/fortran/test/Makefile.in index 024cb0f..899ec62 100644 --- a/hl/fortran/test/Makefile.in +++ b/hl/fortran/test/Makefile.in @@ -226,7 +226,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/src/Makefile.in b/hl/src/Makefile.in index f9f73c8..733049c 100644 --- a/hl/src/Makefile.in +++ b/hl/src/Makefile.in @@ -246,7 +246,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/test/Makefile.in b/hl/test/Makefile.in index 5639844..588d867 100644 --- a/hl/test/Makefile.in +++ b/hl/test/Makefile.in @@ -253,7 +253,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/tools/Makefile.in b/hl/tools/Makefile.in index 7d887f5..98095bb 100644 --- a/hl/tools/Makefile.in +++ b/hl/tools/Makefile.in @@ -214,7 +214,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/hl/tools/gif2h5/Makefile.in b/hl/tools/gif2h5/Makefile.in index e587f5f..54754ba 100644 --- a/hl/tools/gif2h5/Makefile.in +++ b/hl/tools/gif2h5/Makefile.in @@ -228,7 +228,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/perform/Makefile.in b/perform/Makefile.in index 091f4f1..fe9d184 100644 --- a/perform/Makefile.in +++ b/perform/Makefile.in @@ -254,7 +254,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/perform/benchpar.c b/perform/benchpar.c index 24146e4..b75006a 100644 --- a/perform/benchpar.c +++ b/perform/benchpar.c @@ -44,7 +44,6 @@ /* defines for type of VFL driver to use */ #define FACC_DEFAULT 0 #define FACC_MPIO 1 -#define FACC_MPIPOSIX 2 /* Defines for computing performance information */ #define ONE_KB 1024 @@ -78,7 +77,7 @@ char mpi_name[MPI_MAX_PROCESSOR_NAME]; static void usage(void) { printf("usage: benchpar [-d <# of dims>] [-s <dim_size>] [-f <file name>] [-h]\n"); - printf(" [-S <slice dim>] [-p] [-I] [-c] [-i <# of iterations>\n"); + printf(" [-S <slice dim>] [-I] [-c] [-i <# of iterations>\n"); printf(" -c - Use chunked storage for dataset with 1-1 exact\n"); printf(" mapping of chunks to hyperslabs\n"); printf(" Default: off (i.e. contiguous storage)\n"); @@ -91,8 +90,6 @@ static void usage(void) printf(" Default: 3\n"); printf(" -I - Use independent parallel I/O\n"); printf(" Default: use collective parallel I/O\n"); - printf(" -p - Use MPI-posix VFL driver\n"); - printf(" Default: use MPI-I/O VFL driver\n"); printf(" -s <dim_size> - Set the size of each of the dataset's dimensions\n"); printf(" Default: 1024\n"); printf(" -S <slice dim> - Set the dimension to slice the dataset along\n"); @@ -114,7 +111,6 @@ static hid_t create_fcpl(void) static hid_t create_fapl(MPI_Comm comm, MPI_Info info, int acc_type ) { hid_t fapl; /* File access property list */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ herr_t ret; /* Generic return value */ fapl = H5Pcreate (H5P_FILE_ACCESS); @@ -122,13 +118,7 @@ static hid_t create_fapl(MPI_Comm comm, MPI_Info info, int acc_type ) /* set parallel access with communicator, using MPI-I/O driver */ if (acc_type == FACC_MPIO) { - ret = H5Pset_fapl_mpio(fapl, comm, info); - assert(ret>=0); - } /* end if */ - - /* set parallel access with communicator, using MPI-posix driver */ - if (acc_type == FACC_MPIPOSIX) { - ret = H5Pset_fapl_mpiposix(fapl, comm, use_gpfs); + ret = H5Pset_fapl_mpio(fapl, comm, info); assert(ret>=0); } /* end if */ @@ -279,10 +269,6 @@ int main(int argc, char *argv[]) par_mode=H5FD_MPIO_INDEPENDENT; break; - case 'p': /* Use MPI-posix VFL driver */ - vfl_type=FACC_MPIPOSIX; - break; - case 's': /* Change dimension size */ /* Get new dimension size */ dim_size=atoi(argv[curr_arg]); @@ -469,7 +455,7 @@ int main(int argc, char *argv[]) /* Only print information from one node */ if(mpi_rank==0) { /* Print information about test */ - printf("File driver used: %s\n",vfl_type==FACC_MPIO ? "MPI-I/O" : "MPI-posix"); + printf("File driver used: %s\n",vfl_type==FACC_MPIO ? "MPI-I/O" : "Unknown"); printf("Type of parallel access: %s\n",par_mode==H5FD_MPIO_COLLECTIVE ? "Collective" : "Independent"); printf("Type of dataset storage: %s\n",use_chunks ? "Chunked" : "Contiguous"); printf("Number of processes: %d\n",mpi_size); diff --git a/perform/perf_meta.c b/perform/perf_meta.c index 8c3b06f..b52871e 100644 --- a/perform/perf_meta.c +++ b/perform/perf_meta.c @@ -29,7 +29,6 @@ /* File_Access_type bits */ #define FACC_DEFAULT 0x0 /* serial as default */ #define FACC_MPIO 0x1 /* MPIO */ -#define FACC_MPIPOSIX 0x8 /* MPIPOSIX */ /* Which test to run */ int RUN_TEST = 0x0; /* all tests as default */ @@ -129,11 +128,7 @@ parse_options(int argc, char **argv) } break; - case 'p': /* Use the MPI-POSIX driver access */ - facc_type = FACC_MPIPOSIX; - break; - - case 'm': /* Use the MPI-POSIX driver access */ + case 'm': /* Use the MPI-IO driver */ facc_type = FACC_MPIO; break; @@ -171,7 +166,7 @@ parse_options(int argc, char **argv) /* Check valid values */ #ifndef H5_HAVE_PARALLEL - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) + if(facc_type == FACC_MPIO) { nerrors++; return(1); @@ -215,19 +210,15 @@ parse_options(int argc, char **argv) static void usage(void) { - printf("Usage: perf_meta [-h] [-m] [-p] [-d<num_datasets>]" + printf("Usage: perf_meta [-h] [-m] [-d<num_datasets>]" "[-a<num_attributes>]\n" "\t[-n<batch_attributes>] [-f<option>] [-t<test>]\n"); printf("\t-h" "\t\t\thelp page.\n"); printf("\t-m" "\t\t\tset MPIO as the file driver when parallel HDF5\n" - "\t\t\t\tis enabled. Either -m or -p has be to \n" - "\t\t\t\tspecified when running parallel program.\n"); - printf("\t-p" - "\t\t\tset MPI POSIX as the file driver when parallel \n" - "\t\t\t\tHDF5 is enabled. Either -m or -p has be to \n" - "\t\t\t\tspecified when running parallel program.\n"); + "\t\t\t\tis enabled. -m must be specified\n" + "\t\t\t\twhen running parallel program.\n"); printf("\t-d<num_datasets>" "\tset number of datasets for meta data \n" "\t\t\t\tperformance test\n"); @@ -372,7 +363,7 @@ create_attrs_1(void) #ifdef H5_HAVE_PARALLEL /* need the rank for printing data */ int mpi_rank; - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) + if(facc_type == FACC_MPIO) MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); #endif /*H5_HAVE_PARALLEL*/ @@ -416,7 +407,7 @@ create_attrs_1(void) goto error; } /* end for */ - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) { + if(facc_type == FACC_MPIO) { #ifdef H5_HAVE_PARALLEL MPI_Barrier(MPI_COMM_WORLD); #endif /*H5_HAVE_PARALLEL*/ @@ -478,7 +469,7 @@ create_attrs_2(void) #ifdef H5_HAVE_PARALLEL /* need the rank for printing data */ int mpi_rank; - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) + if(facc_type == FACC_MPIO) MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); #endif /*H5_HAVE_PARALLEL*/ @@ -519,11 +510,10 @@ create_attrs_2(void) goto error; } /* end for */ - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) { #ifdef H5_HAVE_PARALLEL - MPI_Barrier(MPI_COMM_WORLD); + if(facc_type == FACC_MPIO) + MPI_Barrier(MPI_COMM_WORLD); #endif /*H5_HAVE_PARALLEL*/ - } #ifdef H5_HAVE_PARALLEL /* only process 0 reports if parallel */ @@ -584,7 +574,7 @@ create_attrs_3(void) #ifdef H5_HAVE_PARALLEL /* need the rank for printing data */ int mpi_rank; - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) + if(facc_type == FACC_MPIO) MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); #endif /*H5_HAVE_PARALLEL*/ @@ -633,11 +623,10 @@ create_attrs_3(void) } /* end for */ } /* end for */ - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) { #ifdef H5_HAVE_PARALLEL + if(facc_type == FACC_MPIO) MPI_Barrier(MPI_COMM_WORLD); #endif /*H5_HAVE_PARALLEL*/ - } #ifdef H5_HAVE_PARALLEL /* only process 0 reports if parallel */ @@ -709,8 +698,8 @@ void perf(p_time *perf_t, double start_t, double end_t) { double t = end_t - start_t; - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) { #ifdef H5_HAVE_PARALLEL + if(facc_type == FACC_MPIO) { double reduced_t; double t_max, t_min; int mpi_size, mpi_rank; @@ -736,8 +725,9 @@ void perf(p_time *perf_t, double start_t, double end_t) if(t_min < perf_t->min) perf_t->min = t_min; } + } else #endif /*H5_HAVE_PARALLEL*/ - } else { + { perf_t->total += t; if(t > perf_t->max) @@ -796,17 +786,17 @@ main(int argc, char **argv) #endif /*H5_HAVE_PARALLEL*/ if(parse_options(argc, argv) != 0) { - usage(); - return 0; + usage(); + return 0; } - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) { #ifdef H5_HAVE_PARALLEL + if(facc_type == FACC_MPIO) { MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); -#endif /*H5_HAVE_PARALLEL*/ } +#endif /*H5_HAVE_PARALLEL*/ #ifdef H5_HAVE_PARALLEL if (facc_type == FACC_DEFAULT || (facc_type != FACC_DEFAULT && MAINPROCESS)) @@ -814,14 +804,10 @@ main(int argc, char **argv) fprintf(stderr, "\t\tPerformance result of metadata for datasets and attributes\n\n"); fapl = H5Pcreate (H5P_FILE_ACCESS); - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) { #ifdef H5_HAVE_PARALLEL - if(facc_type == FACC_DEFAULT || facc_type == FACC_MPIO) - H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL); - else if(facc_type == FACC_MPIPOSIX) - H5Pset_fapl_mpiposix(fapl, MPI_COMM_WORLD, FALSE); + if(facc_type == FACC_MPIO) + H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL); #endif /*H5_HAVE_PARALLEL*/ - } nerrors += create_dspace() < 0 ?1:0; @@ -837,12 +823,11 @@ main(int argc, char **argv) h5_cleanup(FILENAME, fapl); - if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) { #ifdef H5_HAVE_PARALLEL + if(facc_type == FACC_MPIO) /* MPI_Finalize must be called AFTER H5close which may use MPI calls */ MPI_Finalize(); #endif /*H5_HAVE_PARALLEL*/ - } if (nerrors) goto error; #ifdef H5_HAVE_PARALLEL diff --git a/perform/pio_engine.c b/perform/pio_engine.c index d34fe38..82d1bb8 100644 --- a/perform/pio_engine.c +++ b/perform/pio_engine.c @@ -37,10 +37,6 @@ # include <mpio.h> #endif /* !MPI_FILE_NULL */ -#ifdef H5_HAVE_GPFS -# include <gpfs_fcntl.h> -#endif /* H5_HAVE_GPFS */ - #include "pio_perf.h" #include "pio_timer.h" @@ -135,19 +131,6 @@ static herr_t do_fopen(parameters *param, char *fname, file_descr *fd /*out*/, static herr_t do_fclose(iotype iot, file_descr *fd); static void do_cleanupfile(iotype iot, char *fname); -/* GPFS-specific functions */ -#ifdef H5_HAVE_GPFS -static void gpfs_access_range(int handle, off_t start, off_t length, int is_write); -static void gpfs_free_range(int handle, off_t start, off_t length); -static void gpfs_clear_file_cache(int handle); -static void gpfs_cancel_hints(int handle); -static void gpfs_start_data_shipping(int handle, int num_insts); -static void gpfs_start_data_ship_map(int handle, int partition_size, - int agent_count, int *agent_node_num); -static void gpfs_stop_data_shipping(int handle); -static void gpfs_invalidate_file_cache(const char *filename); -#endif /* H5_HAVE_GPFS */ - /* * Function: do_pio * Purpose: PIO Engine where Parallel IO are executed. @@ -189,22 +172,22 @@ do_pio(parameters param) iot = param.io_type; switch (iot) { - case MPIO: - fd.mpifd = MPI_FILE_NULL; - res.timers = pio_time_new(MPI_TIMER); - break; - case POSIXIO: - fd.posixfd = -1; - res.timers = pio_time_new(MPI_TIMER); - break; - case PHDF5: - fd.h5fd = -1; - res.timers = pio_time_new(MPI_TIMER); - break; - default: - /* unknown request */ - fprintf(stderr, "Unknown IO type request (%d)\n", iot); - GOTOERROR(FAIL); + case MPIO: + fd.mpifd = MPI_FILE_NULL; + res.timers = pio_time_new(MPI_TIMER); + break; + case POSIXIO: + fd.posixfd = -1; + res.timers = pio_time_new(MPI_TIMER); + break; + case PHDF5: + fd.h5fd = -1; + res.timers = pio_time_new(MPI_TIMER); + break; + default: + /* unknown request */ + fprintf(stderr, "Unknown IO type request (%d)\n", iot); + GOTOERROR(FAIL); } ndsets = param.num_dsets; /* number of datasets per file */ @@ -379,18 +362,18 @@ done: /* close any opened files */ /* no remove(fname) because that should have happened normally. */ switch (iot) { - case POSIXIO: - if (fd.posixfd != -1) - hrc = do_fclose(iot, &fd); - break; - case MPIO: - if (fd.mpifd != MPI_FILE_NULL) - hrc = do_fclose(iot, &fd); - break; - case PHDF5: - if (fd.h5fd != -1) - hrc = do_fclose(iot, &fd); - break; + case POSIXIO: + if (fd.posixfd != -1) + hrc = do_fclose(iot, &fd); + break; + case MPIO: + if (fd.mpifd != MPI_FILE_NULL) + hrc = do_fclose(iot, &fd); + break; + case PHDF5: + if (fd.h5fd != -1) + hrc = do_fclose(iot, &fd); + break; } /* release generic resources */ @@ -423,15 +406,15 @@ pio_create_filename(iotype iot, const char *base_name, char *fullname, size_t si HDmemset(fullname, 0, size); switch (iot) { - case POSIXIO: - suffix = ".posix"; - break; - case MPIO: - suffix = ".mpio"; - break; - case PHDF5: - suffix = ".h5"; - break; + case POSIXIO: + suffix = ".posix"; + break; + case MPIO: + suffix = ".mpio"; + break; + case PHDF5: + suffix = ".h5"; + break; } /* First use the environment variable and then try the constant */ @@ -886,60 +869,59 @@ do_write(results *res, file_descr *fd, parameters *parms, long ndsets, switch (parms->io_type) { case POSIXIO: case MPIO: - /* both posix and mpi io just need dataset offset in file*/ - dset_offset = (ndset - 1) * nbytes; - break; + /* both posix and mpi io just need dataset offset in file*/ + dset_offset = (ndset - 1) * nbytes; + break; case PHDF5: - h5dcpl = H5Pcreate(H5P_DATASET_CREATE); - if (h5dcpl < 0) { - fprintf(stderr, "HDF5 Property List Create failed\n"); - GOTOERROR(FAIL); - } - /* 1D dataspace */ - if (!parms->dim2d){ - /* Make the dataset chunked if asked */ - if(parms->h5_use_chunks) { - /* Set the chunk size to be the same as the buffer size */ - h5dims[0] = blk_size; - hrc = H5Pset_chunk(h5dcpl, 1, h5dims); - if (hrc < 0) { - fprintf(stderr, "HDF5 Property List Set failed\n"); - GOTOERROR(FAIL); - } /* end if */ - } /* end if */ - }/* end if */ - else{ - /* 2D dataspace */ - if(parms->h5_use_chunks) { - /* Set the chunk size to be the same as the block size */ - h5dims[0] = blk_size; - h5dims[1] = blk_size; - hrc = H5Pset_chunk(h5dcpl, 2, h5dims); - if (hrc < 0) { - fprintf(stderr, "HDF5 Property List Set failed\n"); + h5dcpl = H5Pcreate(H5P_DATASET_CREATE); + if (h5dcpl < 0) { + fprintf(stderr, "HDF5 Property List Create failed\n"); GOTOERROR(FAIL); - } /* end if */ - } /* end if */ - }/* end else */ - - sprintf(dname, "Dataset_%ld", ndset); - h5ds_id = H5DCREATE(fd->h5fd, dname, ELMT_H5_TYPE, - h5dset_space_id, h5dcpl); + } + /* 1D dataspace */ + if (!parms->dim2d){ + /* Make the dataset chunked if asked */ + if(parms->h5_use_chunks) { + /* Set the chunk size to be the same as the buffer size */ + h5dims[0] = blk_size; + hrc = H5Pset_chunk(h5dcpl, 1, h5dims); + if (hrc < 0) { + fprintf(stderr, "HDF5 Property List Set failed\n"); + GOTOERROR(FAIL); + } /* end if */ + } /* end if */ + }/* end if */ + else{ + /* 2D dataspace */ + if(parms->h5_use_chunks) { + /* Set the chunk size to be the same as the block size */ + h5dims[0] = blk_size; + h5dims[1] = blk_size; + hrc = H5Pset_chunk(h5dcpl, 2, h5dims); + if (hrc < 0) { + fprintf(stderr, "HDF5 Property List Set failed\n"); + GOTOERROR(FAIL); + } /* end if */ + } /* end if */ + }/* end else */ - if (h5ds_id < 0) { - fprintf(stderr, "HDF5 Dataset Create failed\n"); - GOTOERROR(FAIL); - } + sprintf(dname, "Dataset_%ld", ndset); + h5ds_id = H5DCREATE(fd->h5fd, dname, ELMT_H5_TYPE, + h5dset_space_id, h5dcpl); - hrc = H5Pclose(h5dcpl); - /* verifying the close of the dcpl */ - if (hrc < 0) { - fprintf(stderr, "HDF5 Property List Close failed\n"); - GOTOERROR(FAIL); - } + if (h5ds_id < 0) { + fprintf(stderr, "HDF5 Dataset Create failed\n"); + GOTOERROR(FAIL); + } - break; + hrc = H5Pclose(h5dcpl); + /* verifying the close of the dcpl */ + if (hrc < 0) { + fprintf(stderr, "HDF5 Property List Close failed\n"); + GOTOERROR(FAIL); + } + break; } /* The task is to transfer bytes_count bytes, starting at @@ -2462,119 +2444,96 @@ done: do_fopen(parameters *param, char *fname, file_descr *fd /*out*/, int flags) { int ret_code = SUCCESS, mrc; - herr_t hrc; hid_t acc_tpl = -1; /* file access templates */ - hbool_t use_gpfs = FALSE; /* use GPFS hints */ switch (param->io_type) { - case POSIXIO: - if (flags & (PIO_CREATE | PIO_WRITE)) - fd->posixfd = POSIXCREATE(fname); - else - fd->posixfd = POSIXOPEN(fname, O_RDONLY); - - if (fd->posixfd < 0 ) { - fprintf(stderr, "POSIX File Open failed(%s)\n", fname); - GOTOERROR(FAIL); - } - - - /* The perils of POSIX I/O in a parallel environment. The problem is: - * - * - Process n opens a file with truncation and then starts - * writing to the file. - * - Process m also opens the file with truncation, but after - * process n has already started to write to the file. Thus, - * all of the stuff process n wrote is now lost. - */ - MPI_Barrier(pio_comm_g); - - break; - - case MPIO: - if (flags & (PIO_CREATE | PIO_WRITE)) { - MPI_File_delete(fname, h5_io_info_g); - mrc = MPI_File_open(pio_comm_g, fname, MPI_MODE_CREATE | MPI_MODE_RDWR, - h5_io_info_g, &fd->mpifd); + case POSIXIO: + if (flags & (PIO_CREATE | PIO_WRITE)) + fd->posixfd = POSIXCREATE(fname); + else + fd->posixfd = POSIXOPEN(fname, O_RDONLY); - if (mrc != MPI_SUCCESS) { - fprintf(stderr, "MPI File Open failed(%s)\n", fname); - GOTOERROR(FAIL); - } + if (fd->posixfd < 0 ) { + fprintf(stderr, "POSIX File Open failed(%s)\n", fname); + GOTOERROR(FAIL); + } - /*since MPI_File_open with MPI_MODE_CREATE does not truncate */ - /*filesize , set size to 0 explicitedly. */ - mrc = MPI_File_set_size(fd->mpifd, (MPI_Offset)0); - if (mrc != MPI_SUCCESS) { - fprintf(stderr, "MPI_File_set_size failed\n"); - GOTOERROR(FAIL); - } - } else { - mrc = MPI_File_open(pio_comm_g, fname, MPI_MODE_RDONLY, - h5_io_info_g, &fd->mpifd); + /* The perils of POSIX I/O in a parallel environment. The problem is: + * + * - Process n opens a file with truncation and then starts + * writing to the file. + * - Process m also opens the file with truncation, but after + * process n has already started to write to the file. Thus, + * all of the stuff process n wrote is now lost. + */ + MPI_Barrier(pio_comm_g); - if (mrc != MPI_SUCCESS) { - fprintf(stderr, "MPI File Open failed(%s)\n", fname); - GOTOERROR(FAIL); - } - } + break; - break; + case MPIO: + if (flags & (PIO_CREATE | PIO_WRITE)) { + MPI_File_delete(fname, h5_io_info_g); + mrc = MPI_File_open(pio_comm_g, fname, MPI_MODE_CREATE | MPI_MODE_RDWR, + h5_io_info_g, &fd->mpifd); + + if (mrc != MPI_SUCCESS) { + fprintf(stderr, "MPI File Open failed(%s)\n", fname); + GOTOERROR(FAIL); + } - case PHDF5: - acc_tpl = H5Pcreate(H5P_FILE_ACCESS); - if (acc_tpl < 0) { - fprintf(stderr, "HDF5 Property List Create failed\n"); - GOTOERROR(FAIL); - } + /*since MPI_File_open with MPI_MODE_CREATE does not truncate */ + /*filesize , set size to 0 explicitedly. */ + mrc = MPI_File_set_size(fd->mpifd, (MPI_Offset)0); + if (mrc != MPI_SUCCESS) { + fprintf(stderr, "MPI_File_set_size failed\n"); + GOTOERROR(FAIL); + } + } else { + mrc = MPI_File_open(pio_comm_g, fname, MPI_MODE_RDONLY, h5_io_info_g, &fd->mpifd); + if (mrc != MPI_SUCCESS) { + fprintf(stderr, "MPI File Open failed(%s)\n", fname); + GOTOERROR(FAIL); + } + } - /* Use the appropriate VFL driver */ - if(param->h5_use_mpi_posix) { - /* Set the file driver to the MPI-posix driver */ - hrc = H5Pset_fapl_mpiposix(acc_tpl, pio_comm_g, use_gpfs); - if (hrc < 0) { - fprintf(stderr, "HDF5 Property List Set failed\n"); - GOTOERROR(FAIL); - } - } /* end if */ - else { - /* Set the file driver to the MPI-I/O driver */ - hrc = H5Pset_fapl_mpio(acc_tpl, pio_comm_g, h5_io_info_g); - if (hrc < 0) { - fprintf(stderr, "HDF5 Property List Set failed\n"); - GOTOERROR(FAIL); - } - } /* end else */ + break; - /* Set the alignment of objects in HDF5 file */ - hrc = H5Pset_alignment(acc_tpl, param->h5_thresh, param->h5_align); - if (hrc < 0) { - fprintf(stderr, "HDF5 Property List Set failed\n"); - GOTOERROR(FAIL); - } + case PHDF5: + if ((acc_tpl = H5Pcreate(H5P_FILE_ACCESS)) < 0) { + fprintf(stderr, "HDF5 Property List Create failed\n"); + GOTOERROR(FAIL); + } - /* create the parallel file */ - if (flags & (PIO_CREATE | PIO_WRITE)) { - fd->h5fd = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl); - } else { - fd->h5fd = H5Fopen(fname, H5F_ACC_RDONLY, acc_tpl); - } + /* Set the file driver to the MPI-IO driver */ + if (H5Pset_fapl_mpio(acc_tpl, pio_comm_g, h5_io_info_g) < 0) { + fprintf(stderr, "HDF5 Property List Set failed\n"); + GOTOERROR(FAIL); + } - hrc = H5Pclose(acc_tpl); + /* Set the alignment of objects in HDF5 file */ + if (H5Pset_alignment(acc_tpl, param->h5_thresh, param->h5_align) < 0) { + fprintf(stderr, "HDF5 Property List Set failed\n"); + GOTOERROR(FAIL); + } - if (fd->h5fd < 0) { - fprintf(stderr, "HDF5 File Create failed(%s)\n", fname); - GOTOERROR(FAIL); - } + /* create the parallel file */ + if (flags & (PIO_CREATE | PIO_WRITE)) + fd->h5fd = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl); + else + fd->h5fd = H5Fopen(fname, H5F_ACC_RDONLY, acc_tpl); + if (fd->h5fd < 0) { + fprintf(stderr, "HDF5 File Create failed(%s)\n", fname); + GOTOERROR(FAIL); + } - /* verifying the close of the acc_tpl */ - if (hrc < 0) { - fprintf(stderr, "HDF5 Property List Close failed\n"); - GOTOERROR(FAIL); - } + /* verifying the close of the acc_tpl */ + if (H5Pclose(acc_tpl) < 0) { + fprintf(stderr, "HDF5 Property List Close failed\n"); + GOTOERROR(FAIL); + } - break; + break; } done: @@ -2665,449 +2624,6 @@ do_cleanupfile(iotype iot, char *fname) } } -#ifdef H5_HAVE_GPFS - -/* Descriptions here come from the IBM GPFS Manual */ - -/* - * Function: gpfs_access_range - * Purpose: Declares an access range within a file for an - * application. - * - * The application will access file offsets within the given - * range, and will not access offsets outside the range. - * Violating this hint may produce worse performance than if - * no hint was specified. - * - * This hint is useful in situations where a file is - * partitioned coarsely among several nodes. If the ranges - * do not overlap, each node can specify which range of the - * file it will access, with a performance improvement in - * some cases, such as for sequential writing within a - * range. - * - * Subsequent GPFS_ACCESS_RANGE hints will replace a hint - * passed earlier. - * - * START - The start of the access range offset, in - * bytes, from the beginning of the file - * LENGTH - Length of the access range. 0 indicates to - * the end of the file - * IS_WRITE - 0 indicates READ access, 1 indicates WRITE access - * Return: Nothing - * Programmer: Bill Wendling, 03. June 2002 - * Modifications: - */ - static void -gpfs_access_range(int handle, off_t start, off_t length, int is_write) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsAccessRange_t access; - } access_range; - - access_range.hdr.totalLength = sizeof(access_range); - access_range.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - access_range.hdr.fcntlReserved = 0; - access_range.access.structLen = sizeof(gpfsAccessRange_t); - access_range.access.structType = GPFS_ACCESS_RANGE; - access_range.access.start = start; - access_range.access.length = length; - access_range.access.isWrite = is_write; - - if (gpfs_fcntl(handle, &access_range) != 0) { - fprintf(stderr, - "gpfs_fcntl DS start directive failed. errno=%d errorOffset=%d\n", - errno, access_range.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_free_range - * Purpose: Undeclares an access range within a file for an - * application. - * - * The application will no longer access file offsets within - * the given range. GPFS flushes the data at the file - * offsets and removes it from the cache. - * - * Multi-node applications that have finished one phase of - * their computation may wish to use this hint before the - * file is accessed in a conflicting mode from another node - * in a later phase. The potential performance benefit is - * that GPFS can avoid later synchronous cache consistency - * operations. - * - * START - The start of the access range offset, in - * bytes from the beginning of the file. - * LENGTH - Length of the access range. 0 indicates to - * the end of the file. - * Return: Nothing - * Programmer: Bill Wendling, 03. June 2002 - * Modifications: - */ - static void -gpfs_free_range(int handle, off_t start, off_t length) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsFreeRange_t range; - } free_range; - - /* Issue the invalidate hint */ - free_range.hdr.totalLength = sizeof(free_range); - free_range.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - free_range.hdr.fcntlReserved = 0; - free_range.range.structLen = sizeof(gpfsFreeRange_t); - free_range.range.structType = GPFS_FREE_RANGE; - free_range.range.start = start; - free_range.range.length = length; - - if (gpfs_fcntl(handle, &free_range) != 0) { - fprintf(stderr, - "gpfs_fcntl free range failed for range %d:%d. errno=%d errorOffset=%d\n", - start, length, errno, free_range.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_clear_file_cache - * Purpose: Indicates file access in the near future is not expected. - * - * The application does not expect to make any further - * accesses to the file in the near future, so GPFS removes - * any data or metadata pertaining to the file from its - * cache. - * - * Multi-node applications that have finished one phase of - * their computation may wish to use this hint before the - * file is accessed in a conflicting mode from another node - * in a later phase. The potential performance benefit is - * that GPFS can avoid later synchronous cache consistency - * operations. - * Return: Nothing - * Programmer: Bill Wendling, 03. June 2002 - * Modifications: - */ - static void -gpfs_clear_file_cache(int handle) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsClearFileCache_t clear; - } clear_cache; - - clear_cache.hdr.totalLength = sizeof(clear_cache); - clear_cache.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - clear_cache.hdr.fcntlReserved = 0; - clear_cache.clear.structLen = sizeof(gpfsClearFileCache_t); - clear_cache.clear.structType = GPFS_CLEAR_FILE_CACHE; - - if (gpfs_fcntl(handle, &clear_cache) != 0) { - fprintf(stderr, - "gpfs_fcntl clear file cache directive failed. errno=%d errorOffset=%d\n", - errno, clear_cache.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_cancel_hints - * Purpose: Indicates to remove any hints against the open file - * handle. - * - * GPFS removes any hints that may have been issued against - * this open file handle: - * - * - The hint status of the file is restored ot what it - * would have been immediately after being opened, but - * does not affect the contents of the GPFS file - * cache. Cancelling an earlier hint that resulted in - * data being removed from the GPFS file cache does - * not bring that data back int othe cache; data - * re-enters the cache only pon access by the - * application or by user-driven or automatic - * prefetching. - * - Only the GPFS_MULTIPLE_ACCESS_RANGE hint has a - * state that might be removed by the - * GPFS_CANCEL_HINTS directive. - * Return: Nothing - * Programmer: Bill Wendling, 03. June 2002 - * Modifications: - */ - static void -gpfs_cancel_hints(int handle) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsCancelHints_t cancel; - } cancel_hints; - - cancel_hints.hdr.totalLength = sizeof(cancel_hints); - cancel_hints.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - cancel_hints.hdr.fcntlReserved = 0; - cancel_hints.cancel.structLen = sizeof(gpfsCancelHints_t); - cancel_hints.cancel.structType = GPFS_CANCEL_HINTS; - - if (gpfs_fcntl(handle, &cancel_hints) != 0) { - fprintf(stderr, - "gpfs_fcntl cancel hints directive failed. errno=%d errorOffset=%d\n", - errno, cancel_hints.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_start_data_shipping - * Purpose: Initiates data shipping mode. - * - * Once all participating threads have issued this directive - * for a file, GPFS enters a mode where it logically - * partitions the blocks of the file among a group of agent - * nodes. The agents are those nodes on which one or more - * threads have issued the GPFS_DATA_SHIP_START directive. - * Each thread that has issued a GPFS_DATA_SHIP_START - * directive and the associated agent nodes are referred to - * as the data shipping collective. - * - * The second parameter is the total number of open - * instances on all nodes that will be operating on the - * file. Must be called for every such instance with the - * same value of NUM_INSTS. - * - * NUM_INSTS - The number of open file instances, on all - * nodes, collaborating to operate on the file - * Return: Nothing - * Programmer: Bill Wendling, 28. May 2002 - * Modifications: - */ - static void -gpfs_start_data_shipping(int handle, int num_insts) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsDataShipStart_t start; - } ds_start; - - ds_start.hdr.totalLength = sizeof(ds_start); - ds_start.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - ds_start.hdr.fcntlReserved = 0; - ds_start.start.structLen = sizeof(gpfsDataShipStart_t); - ds_start.start.structType = GPFS_DATA_SHIP_START; - ds_start.start.numInstances = num_insts; - ds_start.start.reserved = 0; - - if (gpfs_fcntl(handle, &ds_start) != 0) { - fprintf(stderr, - "gpfs_fcntl DS start directive failed. errno=%d errorOffset=%d\n", - errno, ds_start.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_start_data_ship_map - * Purpose: Indicates which agent nodes are to be used for data - * shipping. GPFS recognizes which agent nodes to use for - * data shipping. - * - * PARTITION_SIZE - The number of contiguous bytes per - * server. This value must be a - * multiple of the number of bytes in a - * single file system block - * AGENT_COUNT - The number of entries in the - * agentNodeNumber array - * AGENT_NODE_NUM - The data ship agent node numbers as - * listed in the SDT or the global ODM - * - * Return: Nothing - * Programmer: Bill Wendling, 10. Jul 2002 - * Modifications: - */ - static void -gpfs_start_data_ship_map(int handle, int partition_size, int agent_count, - int *agent_node_num) -{ - int i; - struct { - gpfsFcntlHeader_t hdr; - gpfsDataShipMap_t map; - } ds_map; - - ds_map.hdr.totalLength = sizeof(ds_map); - ds_map.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - ds_map.hdr.fcntlReserved = 0; - ds_map.map.structLen = sizeof(gpfsDataShipMap_t); - ds_map.map.structType = GPFS_DATA_SHIP_MAP; - ds_map.map.partitionSize = partition_size; - ds_map.map.agentCount = agent_count; - - for (i = 0; i < agent_count; ++i) - ds_map.map.agentNodeNumber[i] = agent_node_num[i]; - - if (gpfs_fcntl(handle, &ds_map) != 0) { - fprintf(stderr, - "gpfs_fcntl DS map directive failed. errno=%d errorOffset=%d\n", - errno, ds_map.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_stop_data_shipping - * Purpose: Takes a file out of the data shipping mode. - * - * - GPFS waits for all threads that issued the - * GPFS_DATA_SHIP_START directive to issue this directive, - * then flushes the dirty file data to disk. - * - * - While a gpfs_cntl() call is blocked for other threads, - * the call can be interrupted by any signal. If a signal - * is delivered to any of the waiting calls, all waiting - * calls on every node will be interrupted and will return - * EINTR. GPFS will not cancel data shipping mode if such - * a signal occurs. It is the responsibility of the - * application to mask off any signals that might normally - * occur while waiting for another node in the data - * shipping collective. Several libraries use SIGALRM; the - * thread that makes the gpfs_fcntl() call should use - * sigthreadmask to mask off delivery of this signal while - * inside the call. - * Return: Nothing - * Programmer: Bill Wendling, 28. May 2002 - * Modifications: - */ - static void -gpfs_stop_data_shipping(int handle) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsDataShipStop_t stop; - } ds_stop; - - ds_stop.hdr.totalLength = sizeof(ds_stop); - ds_stop.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - ds_stop.hdr.fcntlReserved = 0; - ds_stop.stop.structLen = sizeof(ds_stop.stop); - ds_stop.stop.structType = GPFS_DATA_SHIP_STOP; - - if (gpfs_fcntl(handle, &ds_stop) != 0) - fprintf(stderr, - "gpfs_fcntl DS stop directive failed. errno=%d errorOffset=%d\n", - errno, ds_stop.hdr.errorOffset); -} - -/* - * Function: gpfs_invalidate_file_cache - * Purpose: Invalidate all cached data held on behalf of a file on - * this node. - * Return: Nothing - * Programmer: Bill Wendling, 03. June 2002 - * Modifications: - */ - static void -gpfs_invalidate_file_cache(const char *filename) -{ - int handle; - struct { - gpfsFcntlHeader_t hdr; - gpfsClearFileCache_t inv; - } inv_cache_hint; - - /* Open the file. If the open fails, the file cannot be cached. */ - handle = open(filename, O_RDONLY, 0); - - if (handle == -1) - return; - - /* Issue the invalidate hint */ - inv_cache_hint.hdr.totalLength = sizeof(inv_cache_hint); - inv_cache_hint.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - inv_cache_hint.hdr.fcntlReserved = 0; - inv_cache_hint.inv.structLen = sizeof(gpfsClearFileCache_t); - inv_cache_hint.inv.structType = GPFS_CLEAR_FILE_CACHE; - - if (gpfs_fcntl(handle, &inv_cache_hint) != 0) { - fprintf(stderr, - "gpfs_fcntl clear cache hint failed for file '%s'.", - filename); - fprintf(stderr, " errno=%d errorOffset=%d\n", - errno, inv_cache_hint.hdr.errorOffset); - exit(EXIT_FAILURE); - } - - /* Close the file */ - if (close(handle) == -1) { - fprintf(stderr, - "could not close file '%s' after flushing file cache, ", - filename); - fprintf(stderr, "errno=%d\n", errno); - exit(EXIT_FAILURE); - } -} - -#else - -/* turn the stubs off since some compilers are warning they are not used */ -#if 0 -/* H5_HAVE_GPFS isn't defined...stub functions */ - - static void -gpfs_access_range(int UNUSED handle, off_t UNUSED start, off_t UNUSED length, - int UNUSED is_write) -{ - return; -} - - static void -gpfs_free_range(int UNUSED handle, off_t UNUSED start, off_t UNUSED length) -{ - return; -} - - static void -gpfs_clear_file_cache(int UNUSED handle) -{ - return; -} - - static void -gpfs_cancel_hints(int UNUSED handle) -{ - return; -} - - static void -gpfs_start_data_shipping(int UNUSED handle, int UNUSED num_insts) -{ - return; -} - - static void -gpfs_stop_data_shipping(int UNUSED handle) -{ - return; -} - - static void -gpfs_start_data_ship_map(int UNUSED handle, int UNUSED partition_size, - int UNUSED agent_count, int UNUSED *agent_node_num) -{ - return; -} - - static void -gpfs_invalidate_file_cache(const char UNUSED *filename) -{ - return; -} - -#endif /* 0 */ - -#endif /* H5_HAVE_GPFS */ - #ifdef TIME_MPI /* instrument the MPI_File_wrirte_xxx and read_xxx calls to measure * pure time spent in MPI_File code. diff --git a/perform/pio_perf.c b/perform/pio_perf.c index a47754b..cf41cbe 100644 --- a/perform/pio_perf.c +++ b/perform/pio_perf.c @@ -216,14 +216,6 @@ static struct long_options l_opts[] = { { "min-xfe", require_arg, 'x' }, { "min-xf", require_arg, 'x' }, { "min-x", require_arg, 'x' }, - { "mpi-posix", no_arg, 'm' }, - { "mpi-posi", no_arg, 'm' }, - { "mpi-pos", no_arg, 'm' }, - { "mpi-po", no_arg, 'm' }, - { "mpi-p", no_arg, 'm' }, - { "mpi-", no_arg, 'm' }, - { "mpi", no_arg, 'm' }, - { "mp", no_arg, 'm' }, { "num-bytes", require_arg, 'e' }, { "num-byte", require_arg, 'e' }, { "num-byt", require_arg, 'e' }, @@ -294,7 +286,6 @@ struct options { off_t h5_threshold; /* threshold for alignment in HDF5 file */ int h5_use_chunks; /* Make HDF5 dataset chunked */ int h5_write_only; /* Perform the write tests only */ - unsigned h5_use_mpi_posix; /* Use MPI-posix VFD for HDF5 I/O (instead of MPI-I/O VFD) */ int verify; /* Verify data correctness */ }; @@ -444,7 +435,6 @@ run_test_loop(struct options *opts) parms.h5_thresh = opts->h5_threshold; parms.h5_use_chunks = opts->h5_use_chunks; parms.h5_write_only = opts->h5_write_only; - parms.h5_use_mpi_posix = opts->h5_use_mpi_posix; parms.verify = opts->verify; /* start with max_num_procs and decrement it by half for each loop. */ @@ -562,18 +552,15 @@ run_test(iotype iot, parameters parms, struct options *opts) output_report("IO API = "); switch (iot) { - case POSIXIO: - output_report("POSIX\n"); - break; - case MPIO: - output_report("MPIO\n"); - break; - case PHDF5: - if(parms.h5_use_mpi_posix) - output_report("PHDF5 (w/MPI-posix driver)\n"); - else - output_report("PHDF5 (w/MPI-I/O driver)\n"); - break; + case POSIXIO: + output_report("POSIX\n"); + break; + case MPIO: + output_report("MPIO\n"); + break; + case PHDF5: + output_report("PHDF5 (w/MPI-IO driver)\n"); + break; } MPI_Comm_size(pio_comm_g, &comm_size); @@ -1232,11 +1219,7 @@ report_parameters(struct options *opts) else HDfprintf(output, "1D\n"); - HDfprintf(output, "rank %d: VFL used for HDF5 I/O=", rank); - if(opts->h5_use_mpi_posix) - HDfprintf(output, "MPI-posix driver\n"); - else - HDfprintf(output, "MPI-I/O driver\n"); + HDfprintf(output, "rank %d: VFL used for HDF5 I/O=%s\n", rank, "MPI-IO driver"); HDfprintf(output, "rank %d: Data storage method in HDF5=", rank); if(opts->h5_use_chunks) @@ -1295,7 +1278,6 @@ parse_command_line(int argc, char *argv[]) cl_opts->h5_threshold = 1; /* No threshold for aligning HDF5 objects by default */ cl_opts->h5_use_chunks = FALSE; /* Don't chunk the HDF5 dataset by default */ cl_opts->h5_write_only = FALSE; /* Do both read and write by default */ - cl_opts->h5_use_mpi_posix = FALSE; /* Don't use MPI-posix VFD for HDF5 I/O by default */ cl_opts->verify = FALSE; /* No Verify data correctness by default */ while ((opt = get_option(argc, (const char **)argv, s_opts, l_opts)) != EOF) { @@ -1428,10 +1410,6 @@ parse_command_line(int argc, char *argv[]) case 'I': cl_opts->interleaved = 1; break; - case 'm': - /* Turn on MPI-posix VFL driver for HDF5 I/O */ - cl_opts->h5_use_mpi_posix = TRUE; - break; case 'o': cl_opts->output_file = opt_arg; break; @@ -1604,8 +1582,6 @@ usage(const char *prog) printf(" -I, --interleaved Interleaved access pattern\n"); printf(" (see below for example)\n"); printf(" [default: Contiguous access pattern]\n"); - printf(" -m, --mpi-posix Use MPI-posix driver for HDF5 I/O\n"); - printf(" [default: use MPI-I/O driver]\n"); printf(" -o F, --output=F Output raw data into file F [default: none]\n"); printf(" -p N, --min-num-processes=N Minimum number of processes to use [default: 1]\n"); printf(" -P N, --max-num-processes=N Maximum number of processes to use\n"); diff --git a/perform/pio_perf.h b/perform/pio_perf.h index 094b31d..3295e2b 100644 --- a/perform/pio_perf.h +++ b/perform/pio_perf.h @@ -54,7 +54,6 @@ typedef struct parameters_ { hsize_t h5_thresh; /* HDF5 object alignment threshold */ int h5_use_chunks; /* Make HDF5 dataset chunked */ int h5_write_only; /* Perform the write tests only */ - unsigned h5_use_mpi_posix; /* Use MPI-posix VFD for HDF5 I/O (instead of MPI-I/O VFD) */ int verify; /* Verify data correctness */ } parameters; diff --git a/perform/sio_engine.c b/perform/sio_engine.c index 0ab5c3e..dec2f98 100644 --- a/perform/sio_engine.c +++ b/perform/sio_engine.c @@ -28,10 +28,6 @@ #include "hdf5.h" -#ifdef H5_HAVE_GPFS -# include <gpfs_fcntl.h> -#endif /* H5_HAVE_GPFS */ - #include "sio_perf.h" #include "sio_timer.h" @@ -94,19 +90,6 @@ hid_t set_vfd(parameters *param); static herr_t do_fclose(iotype iot, file_descr *fd); static void do_cleanupfile(iotype iot, char *fname); -/* GPFS-specific functions */ -#ifdef H5_HAVE_GPFS -static void gpfs_access_range(int handle, off_t start, off_t length, int is_write); -static void gpfs_free_range(int handle, off_t start, off_t length); -static void gpfs_clear_file_cache(int handle); -static void gpfs_cancel_hints(int handle); -static void gpfs_start_data_shipping(int handle, int num_insts); -static void gpfs_start_data_ship_map(int handle, int partition_size, - int agent_count, int *agent_node_num); -static void gpfs_stop_data_shipping(int handle); -static void gpfs_invalidate_file_cache(const char *filename); -#endif /* H5_HAVE_GPFS */ - /* global variables */ static off_t offset[MAX_DIMS]; /* dataset size in bytes */ static size_t buf_offset[MAX_DIMS]; /* dataset size in bytes */ @@ -1325,447 +1308,3 @@ do_cleanupfile(iotype iot, char *filename) } } -#ifdef H5_HAVE_GPFS - -/* Descriptions here come from the IBM GPFS Manual */ - -/* - * Function: gpfs_access_range - * Purpose: Declares an access range within a file for an - * application. - * - * The application will access file offsets within the given - * range, and will not access offsets outside the range. - * Violating this hint may produce worse performance than if - * no hint was specified. - * - * This hint is useful in situations where a file is - * partitioned coarsely among several nodes. If the ranges - * do not overlap, each node can specify which range of the - * file it will access, with a performance improvement in - * some cases, such as for sequential writing within a - * range. - * - * Subsequent GPFS_ACCESS_RANGE hints will replace a hint - * passed earlier. - * - * START - The start of the access range offset, in - * bytes, from the beginning of the file - * LENGTH - Length of the access range. 0 indicates to - * the end of the file - * IS_WRITE - 0 indicates READ access, 1 indicates WRITE access - * Return: Nothing - * Programmer: Bill Wendling, 03. June 2002 - * Modifications: - */ - static void -gpfs_access_range(int handle, off_t start, off_t length, int is_write) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsAccessRange_t access; - } access_range; - - access_range.hdr.totalLength = sizeof(access_range); - access_range.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - access_range.hdr.fcntlReserved = 0; - access_range.access.structLen = sizeof(gpfsAccessRange_t); - access_range.access.structType = GPFS_ACCESS_RANGE; - access_range.access.start = start; - access_range.access.length = length; - access_range.access.isWrite = is_write; - - if (gpfs_fcntl(handle, &access_range) != 0) { - fprintf(stderr, - "gpfs_fcntl DS start directive failed. errno=%d errorOffset=%d\n", - errno, access_range.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_free_range - * Purpose: Undeclares an access range within a file for an - * application. - * - * The application will no longer access file offsets within - * the given range. GPFS flushes the data at the file - * offsets and removes it from the cache. - * - * Multi-node applications that have finished one phase of - * their computation may wish to use this hint before the - * file is accessed in a conflicting mode from another node - * in a later phase. The potential performance benefit is - * that GPFS can avoid later synchronous cache consistency - * operations. - * - * START - The start of the access range offset, in - * bytes from the beginning of the file. - * LENGTH - Length of the access range. 0 indicates to - * the end of the file. - * Return: Nothing - * Programmer: Bill Wendling, 03. June 2002 - * Modifications: - */ - static void -gpfs_free_range(int handle, off_t start, off_t length) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsFreeRange_t range; - } free_range; - - /* Issue the invalidate hint */ - free_range.hdr.totalLength = sizeof(free_range); - free_range.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - free_range.hdr.fcntlReserved = 0; - free_range.range.structLen = sizeof(gpfsFreeRange_t); - free_range.range.structType = GPFS_FREE_RANGE; - free_range.range.start = start; - free_range.range.length = length; - - if (gpfs_fcntl(handle, &free_range) != 0) { - fprintf(stderr, - "gpfs_fcntl free range failed for range %d:%d. errno=%d errorOffset=%d\n", - start, length, errno, free_range.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_clear_file_cache - * Purpose: Indicates file access in the near future is not expected. - * - * The application does not expect to make any further - * accesses to the file in the near future, so GPFS removes - * any data or metadata pertaining to the file from its - * cache. - * - * Multi-node applications that have finished one phase of - * their computation may wish to use this hint before the - * file is accessed in a conflicting mode from another node - * in a later phase. The potential performance benefit is - * that GPFS can avoid later synchronous cache consistency - * operations. - * Return: Nothing - * Programmer: Bill Wendling, 03. June 2002 - * Modifications: - */ - static void -gpfs_clear_file_cache(int handle) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsClearFileCache_t clear; - } clear_cache; - - clear_cache.hdr.totalLength = sizeof(clear_cache); - clear_cache.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - clear_cache.hdr.fcntlReserved = 0; - clear_cache.clear.structLen = sizeof(gpfsClearFileCache_t); - clear_cache.clear.structType = GPFS_CLEAR_FILE_CACHE; - - if (gpfs_fcntl(handle, &clear_cache) != 0) { - fprintf(stderr, - "gpfs_fcntl clear file cache directive failed. errno=%d errorOffset=%d\n", - errno, clear_cache.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_cancel_hints - * Purpose: Indicates to remove any hints against the open file - * handle. - * - * GPFS removes any hints that may have been issued against - * this open file handle: - * - * - The hint status of the file is restored ot what it - * would have been immediately after being opened, but - * does not affect the contents of the GPFS file - * cache. Cancelling an earlier hint that resulted in - * data being removed from the GPFS file cache does - * not bring that data back int othe cache; data - * re-enters the cache only pon access by the - * application or by user-driven or automatic - * prefetching. - * - Only the GPFS_MULTIPLE_ACCESS_RANGE hint has a - * state that might be removed by the - * GPFS_CANCEL_HINTS directive. - * Return: Nothing - * Programmer: Bill Wendling, 03. June 2002 - * Modifications: - */ - static void -gpfs_cancel_hints(int handle) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsCancelHints_t cancel; - } cancel_hints; - - cancel_hints.hdr.totalLength = sizeof(cancel_hints); - cancel_hints.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - cancel_hints.hdr.fcntlReserved = 0; - cancel_hints.cancel.structLen = sizeof(gpfsCancelHints_t); - cancel_hints.cancel.structType = GPFS_CANCEL_HINTS; - - if (gpfs_fcntl(handle, &cancel_hints) != 0) { - fprintf(stderr, - "gpfs_fcntl cancel hints directive failed. errno=%d errorOffset=%d\n", - errno, cancel_hints.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_start_data_shipping - * Purpose: Initiates data shipping mode. - * - * Once all participating threads have issued this directive - * for a file, GPFS enters a mode where it logically - * partitions the blocks of the file among a group of agent - * nodes. The agents are those nodes on which one or more - * threads have issued the GPFS_DATA_SHIP_START directive. - * Each thread that has issued a GPFS_DATA_SHIP_START - * directive and the associated agent nodes are referred to - * as the data shipping collective. - * - * The second parameter is the total number of open - * instances on all nodes that will be operating on the - * file. Must be called for every such instance with the - * same value of NUM_INSTS. - * - * NUM_INSTS - The number of open file instances, on all - * nodes, collaborating to operate on the file - * Return: Nothing - * Programmer: Bill Wendling, 28. May 2002 - * Modifications: - */ - static void -gpfs_start_data_shipping(int handle, int num_insts) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsDataShipStart_t start; - } ds_start; - - ds_start.hdr.totalLength = sizeof(ds_start); - ds_start.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - ds_start.hdr.fcntlReserved = 0; - ds_start.start.structLen = sizeof(gpfsDataShipStart_t); - ds_start.start.structType = GPFS_DATA_SHIP_START; - ds_start.start.numInstances = num_insts; - ds_start.start.reserved = 0; - - if (gpfs_fcntl(handle, &ds_start) != 0) { - fprintf(stderr, - "gpfs_fcntl DS start directive failed. errno=%d errorOffset=%d\n", - errno, ds_start.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_start_data_ship_map - * Purpose: Indicates which agent nodes are to be used for data - * shipping. GPFS recognizes which agent nodes to use for - * data shipping. - * - * PARTITION_SIZE - The number of contiguous bytes per - * server. This value must be a - * multiple of the number of bytes in a - * single file system block - * AGENT_COUNT - The number of entries in the - * agentNodeNumber array - * AGENT_NODE_NUM - The data ship agent node numbers as - * listed in the SDT or the global ODM - * - * Return: Nothing - * Programmer: Bill Wendling, 10. Jul 2002 - * Modifications: - */ - static void -gpfs_start_data_ship_map(int handle, int partition_size, int agent_count, - int *agent_node_num) -{ - int i; - struct { - gpfsFcntlHeader_t hdr; - gpfsDataShipMap_t map; - } ds_map; - - ds_map.hdr.totalLength = sizeof(ds_map); - ds_map.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - ds_map.hdr.fcntlReserved = 0; - ds_map.map.structLen = sizeof(gpfsDataShipMap_t); - ds_map.map.structType = GPFS_DATA_SHIP_MAP; - ds_map.map.partitionSize = partition_size; - ds_map.map.agentCount = agent_count; - - for (i = 0; i < agent_count; ++i) - ds_map.map.agentNodeNumber[i] = agent_node_num[i]; - - if (gpfs_fcntl(handle, &ds_map) != 0) { - fprintf(stderr, - "gpfs_fcntl DS map directive failed. errno=%d errorOffset=%d\n", - errno, ds_map.hdr.errorOffset); - exit(EXIT_FAILURE); - } -} - -/* - * Function: gpfs_stop_data_shipping - * Purpose: Takes a file out of the data shipping mode. - * - * - GPFS waits for all threads that issued the - * GPFS_DATA_SHIP_START directive to issue this directive, - * then flushes the dirty file data to disk. - * - * - While a gpfs_cntl() call is blocked for other threads, - * the call can be interrupted by any signal. If a signal - * is delivered to any of the waiting calls, all waiting - * calls on every node will be interrupted and will return - * EINTR. GPFS will not cancel data shipping mode if such - * a signal occurs. It is the responsibility of the - * application to mask off any signals that might normally - * occur while waiting for another node in the data - * shipping collective. Several libraries use SIGALRM; the - * thread that makes the gpfs_fcntl() call should use - * sigthreadmask to mask off delivery of this signal while - * inside the call. - * Return: Nothing - * Programmer: Bill Wendling, 28. May 2002 - * Modifications: - */ - static void -gpfs_stop_data_shipping(int handle) -{ - struct { - gpfsFcntlHeader_t hdr; - gpfsDataShipStop_t stop; - } ds_stop; - - ds_stop.hdr.totalLength = sizeof(ds_stop); - ds_stop.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - ds_stop.hdr.fcntlReserved = 0; - ds_stop.stop.structLen = sizeof(ds_stop.stop); - ds_stop.stop.structType = GPFS_DATA_SHIP_STOP; - - if (gpfs_fcntl(handle, &ds_stop) != 0) - fprintf(stderr, - "gpfs_fcntl DS stop directive failed. errno=%d errorOffset=%d\n", - errno, ds_stop.hdr.errorOffset); -} - -/* - * Function: gpfs_invalidate_file_cache - * Purpose: Invalidate all cached data held on behalf of a file on - * this node. - * Return: Nothing - * Programmer: Bill Wendling, 03. June 2002 - * Modifications: - */ - static void -gpfs_invalidate_file_cache(const char *filename) -{ - int handle; - struct { - gpfsFcntlHeader_t hdr; - gpfsClearFileCache_t inv; - } inv_cache_hint; - - /* Open the file. If the open fails, the file cannot be cached. */ - handle = open(filename, O_RDONLY, 0); - - if (handle == -1) - return; - - /* Issue the invalidate hint */ - inv_cache_hint.hdr.totalLength = sizeof(inv_cache_hint); - inv_cache_hint.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - inv_cache_hint.hdr.fcntlReserved = 0; - inv_cache_hint.inv.structLen = sizeof(gpfsClearFileCache_t); - inv_cache_hint.inv.structType = GPFS_CLEAR_FILE_CACHE; - - if (gpfs_fcntl(handle, &inv_cache_hint) != 0) { - fprintf(stderr, - "gpfs_fcntl clear cache hint failed for file '%s'.", - filename); - fprintf(stderr, " errno=%d errorOffset=%d\n", - errno, inv_cache_hint.hdr.errorOffset); - exit(EXIT_FAILURE); - } - - /* Close the file */ - if (close(handle) == -1) { - fprintf(stderr, - "could not close file '%s' after flushing file cache, ", - filename); - fprintf(stderr, "errno=%d\n", errno); - exit(EXIT_FAILURE); - } -} - -#else - -/* turn the stubs off since some compilers are warning they are not used */ -#if 0 -/* H5_HAVE_GPFS isn't defined...stub functions */ - - static void -gpfs_access_range(int UNUSED handle, off_t UNUSED start, off_t UNUSED length, - int UNUSED is_write) -{ - return; -} - - static void -gpfs_free_range(int UNUSED handle, off_t UNUSED start, off_t UNUSED length) -{ - return; -} - - static void -gpfs_clear_file_cache(int UNUSED handle) -{ - return; -} - - static void -gpfs_cancel_hints(int UNUSED handle) -{ - return; -} - - static void -gpfs_start_data_shipping(int UNUSED handle, int UNUSED num_insts) -{ - return; -} - - static void -gpfs_stop_data_shipping(int UNUSED handle) -{ - return; -} - - static void -gpfs_start_data_ship_map(int UNUSED handle, int UNUSED partition_size, - int UNUSED agent_count, int UNUSED *agent_node_num) -{ - return; -} - - static void -gpfs_invalidate_file_cache(const char UNUSED *filename) -{ - return; -} - -#endif /* 0 */ - -#endif /* H5_HAVE_GPFS */ - - diff --git a/perform/sio_perf.c b/perform/sio_perf.c index 7df9337..26cec6d 100644 --- a/perform/sio_perf.c +++ b/perform/sio_perf.c @@ -210,14 +210,6 @@ static struct long_options l_opts[] = { { "min-xfe", require_arg, 'x' }, { "min-xf", require_arg, 'x' }, { "min-x", require_arg, 'x' }, - { "mpi-posix", no_arg, 'm' }, - { "mpi-posi", no_arg, 'm' }, - { "mpi-pos", no_arg, 'm' }, - { "mpi-po", no_arg, 'm' }, - { "mpi-p", no_arg, 'm' }, - { "mpi-", no_arg, 'm' }, - { "mpi", no_arg, 'm' }, - { "mp", no_arg, 'm' }, { "num-bytes", require_arg, 'e' }, { "num-byte", require_arg, 'e' }, { "num-byt", require_arg, 'e' }, @@ -302,7 +294,6 @@ struct options { int h5_use_chunks; /* Make HDF5 dataset chunked */ int h5_write_only; /* Perform the write tests only */ int h5_extendable; /* Perform the write tests only */ - unsigned h5_use_mpi_posix; /* Use MPI-posix VFD for HDF5 I/O (instead of MPI-I/O VFD) */ int verify; /* Verify data correctness */ vfdtype vfd; /* File driver */ @@ -411,7 +402,6 @@ run_test_loop(struct options *opts) parms.h5_use_chunks = opts->h5_use_chunks; parms.h5_extendable = opts->h5_extendable; parms.h5_write_only = opts->h5_write_only; - parms.h5_use_mpi_posix = opts->h5_use_mpi_posix; parms.verify = opts->verify; parms.vfd = opts->vfd; @@ -982,7 +972,6 @@ parse_command_line(int argc, char *argv[]) cl_opts->h5_use_chunks = FALSE; /* Don't chunk the HDF5 dataset by default */ cl_opts->h5_write_only = FALSE; /* Do both read and write by default */ cl_opts->h5_extendable = FALSE; /* Use extendable dataset */ - cl_opts->h5_use_mpi_posix = FALSE; /* Don't use MPI-posix VFD for HDF5 I/O by default */ cl_opts->verify = FALSE; /* No Verify data correctness by default */ while ((opt = get_option(argc, (const char **)argv, s_opts, l_opts)) != EOF) { @@ -1144,10 +1133,6 @@ parse_command_line(int argc, char *argv[]) case 'i': cl_opts->num_iters = atoi(opt_arg); break; - case 'm': - /* Turn on MPI-posix VFL driver for HDF5 I/O */ - cl_opts->h5_use_mpi_posix = TRUE; - break; case 'o': cl_opts->output_file = opt_arg; break; diff --git a/perform/sio_perf.h b/perform/sio_perf.h index 3e4456a..b40fed3 100644 --- a/perform/sio_perf.h +++ b/perform/sio_perf.h @@ -66,7 +66,6 @@ typedef struct parameters_ { int h5_use_chunks; /* Make HDF5 dataset chunked */ int h5_extendable; /* Make HDF5 dataset chunked */ int h5_write_only; /* Perform the write tests only */ - unsigned h5_use_mpi_posix; /* VFD for HDF5 I/O */ int verify; /* Verify data correctness */ } parameters; diff --git a/release_docs/INSTALL_CMake.txt b/release_docs/INSTALL_CMake.txt index ce2d98e..b6c79c9 100644 --- a/release_docs/INSTALL_CMake.txt +++ b/release_docs/INSTALL_CMake.txt @@ -481,7 +481,6 @@ HDF5_ENABLE_CODESTACK "Enable the function stack tracing (for developer HDF5_ENABLE_COVERAGE "Enable code coverage for Libraries and Programs" OFF HDF5_ENABLE_DEPRECATED_SYMBOLS "Enable deprecated public API symbols" ON HDF5_ENABLE_EMBEDDED_LIBINFO "embed library info into executables" ON -HDF5_ENABLE_GPFS "Enable GPFS hints for the MPI/POSIX file driver" OFF HDF5_ENABLE_HSIZET "Enable datasets larger than memory" ON HDF5_ENABLE_LARGE_FILE "Enable support for large (64-bit) files on Linux." ON HDF5_ENABLE_PARALLEL "Enable parallel build (requires MPI)" OFF diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 63f59d5..58f4732 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -210,7 +210,6 @@ set (H5FD_SRCS ${HDF5_SRC_DIR}/H5FDlog.c ${HDF5_SRC_DIR}/H5FDmpi.c ${HDF5_SRC_DIR}/H5FDmpio.c - ${HDF5_SRC_DIR}/H5FDmpiposix.c ${HDF5_SRC_DIR}/H5FDmulti.c ${HDF5_SRC_DIR}/H5FDsec2.c ${HDF5_SRC_DIR}/H5FDspace.c @@ -225,7 +224,6 @@ set (H5FD_HDRS ${HDF5_SRC_DIR}/H5FDlog.h ${HDF5_SRC_DIR}/H5FDmpi.h ${HDF5_SRC_DIR}/H5FDmpio.h - ${HDF5_SRC_DIR}/H5FDmpiposix.h ${HDF5_SRC_DIR}/H5FDmulti.h ${HDF5_SRC_DIR}/H5FDpkg.h ${HDF5_SRC_DIR}/H5FDpublic.h diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c index 684f510..c294e42 100644 --- a/src/H5Dmpio.c +++ b/src/H5Dmpio.c @@ -157,12 +157,9 @@ H5D__mpio_opt_possible(const H5D_io_info_t *io_info, const H5S_t *file_space, const H5S_t *mem_space, const H5D_type_info_t *type_info, const H5D_chunk_map_t *fm, H5P_genplist_t *dx_plist) { - /* variables to set cause of broken collective I/O */ - int local_cause = 0; - int global_cause = 0; - - int mpi_code; /* MPI error code */ - htri_t ret_value = TRUE; + int local_cause = 0; /* Local reason(s) for breaking collective mode */ + int global_cause = 0; /* Global reason(s) for breaking collective mode */ + htri_t ret_value; /* Return value */ FUNC_ENTER_PACKAGE @@ -174,17 +171,13 @@ H5D__mpio_opt_possible(const H5D_io_info_t *io_info, const H5S_t *file_space, /* For independent I/O, get out quickly and don't try to form consensus */ - if(io_info->dxpl_cache->xfer_mode == H5FD_MPIO_INDEPENDENT) { - local_cause = H5D_MPIO_SET_INDEPENDENT; - global_cause = H5D_MPIO_SET_INDEPENDENT; - HGOTO_DONE(FALSE); - } - - /* Optimized MPI types flag must be set and it must be collective IO */ - /* (Don't allow parallel I/O for the MPI-posix driver, since it doesn't do real collective I/O) */ - if(!(H5S_mpi_opt_types_g && io_info->dxpl_cache->xfer_mode == H5FD_MPIO_COLLECTIVE - && !IS_H5FD_MPIPOSIX(io_info->dset->oloc.file))) - local_cause |= H5D_MPIO_SET_MPIPOSIX; + if(io_info->dxpl_cache->xfer_mode == H5FD_MPIO_INDEPENDENT) + local_cause |= H5D_MPIO_SET_INDEPENDENT; + + /* Optimized MPI types flag must be set */ + /* (based on 'HDF5_MPI_OPT_TYPES' environment variable) */ + if(!H5FD_mpi_opt_types_g) + local_cause |= H5D_MPIO_MPI_OPT_TYPES_ENV_VAR_DISABLED; /* Don't allow collective operations if datatype conversions need to happen */ if(!type_info->is_conv_noop) @@ -220,15 +213,19 @@ H5D__mpio_opt_possible(const H5D_io_info_t *io_info, const H5S_t *file_space, io_info->dset->shared->dcpl_cache.pline.nused > 0) local_cause |= H5D_MPIO_FILTERS; - /* Form consensus opinion among all processes about whether to perform - * collective I/O - */ - if(MPI_SUCCESS != (mpi_code = MPI_Allreduce(&local_cause, &global_cause, 1, MPI_INT, MPI_BOR, io_info->comm))) - HMPI_GOTO_ERROR(FAIL, "MPI_Allreduce failed", mpi_code) + /* Check for independent I/O */ + if(local_cause & H5D_MPIO_SET_INDEPENDENT) + global_cause = local_cause; + else { + int mpi_code; /* MPI error code */ - ret_value = global_cause > 0 ? FALSE : TRUE; + /* Form consensus opinion among all processes about whether to perform + * collective I/O + */ + if(MPI_SUCCESS != (mpi_code = MPI_Allreduce(&local_cause, &global_cause, 1, MPI_INT, MPI_BOR, io_info->comm))) + HMPI_GOTO_ERROR(FAIL, "MPI_Allreduce failed", mpi_code) + } /* end else */ -done: /* Write the local value of no-collective-cause to the DXPL. */ if(H5P_set(dx_plist, H5D_MPIO_LOCAL_NO_COLLECTIVE_CAUSE_NAME, &local_cause) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set local no collective cause property") @@ -237,6 +234,10 @@ done: if(H5P_set(dx_plist, H5D_MPIO_GLOBAL_NO_COLLECTIVE_CAUSE_NAME, &global_cause) < 0) HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set global no collective cause property") + /* Set the return value, based on the global cause */ + ret_value = global_cause > 0 ? FALSE : TRUE; + +done: FUNC_LEAVE_NOAPI(ret_value) } /* H5D__mpio_opt_possible() */ diff --git a/src/H5FDmpi.h b/src/H5FDmpi.h index dcb8df9..784fe70 100644 --- a/src/H5FDmpi.h +++ b/src/H5FDmpi.h @@ -57,7 +57,6 @@ typedef enum H5FD_mpio_collective_opt_t { /* Include all the MPI VFL headers */ #include "H5FDmpio.h" /* MPI I/O file driver */ -#include "H5FDmpiposix.h" /* MPI/posix I/O file driver */ #endif /* H5FDmpi_H */ diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c index f23a3b5..d4b8fdc 100644 --- a/src/H5FDmpio.c +++ b/src/H5FDmpio.c @@ -44,6 +44,10 @@ */ static hid_t H5FD_MPIO_g = 0; +/* Whether to allow collective I/O operations */ +/* (Value can be set from environment variable also) */ +hbool_t H5FD_mpi_opt_types_g = TRUE; + /* * The view is set to this value */ @@ -189,51 +193,54 @@ H5FD_mpio_init_interface(void) * library. * * Return: Success: The driver ID for the mpio driver. - * * Failure: Negative. * * Programmer: Robb Matzke * Thursday, August 5, 1999 * - * Modifications: - * *------------------------------------------------------------------------- */ hid_t H5FD_mpio_init(void) { #ifdef H5FDmpio_DEBUG - static int H5FD_mpio_Debug_inited=0; + static int H5FD_mpio_Debug_inited = 0; #endif /* H5FDmpio_DEBUG */ + const char *s; /* String for environment variables */ hid_t ret_value; /* Return value */ FUNC_ENTER_NOAPI(FAIL) - if (H5I_VFL!=H5I_get_type(H5FD_MPIO_g)) - H5FD_MPIO_g = H5FD_register((const H5FD_class_t *)&H5FD_mpio_g,sizeof(H5FD_class_mpi_t),FALSE); + /* Register the MPI-IO VFD, if it isn't already */ + if(H5I_VFL != H5I_get_type(H5FD_MPIO_g)) + H5FD_MPIO_g = H5FD_register((const H5FD_class_t *)&H5FD_mpio_g, sizeof(H5FD_class_mpi_t), FALSE); + + /* Allow MPI buf-and-file-type optimizations? */ + s = HDgetenv("HDF5_MPI_OPT_TYPES"); + if(s && HDisdigit(*s)) + H5FD_mpi_opt_types_g = (hbool_t)HDstrtol(s, NULL, 0); #ifdef H5FDmpio_DEBUG - if (!H5FD_mpio_Debug_inited) - { - /* set debug mask */ - /* Should this be done in H5F global initialization instead of here? */ - const char *s = HDgetenv ("H5FD_mpio_Debug"); - if (s) { - while (*s){ + if(!H5FD_mpio_Debug_inited) { + /* Retrieve MPI-IO debugging environment variable */ + s = HDgetenv("H5FD_mpio_Debug"); + if(s) { + /* Set debug mask */ + while(*s) { H5FD_mpio_Debug[(int)*s]++; s++; - } - } + } /* end while */ + } /* end if */ H5FD_mpio_Debug_inited++; - } + } /* end if */ #endif /* H5FDmpio_DEBUG */ /* Set return value */ - ret_value=H5FD_MPIO_g; + ret_value = H5FD_MPIO_g; done: FUNC_LEAVE_NOAPI(ret_value) -} +} /* end H5FD_mpio_init() */ /*--------------------------------------------------------------------------- diff --git a/src/H5FDmpio.h b/src/H5FDmpio.h index d836086..858e8ba 100644 --- a/src/H5FDmpio.h +++ b/src/H5FDmpio.h @@ -22,14 +22,14 @@ #ifndef H5FDmpio_H #define H5FDmpio_H +/* Macros */ + #ifdef H5_HAVE_PARALLEL # define H5FD_MPIO (H5FD_mpio_init()) #else # define H5FD_MPIO (-1) #endif /* H5_HAVE_PARALLEL */ -/* Macros */ - #ifdef H5_HAVE_PARALLEL /*Turn on H5FDmpio_debug if H5F_DEBUG is on */ #ifdef H5F_DEBUG @@ -38,6 +38,10 @@ #endif #endif +/* Global var whose value comes from environment variable */ +/* (Defined in H5FDmpio.c) */ +H5_DLLVAR hbool_t H5FD_mpi_opt_types_g; + /* Function prototypes */ #ifdef __cplusplus extern "C" { diff --git a/src/H5FDmpiposix.c b/src/H5FDmpiposix.c deleted file mode 100644 index 7248dff..0000000 --- a/src/H5FDmpiposix.c +++ /dev/null @@ -1,1488 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * 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 files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Programmer: Quincey Koziol <koziol@hdfgroup.org> - * Thursday, July 11, 2002 - * - * Purpose: This is a "combination" MPI-2 and posix I/O driver. - * It uses MPI for coordinating the actions of several processes - * and posix I/O calls to do the actual I/O to the disk. - * - * This driver was derived from the H5FDmpio.c driver and may - * share bugs/quirks/etc. - * - * Limitations: - * There is no "collective" I/O mode with this driver. - * - * This will almost certainly _not_ work correctly for files - * accessed on distributed parallel systems with the file located - * on a non-parallel filesystem. - * - */ - -/* Interface initialization */ -#define H5_INTERFACE_INIT_FUNC H5FD_mpiposix_init_interface - - -#include "H5private.h" /* Generic Functions */ -#include "H5ACprivate.h" /* Metadata cache */ -#include "H5Eprivate.h" /* Error handling */ -#include "H5Fprivate.h" /* File access */ -#include "H5FDprivate.h" /* File drivers */ -#include "H5FDmpi.h" /* MPI-based file drivers */ -#include "H5Iprivate.h" /* IDs */ -#include "H5MMprivate.h" /* Memory management */ -#include "H5Pprivate.h" /* Property lists */ - -/* Features: - * H5_HAVE_GPFS -- issue gpfs_fcntl() calls to hopefully improve - * performance when accessing files on a GPFS - * file system. - * - * REPORT_IO -- if set then report all POSIX file calls to stderr. - * - */ -/* #define REPORT_IO */ - -#ifdef H5_HAVE_GPFS -# include <gpfs_fcntl.h> -#endif - -#ifdef H5_HAVE_PARALLEL - -/* - * The driver identification number, initialized at runtime if H5_HAVE_PARALLEL - * is defined. This allows applications to still have the H5FD_MPIPOSIX - * "constants" in their source code (it also makes this file strictly ANSI - * compliant when H5_HAVE_PARALLEL isn't defined) - */ -static hid_t H5FD_MPIPOSIX_g = 0; - -/* - * The description of a file belonging to this driver. - * The EOF value is only used just after the file is opened in order for the - * library to determine whether the file is empty, truncated, or okay. The - * MPIPOSIX driver doesn't bother to keep it updated since it's an expensive - * operation. - */ -typedef struct H5FD_mpiposix_t { - H5FD_t pub; /* public stuff, must be first */ - int fd; /* the unix file handle */ - MPI_Comm comm; /* communicator */ - int mpi_rank; /* This process's rank */ - int mpi_size; /* Total number of processes */ - haddr_t eof; /* end-of-file marker */ - haddr_t eoa; /* end-of-address marker */ - haddr_t last_eoa; /* Last known end-of-address marker */ - haddr_t pos; /* Current file I/O position */ - H5FD_file_op_t op; /* Last file I/O operation */ - hsize_t naccess; /* Number of (write) accesses to file */ -#ifdef H5_HAVE_GPFS - size_t blksize; /* Block size of file system */ -#endif - hbool_t use_gpfs; /* Use GPFS to write things */ -#ifndef H5_HAVE_WIN32_API - /* On most systems the combination of device and i-node number uniquely - * identify a file. Note that Cygwin, MinGW and other Windows POSIX - * environments have the stat function (which fakes inodes) - * and will use the 'device + inodes' scheme as opposed to the - * Windows code further below. - */ - dev_t device; /* file device number */ -#ifdef H5_VMS - ino_t inode[3]; /* file i-node number */ -#else - ino_t inode; /* file i-node number */ -#endif /* H5_VMS */ -#else - /* Files in windows are uniquely identified by the volume serial - * number and the file index (both low and high parts). - * - * There are caveats where these numbers can change, especially - * on FAT file systems. On NTFS, however, a file should keep - * those numbers the same until renamed or deleted (though you - * can use ReplaceFile() on NTFS to keep the numbers the same - * while renaming). - * - * See the MSDN "BY_HANDLE_FILE_INFORMATION Structure" entry for - * more information. - * - * http://msdn.microsoft.com/en-us/library/aa363788(v=VS.85).aspx - */ - DWORD nFileIndexLow; - DWORD nFileIndexHigh; - DWORD dwVolumeSerialNumber; - - HANDLE hFile; /* Native windows file handle */ -#endif /* H5_HAVE_WIN32_API */ -} H5FD_mpiposix_t; - -/* - * These macros check for overflow of various quantities. These macros - * assume that HDoff_t is signed and haddr_t and size_t are unsigned. - * - * ADDR_OVERFLOW: Checks whether a file address of type `haddr_t' - * is too large to be represented by the second argument - * of the file seek function. - * - * SIZE_OVERFLOW: Checks whether a buffer size of type `hsize_t' is too - * large to be represented by the `size_t' type. - * - * REGION_OVERFLOW: Checks whether an address and size pair describe data - * which can be addressed entirely by the second - * argument of the file seek function. - */ -#define MAXADDR (((haddr_t)1 << (8*sizeof(HDoff_t) - 1)) - 1) -#define ADDR_OVERFLOW(A) (HADDR_UNDEF == (A) || ((A) & ~(haddr_t)MAXADDR)) -#define SIZE_OVERFLOW(Z) ((Z) & ~(hsize_t)MAXADDR) -#define REGION_OVERFLOW(A,Z) (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || \ - HADDR_UNDEF == (A) + (Z) || \ - (HDoff_t)((A) + (Z)) < (HDoff_t)(A)) - -/* Callbacks */ -static herr_t H5FD_mpiposix_term(void); -static void *H5FD_mpiposix_fapl_get(H5FD_t *_file); -static void *H5FD_mpiposix_fapl_copy(const void *_old_fa); -static herr_t H5FD_mpiposix_fapl_free(void *_fa); -static H5FD_t *H5FD_mpiposix_open(const char *name, unsigned flags, hid_t fapl_id, - haddr_t maxaddr); -static herr_t H5FD_mpiposix_close(H5FD_t *_file); -static int H5FD_mpiposix_cmp(const H5FD_t *_f1, const H5FD_t *_f2); -static herr_t H5FD_mpiposix_query(const H5FD_t *_f1, unsigned long *flags); -static haddr_t H5FD_mpiposix_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type); -static herr_t H5FD_mpiposix_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr); -static haddr_t H5FD_mpiposix_get_eof(const H5FD_t *_file); -static herr_t H5FD_mpiposix_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle); -static herr_t H5FD_mpiposix_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr, - size_t size, void *buf); -static herr_t H5FD_mpiposix_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr, - size_t size, const void *buf); -static herr_t H5FD_mpiposix_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing); -static int H5FD_mpiposix_mpi_rank(const H5FD_t *_file); -static int H5FD_mpiposix_mpi_size(const H5FD_t *_file); -static MPI_Comm H5FD_mpiposix_communicator(const H5FD_t *_file); - -/* MPIPOSIX-specific file access properties */ -typedef struct H5FD_mpiposix_fapl_t { - hbool_t use_gpfs; /* use GPFS hints */ - MPI_Comm comm; /* communicator */ -} H5FD_mpiposix_fapl_t; - -/* The MPIPOSIX file driver information */ -static const H5FD_class_mpi_t H5FD_mpiposix_g = { - { /* Start of superclass information */ - "mpiposix", /* name */ - MAXADDR, /* maxaddr */ - H5F_CLOSE_SEMI, /* fc_degree */ - H5FD_mpiposix_term, /* terminate */ - NULL, /* sb_size */ - NULL, /* sb_encode */ - NULL, /* sb_decode */ - sizeof(H5FD_mpiposix_fapl_t), /* fapl_size */ - H5FD_mpiposix_fapl_get, /* fapl_get */ - H5FD_mpiposix_fapl_copy, /* fapl_copy */ - H5FD_mpiposix_fapl_free, /* fapl_free */ - 0, /* dxpl_size */ - NULL, /* dxpl_copy */ - NULL, /* dxpl_free */ - H5FD_mpiposix_open, /* open */ - H5FD_mpiposix_close, /* close */ - H5FD_mpiposix_cmp, /* cmp */ - H5FD_mpiposix_query, /* query */ - NULL, /* get_type_map */ - NULL, /* alloc */ - NULL, /* free */ - H5FD_mpiposix_get_eoa, /* get_eoa */ - H5FD_mpiposix_set_eoa, /* set_eoa */ - H5FD_mpiposix_get_eof, /* get_eof */ - H5FD_mpiposix_get_handle, /* get_handle */ - H5FD_mpiposix_read, /* read */ - H5FD_mpiposix_write, /* write */ - NULL, /* flush */ - H5FD_mpiposix_truncate, /* truncate */ - NULL, /* lock */ - NULL, /* unlock */ - H5FD_FLMAP_DICHOTOMY /* fl_map */ - }, /* End of superclass information */ - H5FD_mpiposix_mpi_rank, /* get_rank */ - H5FD_mpiposix_mpi_size, /* get_size */ - H5FD_mpiposix_communicator /* get_comm */ -}; - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_init_interface - * - * Purpose: Initializes any interface-specific data or routines. - * - * Return: Success: The driver ID for the mpiposix driver. - * Failure: Negative. - * - *------------------------------------------------------------------------- - */ -static herr_t -H5FD_mpiposix_init_interface(void) -{ - FUNC_ENTER_NOAPI_NOINIT_NOERR - - FUNC_LEAVE_NOAPI(H5FD_mpiposix_init()) -} /* H5FD_mpiposix_init_interface() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_init - * - * Purpose: Initialize this driver by registering the driver with the - * library. - * - * Return: Success: The driver ID for the mpiposix driver. - * Failure: Negative. - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -hid_t -H5FD_mpiposix_init(void) -{ - hid_t ret_value = H5FD_MPIPOSIX_g; /* Return value */ - - FUNC_ENTER_NOAPI(FAIL) - - if(H5I_VFL != H5I_get_type(H5FD_MPIPOSIX_g)) - H5FD_MPIPOSIX_g = H5FD_register((const H5FD_class_t *)&H5FD_mpiposix_g, sizeof(H5FD_class_mpi_t), FALSE); - - /* Set return value */ - ret_value = H5FD_MPIPOSIX_g; - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mpiposix_init() */ - - -/*--------------------------------------------------------------------------- - * Function: H5FD_mpiposix_term - * - * Purpose: Shut down the VFD - * - * Returns: SUCCEED (can't fail) - * - * Programmer: Quincey Koziol - * Friday, Jan 30, 2004 - * - *--------------------------------------------------------------------------- - */ -static herr_t -H5FD_mpiposix_term(void) -{ - FUNC_ENTER_NOAPI_NOINIT_NOERR - - /* Reset VFL ID */ - H5FD_MPIPOSIX_g = 0; - - FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD_mpiposix_term() */ - - -/*------------------------------------------------------------------------- - * Function: H5Pset_fapl_mpiposix - * - * Purpose: Store the user supplied MPI communicator COMM in - * the file access property list FAPL_ID which can then be used - * to create and/or open the file. This function is available - * only in the parallel HDF5 library and is not collective. - * - * comm is the MPI communicator to be used for file open as - * defined in MPI_FILE_OPEN of MPI-2. This function makes a - * duplicate of comm. Any modification to comm after this function - * call returns has no effect on the access property list. - * - * If fapl_id has previously set comm value, it will be replaced - * and the old communicator is freed. - * - * Return: SUCCEED/FAIL - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -herr_t -H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm, hbool_t use_gpfs) -{ - H5FD_mpiposix_fapl_t fa; - H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value; - - FUNC_ENTER_API(FAIL) - H5TRACE3("e", "iMcb", fapl_id, comm, use_gpfs); - - /* Check arguments */ - if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS))) - HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list") - if (MPI_COMM_NULL == comm) - HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a valid communicator") - - /* Initialize driver specific properties */ - fa.comm = comm; - fa.use_gpfs = use_gpfs; - - /* duplication is done during driver setting. */ - ret_value = H5P_set_driver(plist, H5FD_MPIPOSIX, &fa); - -done: - FUNC_LEAVE_API(ret_value) -} /* end H5Pset_fapl_mpiposix() */ - - -/*------------------------------------------------------------------------- - * Function: H5Pget_fapl_mpiposix - * - * Purpose: If the file access property list is set to the H5FD_MPIPOSIX - * driver then this function returns a duplicate of the MPI - * communicator through the comm pointer. It is the responsibility - * of the application to free the returned communicator. - * - * Return: Success: Non-negative with the communicator and - * information returned through the COMM - * argument if non-null. Since it is a duplicate - * of the stored object, future modifications to - * the access property list do not affect it and - * it is the responsibility of the application to - * free it. - * Failure: Negative - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -herr_t -H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/, hbool_t *use_gpfs/*out*/) -{ - H5FD_mpiposix_fapl_t *fa; - H5P_genplist_t *plist; /* Property list pointer */ - int mpi_code; /* mpi return code */ - herr_t ret_value = SUCCEED; /* Return value */ - - FUNC_ENTER_API(FAIL) - H5TRACE3("e", "ixx", fapl_id, comm, use_gpfs); - - if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS))) - HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list") - if (H5FD_MPIPOSIX != H5P_get_driver(plist)) - HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver") - if (NULL == (fa = H5P_get_driver_info(plist))) - HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info") - - /* Get MPI Communicator */ - if (comm){ - if (MPI_SUCCESS != (mpi_code = MPI_Comm_dup(fa->comm, comm))) - HMPI_GOTO_ERROR(FAIL, "MPI_Comm_dup failed", mpi_code) - } - - if (use_gpfs) - *use_gpfs = fa->use_gpfs; - -done: - FUNC_LEAVE_API(ret_value) -} /* end H5Pget_fapl_mpiposix() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_fapl_get - * - * Purpose: Returns a file access property list which could be used to - * create another file the same as this one. - * - * Return: Success: Ptr to new file access property list with all - * fields copied from the file pointer. - * Failure: NULL - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static void * -H5FD_mpiposix_fapl_get(H5FD_t *_file) -{ - H5FD_mpiposix_t *file = (H5FD_mpiposix_t*)_file; - H5FD_mpiposix_fapl_t *fa = NULL; - int mpi_code; /* MPI return code */ - void *ret_value; /* Return value */ - - FUNC_ENTER_NOAPI_NOINIT - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - - if (NULL == (fa = H5MM_calloc(sizeof(H5FD_mpiposix_fapl_t)))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed") - - /* Duplicate the communicator. */ - if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(file->comm, &fa->comm))) - HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code) - - fa->use_gpfs = file->use_gpfs; - - /* Set return value */ - ret_value=fa; - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mpiposix_fapl_get() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_fapl_copy - * - * Purpose: Copies the mpiposix-specific file access properties. - * - * Return: Success: Ptr to a new property list - * Failure: NULL - * - * Programmer: Albert Cheng - * Apr 24, 2003 - * - *------------------------------------------------------------------------- - */ -static void * -H5FD_mpiposix_fapl_copy(const void *_old_fa) -{ - void *ret_value = NULL; - const H5FD_mpiposix_fapl_t *old_fa = (const H5FD_mpiposix_fapl_t*)_old_fa; - H5FD_mpiposix_fapl_t *new_fa = NULL; - int mpi_code; /* MPI return code */ - - FUNC_ENTER_NOAPI_NOINIT - - if (NULL == (new_fa = H5MM_malloc(sizeof(H5FD_mpiposix_fapl_t)))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed") - - /* Copy the general information */ - HDmemcpy(new_fa, old_fa, sizeof(H5FD_mpiposix_fapl_t)); - - /* Duplicate communicator. */ - if (MPI_SUCCESS != (mpi_code = MPI_Comm_dup(old_fa->comm, &new_fa->comm))) - HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code) - - new_fa->use_gpfs = old_fa->use_gpfs; - ret_value = new_fa; - -done: - if (NULL == ret_value){ - /* cleanup */ - if (new_fa) - H5MM_xfree(new_fa); - } - - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mpiposix_fapl_copy() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_fapl_free - * - * Purpose: Frees the mpiposix-specific file access properties. - * - * Return: SUCCEED (can't fail) - * - * Programmer: Albert Cheng - * Apr 24, 2003 - * - *------------------------------------------------------------------------- - */ -static herr_t -H5FD_mpiposix_fapl_free(void *_fa) -{ - H5FD_mpiposix_fapl_t *fa = (H5FD_mpiposix_fapl_t*)_fa; - - FUNC_ENTER_NOAPI_NOINIT_NOERR - - HDassert(fa); - - /* Free the internal communicator */ - HDassert(MPI_COMM_NULL != fa->comm); - MPI_Comm_free(&fa->comm); - H5MM_xfree(fa); - - FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD_mpiposix_fapl_free() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_open - * - * Purpose: Opens a file with name NAME. The FLAGS are a bit field with - * purpose similar to the second argument of open(2) and which - * are defined in H5Fpublic.h. The file access property list - * FAPL_ID contains the properties driver properties and MAXADDR - * is the largest address which this file will be expected to - * access. This is collective. - * - * Return: Success: A new file pointer. - * Failure: NULL - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static H5FD_t * -H5FD_mpiposix_open(const char *name, unsigned flags, hid_t fapl_id, - haddr_t maxaddr) -{ - H5FD_mpiposix_t *file = NULL; /* New MPIPOSIX file struct */ - int o_flags; /* Flags for file open call */ - int fd = -1; /* File handle for file opened */ - int mpi_rank; /* MPI rank of this process */ - int mpi_size; /* Total number of MPI processes */ - int mpi_code; /* mpi return code */ - const H5FD_mpiposix_fapl_t *fa = NULL; /* MPIPOSIX file access property list information */ - H5FD_mpiposix_fapl_t _fa; /* Private copy of default file access property list information */ - H5P_genplist_t *plist; /* Property list pointer */ - h5_stat_t sb; /* Portable 'stat' struct */ -#ifdef H5_HAVE_WIN32_API - struct _BY_HANDLE_FILE_INFORMATION fileinfo; -#endif - H5FD_t *ret_value = NULL; /* Return value */ - MPI_Comm comm_dup = MPI_COMM_NULL; - - FUNC_ENTER_NOAPI_NOINIT - - /* Check arguments */ - if (!name || !*name) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name") - if (0 == maxaddr || HADDR_UNDEF == maxaddr) - HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr") - if (ADDR_OVERFLOW(maxaddr)) - HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "bogus maxaddr") - - /* Obtain a pointer to mpiposix-specific file access properties */ - if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list") - if (H5P_FILE_ACCESS_DEFAULT == fapl_id || H5FD_MPIPOSIX != H5P_get_driver(plist)) { - _fa.comm = MPI_COMM_SELF; /*default*/ - _fa.use_gpfs = FALSE; - fa = &_fa; - } /* end if */ - else { - if(NULL == (fa = (const H5FD_mpiposix_fapl_t *)H5P_get_driver_info(plist))) - HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, NULL, "bad VFL driver info") - } /* end else */ - - /* Duplicate the communicator for use by this file. */ - if (MPI_SUCCESS != (mpi_code = MPI_Comm_dup(fa->comm, &comm_dup))) - HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code) - - /* Get the MPI rank of this process and the total number of processes */ - if (MPI_SUCCESS != (mpi_code = MPI_Comm_rank (comm_dup, &mpi_rank))) - HMPI_GOTO_ERROR(NULL, "MPI_Comm_rank failed", mpi_code) - if (MPI_SUCCESS != (mpi_code = MPI_Comm_size (comm_dup, &mpi_size))) - HMPI_GOTO_ERROR(NULL, "MPI_Comm_size failed", mpi_code) - - /* Build the open flags */ - o_flags = (H5F_ACC_RDWR & flags) ? O_RDWR : O_RDONLY; - - /* Only set the creation flag(s) for process 0 */ - if(0 == mpi_rank) { - if (H5F_ACC_TRUNC & flags) - o_flags |= O_TRUNC; - if (H5F_ACC_CREAT & flags) - o_flags |= O_CREAT; - if (H5F_ACC_EXCL & flags) - o_flags |= O_EXCL; - } /* end if */ - - /* Process 0 opens (or creates) the file while the rest of the - * processes wait. Then process 0 signals the other processes and they - * open (never create) the file and all processes proceed. - */ - /* Process 0 opens (or creates) file and broadcasts result to other processes */ - if(0 == mpi_rank) { - /* Open the file */ - fd = HDopen(name, o_flags, 0666); - } /* end if */ - - /* Broadcast the results of the open() from process 0 - * - * This is necessary because of the "tentative open" code in H5F_open() - * where the file is attempted to be opened with different flags from the - * user's, in order to check for the file's existence, etc. Here, process 0 - * gets different flags from the other processes (since it is in charge of - * creating the file, if necessary) and can fail in situations where the - * other process's file opens would succeed, so allow the other processes - * to check for that situation and bail out now also. - QAK - */ - if (MPI_SUCCESS != (mpi_code= MPI_Bcast(&fd, sizeof(int), MPI_BYTE, 0, comm_dup))) - HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code) - - /* If the file open on process 0 failed, bail out on all processes now */ - if(fd < 0) - HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file") - - /* Other processes (non 0) wait for broadcast result from process 0 and then open file */ - if(mpi_rank != 0) { - /* Open the file */ - if ((fd = HDopen(name, o_flags, 0666)) < 0) - HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file") - } /* end if */ - - /* Process 0 fstat()s the file and broadcasts the results to the other processes */ - if(0 == mpi_rank) { - /* Get the stat information */ - if (HDfstat(fd, &sb) < 0) - HGOTO_ERROR(H5E_FILE, H5E_BADFILE, NULL, "unable to fstat file") - } /* end if */ - - /* Broadcast the results of the fstat() from process 0 */ - if (MPI_SUCCESS != (mpi_code = MPI_Bcast(&sb, sizeof(h5_stat_t), MPI_BYTE, 0, comm_dup))) - HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code) - -#ifdef H5_HAVE_GPFS - if (fa->use_gpfs) { - /* - * Free all byte range tokens. This is a good thing to do if raw data - * is aligned on 256kB boundaries (a GPFS page is 256kB). Care should - * be taken that there aren't too many sub-page writes, or the mmfsd - * may become overwhelmed. This should probably eventually be passed - * down here as a property. The gpfs_fcntl() will most likely fail if - * 'fd' isn't on a GPFS file system. */ - struct { - gpfsFcntlHeader_t hdr; - gpfsFreeRange_t fr; - } hint; - HDmemset(&hint, 0, sizeof hint); - hint.hdr.totalLength = sizeof hint; - hint.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - hint.fr.structLen = sizeof hint.fr; - hint.fr.structType = GPFS_FREE_RANGE; - hint.fr.start = 0; - hint.fr.length = 0; - - if (gpfs_fcntl(fd, &hint) < 0) - HGOTO_ERROR(H5E_FILE, H5E_FCNTL, NULL, "failed to send hints to GPFS") - } -#endif /* H5_HAVE_GPFS */ - - /* Build the file struct and initialize it */ - if (NULL == (file=H5MM_calloc(sizeof(H5FD_mpiposix_t)))) - HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed") - -#ifdef REPORT_IO - HDfprintf(stderr, "open: rank=%d name=%s file=0x%08lx\n", mpi_rank, name, (unsigned long)file); -#endif - - /* Set the general file information */ - file->fd = fd; - file->eof = sb.st_size; - - /* for H5_HAVE_WIN32_API support. H5_HAVE_WIN32_API 'stat' does not have - * st_blksize and st_blksize is only used for the H5_HAVE_GPFS case. - */ -#ifdef H5_HAVE_GPFS - file->blksize = sb.st_blksize; -#endif - - /* Set this field in the H5FD_mpiposix_t struct for later use */ - file->use_gpfs = fa->use_gpfs; - - /* Set the MPI information */ - file->comm = comm_dup; - file->mpi_rank = mpi_rank; - file->mpi_size = mpi_size; - - /* Reset the last file I/O operation */ - file->pos = HADDR_UNDEF; - file->op = OP_UNKNOWN; - - /* Set the information for the file's device and inode */ -#ifdef H5_HAVE_WIN32_API - file->hFile = (HANDLE)_get_osfhandle(fd); - if(INVALID_HANDLE_VALUE == file->hFile) - HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to get Windows file handle") - - if(!GetFileInformationByHandle((HANDLE)file->hFile, &fileinfo)) - HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to get Windows file information") - - file->nFileIndexHigh = fileinfo.nFileIndexHigh; - file->nFileIndexLow = fileinfo.nFileIndexLow; - file->dwVolumeSerialNumber = fileinfo.dwVolumeSerialNumber; -#else /* H5_HAVE_WIN32_API */ - file->device = sb.st_dev; -#ifdef H5_VMS - file->inode[0] = sb.st_ino[0]; - file->inode[1] = sb.st_ino[1]; - file->inode[2] = sb.st_ino[2]; -#else /* H5_VMS */ - file->inode = sb.st_ino; -#endif /* H5_VMS */ -#endif /* H5_HAVE_WIN32_API */ - - /* Indicate success */ - ret_value = (H5FD_t *)file; - -done: - /* Error cleanup */ - if(NULL == ret_value) { - /* Close the file if it was left open */ - if(fd != -1) - HDclose(fd); - if (MPI_COMM_NULL != comm_dup) - MPI_Comm_free(&comm_dup); - } /* end if */ - - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mpiposix_open() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_close - * - * Purpose: Closes a file. - * - * Return: SUCCEED/FAIL - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static herr_t -H5FD_mpiposix_close(H5FD_t *_file) -{ - H5FD_mpiposix_t *file = (H5FD_mpiposix_t*)_file; - herr_t ret_value = SUCCEED; /* Return value */ - - FUNC_ENTER_NOAPI_NOINIT - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - - /* Close the unix file */ - if(HDclose(file->fd) < 0) - HGOTO_ERROR(H5E_IO, H5E_CANTCLOSEFILE, FAIL, "unable to close file") - - /* make sure all processes have closed the file before returning. */ - MPI_Barrier(file->comm); - /* Clean up other stuff */ - MPI_Comm_free(&file->comm); - H5MM_xfree(file); - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mpiposix_close() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_cmp - * - * Purpose: Compares two files belonging to this driver using an - * arbitrary (but consistent) ordering. - * - * Return: Success: A value like strcmp() - * Failure: never fails (arguments were checked by the caller). - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static int -H5FD_mpiposix_cmp(const H5FD_t *_f1, const H5FD_t *_f2) -{ - const H5FD_mpiposix_t *f1 = (const H5FD_mpiposix_t*)_f1; - const H5FD_mpiposix_t *f2 = (const H5FD_mpiposix_t*)_f2; - int ret_value = 0; - - FUNC_ENTER_NOAPI_NOINIT_NOERR - -#ifdef H5_HAVE_WIN32_API - if(f1->dwVolumeSerialNumber < f2->dwVolumeSerialNumber) HGOTO_DONE(-1) - if(f1->dwVolumeSerialNumber > f2->dwVolumeSerialNumber) HGOTO_DONE(1) - - if(f1->nFileIndexHigh < f2->nFileIndexHigh) HGOTO_DONE(-1) - if(f1->nFileIndexHigh > f2->nFileIndexHigh) HGOTO_DONE(1) - - if(f1->nFileIndexLow < f2->nFileIndexLow) HGOTO_DONE(-1) - if(f1->nFileIndexLow > f2->nFileIndexLow) HGOTO_DONE(1) -#else /* H5_HAVE_WIN32_API */ -#ifdef H5_DEV_T_IS_SCALAR - if(f1->device < f2->device) HGOTO_DONE(-1) - if(f1->device > f2->device) HGOTO_DONE(1) -#else /* H5_DEV_T_IS_SCALAR */ - /* If dev_t isn't a scalar value on this system, just use memcmp to - * determine if the values are the same or not. The actual return value - * shouldn't really matter... - */ - if(HDmemcmp(&(f1->device),&(f2->device),sizeof(dev_t)) < 0) HGOTO_DONE(-1) - if(HDmemcmp(&(f1->device),&(f2->device),sizeof(dev_t)) > 0) HGOTO_DONE(1) -#endif /* H5_DEV_T_IS_SCALAR */ -#ifdef H5_VMS - if(HDmemcmp(&(f1->inode), &(f2->inode), 3 * sizeof(ino_t)) < 0) HGOTO_DONE(-1) - if(HDmemcmp(&(f1->inode), &(f2->inode), 3 * sizeof(ino_t)) > 0) HGOTO_DONE(1) -#else /* H5_VMS */ - if(f1->inode < f2->inode) HGOTO_DONE(-1) - if(f1->inode > f2->inode) HGOTO_DONE(1) -#endif /* H5_VMS */ -#endif /* H5_HAVE_WIN32_API */ - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mpiposix_cmp() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_query - * - * Purpose: Set the flags that this VFL driver is capable of supporting. - * (listed in H5FDpublic.h) - * - * Return: SUCCEED (can't fail) - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static herr_t -H5FD_mpiposix_query(const H5FD_t UNUSED *_file, unsigned long *flags /* out */) -{ - FUNC_ENTER_NOAPI_NOINIT_NOERR - - /* Set the VFL feature flags that this driver supports */ - if(flags) { - *flags=0; - *flags |= H5FD_FEAT_AGGREGATE_METADATA; /* OK to aggregate metadata allocations */ - *flags |= H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */ - *flags |= H5FD_FEAT_HAS_MPI; /* This driver uses MPI */ - *flags |= H5FD_FEAT_ALLOCATE_EARLY; /* Allocate space early instead of late */ - } /* end if */ - - FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD_mpiposix_query() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_get_eoa - * - * Purpose: Gets the end-of-address marker for the file. The EOA marker - * is the first address past the last byte allocated in the - * format address space. - * - * Return: Success: The end-of-address marker. - * Failure: HADDR_UNDEF - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static haddr_t -H5FD_mpiposix_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type) -{ - const H5FD_mpiposix_t *file = (const H5FD_mpiposix_t*)_file; - - FUNC_ENTER_NOAPI_NOINIT_NOERR - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - - FUNC_LEAVE_NOAPI(file->eoa) -} /* end H5FD_mpiposix_get_eoa() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_set_eoa - * - * Purpose: Set the end-of-address marker for the file. This function is - * called shortly after an existing HDF5 file is opened in order - * to tell the driver where the end of the HDF5 data is located. - * - * Return: SUCCEED (can't fail) - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static herr_t -H5FD_mpiposix_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr) -{ - H5FD_mpiposix_t *file = (H5FD_mpiposix_t*)_file; - - FUNC_ENTER_NOAPI_NOINIT_NOERR - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - - file->eoa = addr; - - FUNC_LEAVE_NOAPI(SUCCEED) -} /* end H5FD_mpi_posix_set_eoa() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_get_eof - * - * Purpose: Gets the end-of-file marker for the file. The EOF marker - * is the real size of the file. - * - * The MPIPOSIX driver doesn't bother keeping this field updated - * since that's a relatively expensive operation. Fortunately - * the library only needs the EOF just after the file is opened - * in order to determine whether the file is empty, truncated, - * or okay. - * - * Return: Success: The end-of-address marker. - * Failure: HADDR_UNDEF - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static haddr_t -H5FD_mpiposix_get_eof(const H5FD_t *_file) -{ - const H5FD_mpiposix_t *file = (const H5FD_mpiposix_t*)_file; - - FUNC_ENTER_NOAPI_NOINIT_NOERR - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - - FUNC_LEAVE_NOAPI(MAX(file->eof, file->eoa)) -} /* end H5FD_mpiposix_get_eof() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_get_handle - * - * Purpose: Returns the file handle of MPI-POSIX file driver. - * - * Returns: SUCCEED/FAIL - * - * Programmer: Raymond Lu - * Sept. 16, 2002 - * - *------------------------------------------------------------------------- - */ -static herr_t -H5FD_mpiposix_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void** file_handle) -{ - H5FD_mpiposix_t *file = (H5FD_mpiposix_t *)_file; - herr_t ret_value = SUCCEED; - - FUNC_ENTER_NOAPI_NOINIT - - if(!file_handle) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid") - - *file_handle = &(file->fd); - -done: - FUNC_LEAVE_NOAPI(ret_value) -} - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_read - * - * Purpose: Reads SIZE bytes of data from FILE beginning at address ADDR - * into buffer BUF according to data transfer properties in - * DXPL_ID using potentially complex file and buffer types to - * effect the transfer. - * - * Reading past the end of the file returns zeros instead of - * failing. - * - * Return: Success: Non-negative. Result is stored in caller-supplied - * buffer BUF. - * Failure: Negative, Contents of buffer BUF are undefined. - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static herr_t -H5FD_mpiposix_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, - haddr_t addr, size_t size, void *buf/*out*/) -{ - H5FD_mpiposix_t *file = (H5FD_mpiposix_t*)_file; - ssize_t nbytes; /* Number of bytes read each I/O call */ - herr_t ret_value = SUCCEED; - - FUNC_ENTER_NOAPI_NOINIT - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - HDassert(buf); - - /* Check for overflow conditions */ - if (HADDR_UNDEF == addr) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined") - if (REGION_OVERFLOW(addr, size)) - HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow") - if((addr + size) > file->eoa) - HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow") - -#ifdef REPORT_IO - { - int commrank; - MPI_Comm_rank(MPI_COMM_WORLD, &commrank); - HDfprintf(stderr, "read: rank=%d file=0x%08lx type=%d, addr=%a size=%Zu\n", - commrank, (unsigned long)file, (int)type, addr, size); - } -#endif - - /* Seek to the correct location */ - if(addr != file->pos || OP_READ != file->op) { - if(HDlseek(file->fd, (HDoff_t)addr, SEEK_SET) < 0) - HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position") - } /* end if */ - - /* Read data, being careful of interrupted system calls, partial results, - * and the end of the file. - */ - while(size > 0) { - - h5_posix_io_t bytes_in = 0; /* # of bytes to read */ - h5_posix_io_ret_t bytes_read = -1; /* # of bytes actually read */ - - /* Trying to read more bytes than the return type can handle is - * undefined behavior in POSIX. - */ - if(size > H5_POSIX_MAX_IO_BYTES) - bytes_in = H5_POSIX_MAX_IO_BYTES; - else - bytes_in = (h5_posix_io_t)size; - - do { - bytes_read = HDread(file->fd, buf, bytes_in); - } while(-1 == bytes_read && EINTR == errno); - - if(-1 == bytes_read) { /* error */ - int myerrno = errno; - time_t mytime = HDtime(NULL); - HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR); - - HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed: time = %s, file descriptor = %d, errno = %d, error message = '%s', buf = %p, total read size = %llu, bytes this sub-read = %llu, bytes actually read = %llu, offset = %llu", HDctime(&mytime), file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long long)size, (unsigned long long)bytes_in, (unsigned long long)bytes_read, (unsigned long long)myoffset); - } /* end if */ - - if(0 == bytes_read) { - /* end of file but not end of format address space */ - HDmemset(buf, 0, size); - break; - } /* end if */ - - HDassert(bytes_read >= 0); - HDassert((size_t)bytes_read <= size); - - size -= (size_t)bytes_read; - addr += (haddr_t)bytes_read; - buf = (char *)buf + bytes_read; - } /* end while */ - - /* Update current position */ - file->pos = addr; - file->op = OP_READ; - -done: - /* Check for error */ - if(ret_value < 0) { - /* Reset last file I/O information */ - file->pos = HADDR_UNDEF; - file->op = OP_UNKNOWN; - } /* end if */ - - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mpiposix_read() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_write - * - * Purpose: Writes SIZE bytes of data to FILE beginning at address ADDR - * from buffer BUF according to data transfer properties in - * DXPL_ID using potentially complex file and buffer types to - * effect the transfer. - * - * Return: SUCCEED/FAIL - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static herr_t -H5FD_mpiposix_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, - size_t size, const void *buf) -{ - H5FD_mpiposix_t *file = (H5FD_mpiposix_t*)_file; -#if 0 /* JRM */ - int mpi_code; /* MPI return code */ -#endif /* JRM */ - ssize_t nbytes; /* Number of bytes written each I/O call */ - H5P_genplist_t *plist; /* Property list pointer */ - herr_t ret_value = SUCCEED; /* Return value */ - - FUNC_ENTER_NOAPI_NOINIT - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - HDassert(H5I_GENPROP_LST == H5I_get_type(dxpl_id)); - HDassert(TRUE == H5P_isa_class(dxpl_id,H5P_DATASET_XFER)); - HDassert(buf); - - /* Check for overflow conditions */ - if (HADDR_UNDEF == addr) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined") - if (REGION_OVERFLOW(addr, size)) - HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow") - if ((addr + size) > file->eoa) - HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow") - - /* Obtain the data transfer properties */ - if(NULL == (plist = H5I_object(dxpl_id))) - HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list") - - /* Metadata specific actions */ - /* All metadata is now written from process 0 -- thus this function - * needs to be re-written to reflect this. For now I have simply - * commented out the code that attempts to synchronize metadata - * writes between processes, but we should really just flag an error - * whenever any process other than process 0 attempts to write - * metadata. - * -- JRM 9/1/05 - */ - if(type != H5FD_MEM_DRAW) { - unsigned block_before_meta_write = 0; /* Whether to block before a metadata write */ - - /* Check if we need to synchronize all processes before attempting - * metadata write (Prevents race condition where the process writing - * the metadata goes ahead and writes the metadata to the file before - * all the processes have read the data, "transmitting" data from the - * "future" to the reading process. -QAK ) - * - * The only time we don't want to block before a metadata write is when - * we are flushing out a bunch of metadata. Then, we block before the - * first write and don't block for further writes in the sequence. - */ - if(H5P_exist_plist(plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME) > 0) - if(H5P_get(plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,&block_before_meta_write) < 0) - HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get H5AC property") - -#if 0 /* JRM */ - if(block_before_meta_write) - if (MPI_SUCCESS != (mpi_code = MPI_Barrier(file->comm))) - HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code) -#endif /* JRM */ - -#if 0 /* JRM -- 3/23/10 */ /* this is no longer always the case */ - /* Only one process will do the actual write if all procs in comm write same metadata */ - if (file->mpi_rank != H5_PAR_META_WRITE) - HGOTO_DONE(SUCCEED) /* skip the actual write */ -#endif /* JRM */ - } /* end if */ - -#ifdef REPORT_IO - { - int commrank; - MPI_Comm_rank(MPI_COMM_WORLD, &commrank); - HDfprintf(stderr, "write: rank=%d file=0x%08lx type=%d, addr=%a size=%Zu %s\n", - commrank, (unsigned long)file, (int)type, addr, size, - 0 == file->naccess ? "(FIRST ACCESS)" : ""); - } -#endif - - if (0 == file->naccess++) { - /* First write access to this file */ -#ifdef H5_HAVE_GPFS - if (file->use_gpfs) { - struct { - gpfsFcntlHeader_t hdr; - gpfsMultipleAccessRange_t mar; - } hint; - HDmemset(&hint, 0, sizeof hint); - hint.hdr.totalLength = sizeof hint; - hint.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION; - hint.mar.structLen = sizeof hint.mar; - hint.mar.structType = GPFS_MULTIPLE_ACCESS_RANGE; - hint.mar.accRangeCnt = 1; - hint.mar.accRangeArray[0].blockNumber = addr / file->blksize; - hint.mar.accRangeArray[0].start = addr % file->blksize; - hint.mar.accRangeArray[0].length = MIN(file->blksize-hint.mar.accRangeArray[0].start, size); - hint.mar.accRangeArray[0].isWrite = 1; - if (gpfs_fcntl(file->fd, &hint)<0) - HGOTO_ERROR(H5E_FILE, H5E_FCNTL, NULL, "failed to send hints to GPFS") - } -#endif /* H5_HAVE_GPFS */ - } - - /* Seek to the correct location */ - if(addr != file->pos || OP_WRITE != file->op) { - if(HDlseek(file->fd, (HDoff_t)addr, SEEK_SET) < 0) - HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position") - } /* end if */ - - /* Write data, being careful of interrupted system calls, partial results, - * and the end of the file. - */ - while(size > 0) { - - h5_posix_io_t bytes_in = 0; /* # of bytes to write */ - h5_posix_io_ret_t bytes_wrote = -1; /* # of bytes actually written */ - - /* Trying to write more bytes than the return type can handle is - * undefined behavior in POSIX. - */ - if(size > H5_POSIX_MAX_IO_BYTES) - bytes_in = H5_POSIX_MAX_IO_BYTES; - else - bytes_in = (h5_posix_io_t)size; - - do { - bytes_wrote = HDwrite(file->fd, buf, bytes_in); - } while(-1 == bytes_wrote && EINTR == errno); - - if(-1 == bytes_wrote) { /* error */ - int myerrno = errno; - time_t mytime = HDtime(NULL); - HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR); - - HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file write failed: time = %s, file descriptor = %d, errno = %d, error message = '%s', buf = %p, total write size = %llu, bytes this sub-write = %llu, bytes actually written = %llu, offset = %llu", HDctime(&mytime), file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long long)size, (unsigned long long)bytes_in, (unsigned long long)bytes_wrote, (unsigned long long)myoffset); - } /* end if */ - - if(0 == bytes_wrote) { - /* end of file but not end of format address space */ - HDmemset(buf, 0, size); - break; - } /* end if */ - - HDassert(bytes_wrote >= 0); - HDassert((size_t)bytes_wrote <= size); - - size -= (size_t)bytes_wrote; - addr += (haddr_t)bytes_wrote; - buf = (char *)buf + bytes_wrote; - } /* end while */ - - /* Update current position */ - file->pos = addr; - file->op = OP_WRITE; - -done: - /* Check for error */ - if(ret_value < 0) { - /* Reset last file I/O information */ - file->pos = HADDR_UNDEF; - file->op = OP_UNKNOWN; - } /* end if */ -#if 0 /* JRM */ - /* Since metadata writes are now done by process 0 only, this broadcast - * is no longer needed. I leave it in and commented out to remind us - * that we need to re-work this function to reflect this reallity. - * - * -- JRM 9/1/05 - */ - - /* Guard against getting into metadata broadcast in failure cases */ - else { - /* when only one process writes, need to broadcast the ret_value to other processes */ - if (type != H5FD_MEM_DRAW) { - if (MPI_SUCCESS != (mpi_code= MPI_Bcast(&ret_value, sizeof(ret_value), MPI_BYTE, H5_PAR_META_WRITE, file->comm))) - HMPI_GOTO_ERROR(FAIL, "MPI_Bcast failed", mpi_code) - } /* end if */ - } /* end else */ -#endif /* JRM */ - - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mpiposix_write() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_truncate - * - * Purpose: Makes sure that the true file size is the same (or larger) - * than the end-of-address. - * - * Return: SUCCEED/FAIL - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static herr_t -H5FD_mpiposix_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing) -{ - H5FD_mpiposix_t *file = (H5FD_mpiposix_t*)_file; - herr_t ret_value = SUCCEED; /* Return value */ - int mpi_code; /* MPI return code */ - - FUNC_ENTER_NOAPI_NOINIT - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - - /* Extend the file to make sure it's large enough */ - if(file->eoa > file->last_eoa) { - /* Use the round-robin process to truncate (extend) the file */ - if(file->mpi_rank == H5_PAR_META_WRITE) { - -#ifdef H5_HAVE_WIN32_API - LARGE_INTEGER li; /* 64-bit (union) integer for SetFilePointer() call */ - DWORD dwPtrLow; /* Low-order pointer bits from SetFilePointer() - * Only used as an error code here. - */ - DWORD dwError; /* DWORD error code from GetLastError() */ - BOOL bError; /* Boolean error flag */ - - /* Windows uses this odd QuadPart union for 32/64-bit portability */ - li.QuadPart = (__int64)file->eoa; - - /* Extend the file to make sure it's large enough. - * - * Since INVALID_SET_FILE_POINTER can technically be a valid return value - * from SetFilePointer(), we also need to check GetLastError(). - */ - dwPtrLow = SetFilePointer(file->hFile, li.LowPart, &li.HighPart, FILE_BEGIN); - if(INVALID_SET_FILE_POINTER == dwPtrLow) { - dwError = GetLastError(); - if(dwError != NO_ERROR ) - HGOTO_ERROR(H5E_FILE, H5E_FILEOPEN, FAIL, "unable to set file pointer") - } - - bError = SetEndOfFile(file->hFile); - if(0 == bError) - HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly") -#else /* H5_HAVE_WIN32_API */ -#ifdef H5_VMS - /* Reset seek offset to the beginning of the file, so that the file isn't - * re-extended later. This may happen on Open VMS. */ - if(-1 == HDlseek(file->fd, (HDoff_t)0, SEEK_SET)) - HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position") -#endif /* H5_VMS */ - if(-1 == HDftruncate(file->fd, (HDoff_t)file->eoa)) - HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly") -#endif /* H5_HAVE_WIN32_API */ - } /* end if */ - - /* Don't let any proc return until all have extended the file. - * (Prevents race condition where some processes go ahead and write - * more data to the file before all the processes have finished making - * it the shorter length, potentially truncating the file and dropping - * the new data written) - */ - if(MPI_SUCCESS != (mpi_code = MPI_Barrier(file->comm))) - HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code) - - /* Update the 'last' eoa and eof values */ - file->last_eoa = file->eoa; - file->eof = file->eoa; - - /* Reset last file I/O information */ - file->pos = HADDR_UNDEF; - file->op = OP_UNKNOWN; - } /* end if */ - -done: - FUNC_LEAVE_NOAPI(ret_value) -} /* end H5FD_mpiposix_truncate() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_mpi_rank - * - * Purpose: Returns the MPI rank for a process - * - * Return: MPI rank. Cannot report failure. - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static int -H5FD_mpiposix_mpi_rank(const H5FD_t *_file) -{ - const H5FD_mpiposix_t *file = (const H5FD_mpiposix_t*)_file; - - FUNC_ENTER_NOAPI_NOINIT_NOERR - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - - FUNC_LEAVE_NOAPI(file->mpi_rank) -} /* end H5FD_mpiposix_mpi_rank() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_mpi_size - * - * Purpose: Returns the number of MPI processes - * - * Return: The number of MPI processes. Cannot report failure. - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static int -H5FD_mpiposix_mpi_size(const H5FD_t *_file) -{ - const H5FD_mpiposix_t *file = (const H5FD_mpiposix_t*)_file; - - FUNC_ENTER_NOAPI_NOINIT_NOERR - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - - FUNC_LEAVE_NOAPI(file->mpi_size) -} /* end H5FD_mpiposix_mpi_size() */ - - -/*------------------------------------------------------------------------- - * Function: H5FD_mpiposix_communicator - * - * Purpose: Returns the MPI communicator for the file. - * - * Return: The MPI communicator. Cannot report failure. - * - * Programmer: Quincey Koziol - * Thursday, July 11, 2002 - * - *------------------------------------------------------------------------- - */ -static MPI_Comm -H5FD_mpiposix_communicator(const H5FD_t *_file) -{ - const H5FD_mpiposix_t *file = (const H5FD_mpiposix_t*)_file; - - FUNC_ENTER_NOAPI_NOINIT_NOERR - - HDassert(file); - HDassert(H5FD_MPIPOSIX == file->pub.driver_id); - - FUNC_LEAVE_NOAPI(file->comm) -} /* end H5FD_mpi_posix_communicator() */ - -#endif /*H5_HAVE_PARALLEL*/ diff --git a/src/H5FDmpiposix.h b/src/H5FDmpiposix.h deleted file mode 100644 index 12ff206..0000000 --- a/src/H5FDmpiposix.h +++ /dev/null @@ -1,51 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * 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 files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* - * Programmer: Quincey Koziol <koziol@hdfgroup.org> - * Thursday, July 11, 2002 - * - * Purpose: The public header file for the mpiposix driver. - */ - -#ifndef __H5FDmpiposix_H -#define __H5FDmpiposix_H - -#ifdef H5_HAVE_PARALLEL -# define H5FD_MPIPOSIX (H5FD_mpiposix_init()) -#else -# define H5FD_MPIPOSIX (-1) -#endif - -/* Macros */ - -#ifdef H5_HAVE_PARALLEL - -/* Function prototypes */ -#ifdef __cplusplus -extern "C" { -#endif - -H5_DLL hid_t H5FD_mpiposix_init(void); -H5_DLL herr_t H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm, hbool_t use_gpfs); -H5_DLL herr_t H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/, hbool_t *use_gpfs/*out*/); - -#ifdef __cplusplus -} -#endif - -#endif /*H5_HAVE_PARALLEL*/ - -#endif /* __H5FDmpiposix_H */ diff --git a/src/H5FDprivate.h b/src/H5FDprivate.h index 600cae1..6e4df22 100644 --- a/src/H5FDprivate.h +++ b/src/H5FDprivate.h @@ -43,9 +43,6 @@ #define IS_H5FD_MPIO(f) /* (H5F_t *f) */ \ (H5FD_MPIO==H5F_DRIVER_ID(f)) -#define IS_H5FD_MPIPOSIX(f) /* (H5F_t *f) */ \ - (H5FD_MPIPOSIX==H5F_DRIVER_ID(f)) - #ifdef H5_HAVE_PARALLEL /* ======== Temporary data transfer properties ======== */ /* Definitions for memory MPI type property */ diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h index 6b17e0b..d35f4da 100644 --- a/src/H5Ppublic.h +++ b/src/H5Ppublic.h @@ -160,11 +160,10 @@ typedef enum H5D_mpio_no_collective_cause_t { H5D_MPIO_SET_INDEPENDENT = 0x01, H5D_MPIO_DATATYPE_CONVERSION = 0x02, H5D_MPIO_DATA_TRANSFORMS = 0x04, - H5D_MPIO_SET_MPIPOSIX = 0x08, + H5D_MPIO_MPI_OPT_TYPES_ENV_VAR_DISABLED = 0x08, H5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES = 0x10, - H5D_MPIO_POINT_SELECTIONS = 0x20, - H5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET = 0x40, - H5D_MPIO_FILTERS = 0x80 + H5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET = 0x20, + H5D_MPIO_FILTERS = 0x40 } H5D_mpio_no_collective_cause_t; /********************/ @@ -67,10 +67,6 @@ static H5S_t *H5S_decode(const unsigned char *buf); /*****************************/ /* Library Private Variables */ /*****************************/ -#ifdef H5_HAVE_PARALLEL -/* Global vars whose value can be set from environment variable also */ -hbool_t H5S_mpi_opt_types_g = TRUE; -#endif /* H5_HAVE_PARALLEL */ /*******************/ @@ -119,15 +115,6 @@ H5S_init_interface(void) if(H5I_register_type(H5I_DATASPACE_CLS) < 0) HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize interface") -#ifdef H5_HAVE_PARALLEL - { - /* Allow MPI buf-and-file-type optimizations? */ - const char *s = HDgetenv ("HDF5_MPI_OPT_TYPES"); - if (s && HDisdigit(*s)) - H5S_mpi_opt_types_g = (hbool_t)HDstrtol (s, NULL, 0); - } -#endif /* H5_HAVE_PARALLEL */ - done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5S_init_interface() */ diff --git a/src/H5Sprivate.h b/src/H5Sprivate.h index be8a28f..44cd6c3 100644 --- a/src/H5Sprivate.h +++ b/src/H5Sprivate.h @@ -268,10 +268,6 @@ H5_DLL herr_t H5S_select_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem); H5_DLL herr_t H5S_select_iter_release(H5S_sel_iter_t *sel_iter); #ifdef H5_HAVE_PARALLEL -/* Global vars whose value comes from environment variable */ -/* (Defined in H5S.c) */ -H5_DLLVAR hbool_t H5S_mpi_opt_types_g; - H5_DLL herr_t H5S_mpio_space_type(const H5S_t *space, size_t elmt_size, /* out: */ MPI_Datatype *new_type, int *count, diff --git a/src/H5config.h.in b/src/H5config.h.in index 02bafd8..76de6c6 100644 --- a/src/H5config.h.in +++ b/src/H5config.h.in @@ -174,12 +174,6 @@ /* Define to 1 if you have the `get_fpc_csr' function. */ #undef HAVE_GET_FPC_CSR -/* Define if we have GPFS support */ -#undef HAVE_GPFS - -/* Define to 1 if you have the <gpfs.h> header file. */ -#undef HAVE_GPFS_H - /* Define if library will contain instrumentation to detect correct optimization operation */ #undef HAVE_INSTRUMENTED_LIBRARY diff --git a/src/H5trace.c b/src/H5trace.c index 2babcd4..3a84489 100644 --- a/src/H5trace.c +++ b/src/H5trace.c @@ -544,48 +544,45 @@ H5_trace(const double *returning, const char *func, const char *type, ...) } /* end if */ else { H5D_mpio_no_collective_cause_t nocol_cause_mode = (H5D_mpio_no_collective_cause_t)va_arg(ap, int); + hbool_t flag_already_displayed = FALSE; - switch(nocol_cause_mode) { - case H5D_MPIO_COLLECTIVE: - fprintf(out, "H5D_MPIO_COLLECTIVE"); - break; - - case H5D_MPIO_SET_INDEPENDENT: - fprintf(out, "H5D_MPIO_SET_INDEPENDENT"); - break; - - case H5D_MPIO_DATATYPE_CONVERSION: - fprintf(out, "H5D_MPIO_DATATYPE_CONVERSION"); - break; - - case H5D_MPIO_DATA_TRANSFORMS: - fprintf(out, "H5D_MPIO_DATA_TRANSFORMS"); - break; - - case H5D_MPIO_SET_MPIPOSIX: - fprintf(out, "H5D_MPIO_SET_MPIPOSIX"); - break; - - case H5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES: - fprintf(out, "H5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES"); - break; - - case H5D_MPIO_POINT_SELECTIONS: - fprintf(out, "H5D_MPIO_POINT_SELECTIONS"); - break; - - case H5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET: - fprintf(out, "H5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET"); - break; - - case H5D_MPIO_FILTERS: - fprintf(out, "H5D_MPIO_FILTERS"); - break; + /* Check for all bit-flags which might be set */ + if(nocol_cause_mode & H5D_MPIO_COLLECTIVE) { + fprintf(out, "H5D_MPIO_COLLECTIVE"); + flag_already_displayed = TRUE; + } /* end if */ + if(nocol_cause_mode & H5D_MPIO_SET_INDEPENDENT) { + fprintf(out, "%sH5D_MPIO_SET_INDEPENDENT", flag_already_displayed ? " | " : ""); + flag_already_displayed = TRUE; + } /* end if */ + if(nocol_cause_mode & H5D_MPIO_DATATYPE_CONVERSION) { + fprintf(out, "%sH5D_MPIO_DATATYPE_CONVERSION", flag_already_displayed ? " | " : ""); + flag_already_displayed = TRUE; + } /* end if */ + if(nocol_cause_mode & H5D_MPIO_DATA_TRANSFORMS) { + fprintf(out, "%sH5D_MPIO_DATA_TRANSFORMS", flag_already_displayed ? " | " : ""); + flag_already_displayed = TRUE; + } /* end if */ + if(nocol_cause_mode & H5D_MPIO_MPI_OPT_TYPES_ENV_VAR_DISABLED) { + fprintf(out, "%sH5D_MPIO_MPI_OPT_TYPES_ENV_VAR_DISABLED", flag_already_displayed ? " | " : ""); + flag_already_displayed = TRUE; + } /* end if */ + if(nocol_cause_mode & H5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES) { + fprintf(out, "%sH5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES", flag_already_displayed ? " | " : ""); + flag_already_displayed = TRUE; + } /* end if */ + if(nocol_cause_mode & H5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET) { + fprintf(out, "%sH5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET", flag_already_displayed ? " | " : ""); + flag_already_displayed = TRUE; + } /* end if */ + if(nocol_cause_mode & H5D_MPIO_FILTERS) { + fprintf(out, "%sH5D_MPIO_FILTERS", flag_already_displayed ? " | " : ""); + flag_already_displayed = TRUE; + } /* end if */ - default: - fprintf(out, "%ld", (long)nocol_cause_mode); - break; - } /* end switch */ + /* Display '<none>' if there's no flags set */ + if(!flag_already_displayed) + fprintf(out, "<none>"); } /* end else */ break; diff --git a/src/Makefile.am b/src/Makefile.am index 6525211..adc3032 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -60,7 +60,7 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \ H5FAstat.c H5FAtest.c \ H5FD.c H5FDcore.c \ H5FDdirect.c H5FDfamily.c H5FDint.c H5FDlog.c H5FDmpi.c H5FDmpio.c \ - H5FDmpiposix.c H5FDmulti.c H5FDsec2.c H5FDspace.c H5FDstdio.c \ + H5FDmulti.c H5FDsec2.c H5FDspace.c H5FDstdio.c \ H5FL.c H5FO.c H5FS.c H5FScache.c H5FSdbg.c H5FSsection.c H5FSstat.c H5FStest.c \ H5G.c H5Gbtree2.c H5Gcache.c \ H5Gcompact.c H5Gdense.c H5Gdeprec.c H5Gent.c \ @@ -113,8 +113,9 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \ include_HEADERS = hdf5.h H5api_adpt.h H5overflow.h H5pubconf.h H5public.h H5version.h \ H5Apublic.h H5ACpublic.h \ H5Cpublic.h H5Dpublic.h \ - H5Epubgen.h H5Epublic.h H5Fpublic.h H5FDpublic.h H5FDcore.h H5FDdirect.h \ - H5FDfamily.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \ + H5Epubgen.h H5Epublic.h H5Fpublic.h \ + H5FDpublic.h H5FDcore.h H5FDdirect.h \ + H5FDfamily.h H5FDlog.h H5FDmpi.h H5FDmpio.h \ H5FDmulti.h H5FDsec2.h H5FDstdio.h \ H5Gpublic.h H5Ipublic.h H5Lpublic.h \ H5MMpublic.h H5Opublic.h H5Ppublic.h \ diff --git a/src/Makefile.in b/src/Makefile.in index 5e9edab..d3c507f 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -136,42 +136,41 @@ am_libhdf5_la_OBJECTS = H5.lo H5checksum.lo H5dbg.lo H5system.lo \ H5FAcache.lo H5FAdbg.lo H5FAdblock.lo H5FAdblkpage.lo \ H5FAhdr.lo H5FAstat.lo H5FAtest.lo H5FD.lo H5FDcore.lo \ H5FDdirect.lo H5FDfamily.lo H5FDint.lo H5FDlog.lo H5FDmpi.lo \ - H5FDmpio.lo H5FDmpiposix.lo H5FDmulti.lo H5FDsec2.lo \ - H5FDspace.lo H5FDstdio.lo H5FL.lo H5FO.lo H5FS.lo H5FScache.lo \ - H5FSdbg.lo H5FSsection.lo H5FSstat.lo H5FStest.lo H5G.lo \ - H5Gbtree2.lo H5Gcache.lo H5Gcompact.lo H5Gdense.lo \ - H5Gdeprec.lo H5Gent.lo H5Gint.lo H5Glink.lo H5Gloc.lo \ - H5Gname.lo H5Gnode.lo H5Gobj.lo H5Goh.lo H5Groot.lo H5Gstab.lo \ - H5Gtest.lo H5Gtraverse.lo H5HF.lo H5HFbtree2.lo H5HFcache.lo \ - H5HFdbg.lo H5HFdblock.lo H5HFdtable.lo H5HFhdr.lo H5HFhuge.lo \ - H5HFiblock.lo H5HFiter.lo H5HFman.lo H5HFsection.lo \ - H5HFspace.lo H5HFstat.lo H5HFtest.lo H5HFtiny.lo H5HG.lo \ - H5HGcache.lo H5HGdbg.lo H5HGquery.lo H5HL.lo H5HLcache.lo \ - H5HLdbg.lo H5HLint.lo H5HP.lo H5I.lo H5Itest.lo H5L.lo \ - H5Lexternal.lo H5lib_settings.lo H5MF.lo H5MFaggr.lo \ - H5MFdbg.lo H5MFsection.lo H5MM.lo H5MP.lo H5MPtest.lo H5O.lo \ - H5Oainfo.lo H5Oalloc.lo H5Oattr.lo H5Oattribute.lo H5Obogus.lo \ - H5Obtreek.lo H5Ocache.lo H5Ochunk.lo H5Ocont.lo H5Ocopy.lo \ - H5Odbg.lo H5Odrvinfo.lo H5Odtype.lo H5Oefl.lo H5Ofill.lo \ - H5Ofsinfo.lo H5Oginfo.lo H5Olayout.lo H5Olinfo.lo H5Olink.lo \ - H5Omessage.lo H5Omtime.lo H5Oname.lo H5Onull.lo H5Opline.lo \ - H5Orefcount.lo H5Osdspace.lo H5Oshared.lo H5Ostab.lo \ - H5Oshmesg.lo H5Otest.lo H5Ounknown.lo H5P.lo H5Pacpl.lo \ - H5Pdapl.lo H5Pdcpl.lo H5Pdeprec.lo H5Pdxpl.lo H5Pencdec.lo \ - H5Pfapl.lo H5Pfcpl.lo H5Pfmpl.lo H5Pgcpl.lo H5Pint.lo \ - H5Plapl.lo H5Plcpl.lo H5Pocpl.lo H5Pocpypl.lo H5Pstrcpl.lo \ - H5Ptest.lo H5PL.lo H5R.lo H5Rdeprec.lo H5UC.lo H5RS.lo H5S.lo \ - H5Sall.lo H5Sdbg.lo H5Shyper.lo H5Smpio.lo H5Snone.lo \ - H5Spoint.lo H5Sselect.lo H5Stest.lo H5SL.lo H5SM.lo \ - H5SMbtree2.lo H5SMcache.lo H5SMmessage.lo H5SMtest.lo H5ST.lo \ - H5T.lo H5Tarray.lo H5Tbit.lo H5Tcommit.lo H5Tcompound.lo \ - H5Tconv.lo H5Tcset.lo H5Tdbg.lo H5Tdeprec.lo H5Tenum.lo \ - H5Tfields.lo H5Tfixed.lo H5Tfloat.lo H5Tinit.lo H5Tnative.lo \ - H5Toffset.lo H5Toh.lo H5Topaque.lo H5Torder.lo H5Tpad.lo \ - H5Tprecis.lo H5Tstrpad.lo H5Tvisit.lo H5Tvlen.lo H5TS.lo \ - H5VM.lo H5WB.lo H5Z.lo H5Zdeflate.lo H5Zfletcher32.lo \ - H5Znbit.lo H5Zshuffle.lo H5Zszip.lo H5Zscaleoffset.lo \ - H5Ztrans.lo + H5FDmpio.lo H5FDmulti.lo H5FDsec2.lo H5FDspace.lo H5FDstdio.lo \ + H5FL.lo H5FO.lo H5FS.lo H5FScache.lo H5FSdbg.lo H5FSsection.lo \ + H5FSstat.lo H5FStest.lo H5G.lo H5Gbtree2.lo H5Gcache.lo \ + H5Gcompact.lo H5Gdense.lo H5Gdeprec.lo H5Gent.lo H5Gint.lo \ + H5Glink.lo H5Gloc.lo H5Gname.lo H5Gnode.lo H5Gobj.lo H5Goh.lo \ + H5Groot.lo H5Gstab.lo H5Gtest.lo H5Gtraverse.lo H5HF.lo \ + H5HFbtree2.lo H5HFcache.lo H5HFdbg.lo H5HFdblock.lo \ + H5HFdtable.lo H5HFhdr.lo H5HFhuge.lo H5HFiblock.lo H5HFiter.lo \ + H5HFman.lo H5HFsection.lo H5HFspace.lo H5HFstat.lo H5HFtest.lo \ + H5HFtiny.lo H5HG.lo H5HGcache.lo H5HGdbg.lo H5HGquery.lo \ + H5HL.lo H5HLcache.lo H5HLdbg.lo H5HLint.lo H5HP.lo H5I.lo \ + H5Itest.lo H5L.lo H5Lexternal.lo H5lib_settings.lo H5MF.lo \ + H5MFaggr.lo H5MFdbg.lo H5MFsection.lo H5MM.lo H5MP.lo \ + H5MPtest.lo H5O.lo H5Oainfo.lo H5Oalloc.lo H5Oattr.lo \ + H5Oattribute.lo H5Obogus.lo H5Obtreek.lo H5Ocache.lo \ + H5Ochunk.lo H5Ocont.lo H5Ocopy.lo H5Odbg.lo H5Odrvinfo.lo \ + H5Odtype.lo H5Oefl.lo H5Ofill.lo H5Ofsinfo.lo H5Oginfo.lo \ + H5Olayout.lo H5Olinfo.lo H5Olink.lo H5Omessage.lo H5Omtime.lo \ + H5Oname.lo H5Onull.lo H5Opline.lo H5Orefcount.lo H5Osdspace.lo \ + H5Oshared.lo H5Ostab.lo H5Oshmesg.lo H5Otest.lo H5Ounknown.lo \ + H5P.lo H5Pacpl.lo H5Pdapl.lo H5Pdcpl.lo H5Pdeprec.lo \ + H5Pdxpl.lo H5Pencdec.lo H5Pfapl.lo H5Pfcpl.lo H5Pfmpl.lo \ + H5Pgcpl.lo H5Pint.lo H5Plapl.lo H5Plcpl.lo H5Pocpl.lo \ + H5Pocpypl.lo H5Pstrcpl.lo H5Ptest.lo H5PL.lo H5R.lo \ + H5Rdeprec.lo H5UC.lo H5RS.lo H5S.lo H5Sall.lo H5Sdbg.lo \ + H5Shyper.lo H5Smpio.lo H5Snone.lo H5Spoint.lo H5Sselect.lo \ + H5Stest.lo H5SL.lo H5SM.lo H5SMbtree2.lo H5SMcache.lo \ + H5SMmessage.lo H5SMtest.lo H5ST.lo H5T.lo H5Tarray.lo \ + H5Tbit.lo H5Tcommit.lo H5Tcompound.lo H5Tconv.lo H5Tcset.lo \ + H5Tdbg.lo H5Tdeprec.lo H5Tenum.lo H5Tfields.lo H5Tfixed.lo \ + H5Tfloat.lo H5Tinit.lo H5Tnative.lo H5Toffset.lo H5Toh.lo \ + H5Topaque.lo H5Torder.lo H5Tpad.lo H5Tprecis.lo H5Tstrpad.lo \ + H5Tvisit.lo H5Tvlen.lo H5TS.lo H5VM.lo H5WB.lo H5Z.lo \ + H5Zdeflate.lo H5Zfletcher32.lo H5Znbit.lo H5Zshuffle.lo \ + H5Zszip.lo H5Zscaleoffset.lo H5Ztrans.lo libhdf5_la_OBJECTS = $(am_libhdf5_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -307,7 +306,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ @@ -555,7 +553,7 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \ H5FAstat.c H5FAtest.c \ H5FD.c H5FDcore.c \ H5FDdirect.c H5FDfamily.c H5FDint.c H5FDlog.c H5FDmpi.c H5FDmpio.c \ - H5FDmpiposix.c H5FDmulti.c H5FDsec2.c H5FDspace.c H5FDstdio.c \ + H5FDmulti.c H5FDsec2.c H5FDspace.c H5FDstdio.c \ H5FL.c H5FO.c H5FS.c H5FScache.c H5FSdbg.c H5FSsection.c H5FSstat.c H5FStest.c \ H5G.c H5Gbtree2.c H5Gcache.c \ H5Gcompact.c H5Gdense.c H5Gdeprec.c H5Gent.c \ @@ -608,8 +606,9 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \ include_HEADERS = hdf5.h H5api_adpt.h H5overflow.h H5pubconf.h H5public.h H5version.h \ H5Apublic.h H5ACpublic.h \ H5Cpublic.h H5Dpublic.h \ - H5Epubgen.h H5Epublic.h H5Fpublic.h H5FDpublic.h H5FDcore.h H5FDdirect.h \ - H5FDfamily.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h \ + H5Epubgen.h H5Epublic.h H5Fpublic.h \ + H5FDpublic.h H5FDcore.h H5FDdirect.h \ + H5FDfamily.h H5FDlog.h H5FDmpi.h H5FDmpio.h \ H5FDmulti.h H5FDsec2.h H5FDstdio.h \ H5Gpublic.h H5Ipublic.h H5Lpublic.h \ H5MMpublic.h H5Opublic.h H5Ppublic.h \ @@ -820,7 +819,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDlog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDmpi.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDmpio.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDmpiposix.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDmulti.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDsec2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/H5FDspace.Plo@am__quote@ diff --git a/src/hdf5.lnt b/src/hdf5.lnt index 90af778..2ccc1f5 100644 --- a/src/hdf5.lnt +++ b/src/hdf5.lnt @@ -92,6 +92,5 @@ macros cleaned up, but have not been linted due to their dependencies on features that we don't support on Windows: H5FDmpio.c - H5FDmpiposix.c H5FDstream.c */ diff --git a/src/libhdf5.settings.in b/src/libhdf5.settings.in index b594cc2..27df560 100644 --- a/src/libhdf5.settings.in +++ b/src/libhdf5.settings.in @@ -69,7 +69,6 @@ Features: Clear file buffers before write: @CLEARFILEBUF@ Using memory checker: @USINGMEMCHECKER@ Function Stack Tracing: @CODESTACK@ - GPFS: @GPFS@ Strict File Format Checks: @STRICT_FORMAT_CHECKS@ Optimization Instrumentation: @INSTRUMENT@ Large File Support (LFS): @LARGEFILE@ diff --git a/test/Makefile.in b/test/Makefile.in index c4c2786..da1e3cf 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -646,7 +646,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/test/h5test.c b/test/h5test.c index 3b7bfbe..9fe05ae 100644 --- a/test/h5test.c +++ b/test/h5test.c @@ -273,7 +273,7 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size) char *ptr, last = '\0'; size_t i, j; hid_t driver = -1; - int isppdriver = 0; /* if the driver is MPI parallel */ + int isppdriver = 0; /* if the driver is MPI parallel */ if (!base_name || !fullname || size < 1) return NULL; @@ -294,7 +294,7 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size) /* Must first check fapl is not H5P_DEFAULT (-1) because H5FD_XXX * could be of value -1 if it is not defined. */ - isppdriver = H5P_DEFAULT != fapl && (H5FD_MPIO==driver || H5FD_MPIPOSIX==driver); + isppdriver = H5P_DEFAULT != fapl && (H5FD_MPIO==driver); /* Check HDF5_NOCLEANUP environment setting. * (The #ifdef is needed to prevent compile failure in case MPI is not @@ -863,7 +863,7 @@ h5_get_file_size(const char *filename, hid_t fapl) /* Check for simple cases */ if(driver == H5FD_SEC2 || driver == H5FD_STDIO || driver == H5FD_CORE || #ifdef H5_HAVE_PARALLEL - driver == H5FD_MPIO || driver == H5FD_MPIPOSIX || + driver == H5FD_MPIO || #endif /* H5_HAVE_PARALLEL */ #ifdef H5_HAVE_WINDOWS driver == H5FD_WINDOWS || diff --git a/test/links.c b/test/links.c index 0f5e2dc..d3ca5e4 100644 --- a/test/links.c +++ b/test/links.c @@ -4148,8 +4148,7 @@ external_set_elink_cb(hid_t fapl, hbool_t new_format) /* Also disable parellel member drivers, because IS_H5FD_MPI whould report FALSE, causing problems */ base_driver = H5Pget_driver(fapl); op_data.base_fapl = (base_driver == H5FD_FAMILY || base_driver == H5FD_MULTI - || base_driver == H5FD_MPIO || base_driver == H5FD_MPIPOSIX - || base_driver == H5FD_CORE) ? H5P_DEFAULT : fapl; + || base_driver == H5FD_MPIO || base_driver == H5FD_CORE) ? H5P_DEFAULT : fapl; op_data.fam_size = ELINK_CB_FAM_SIZE; op_data.code = 0; diff --git a/testpar/CMakeTests.cmake b/testpar/CMakeTests.cmake index 9e4f97b..5ac96e6 100644 --- a/testpar/CMakeTests.cmake +++ b/testpar/CMakeTests.cmake @@ -13,10 +13,6 @@ endforeach (testp ${H5P_TESTS}) SET_TESTS_PROPERTIES(TEST_PAR_t_pflush2 PROPERTIES DEPENDS TEST_PAR_t_pflush1) -if (NOT WIN32) - add_test (NAME TEST_PAR_t_posix_compliant COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:t_posix_compliant>) -endif (NOT WIN32) - if (HDF5_TEST_VFD) set (VFD_LIST diff --git a/testpar/Makefile.am b/testpar/Makefile.am index e934f08..f41fa94 100644 --- a/testpar/Makefile.am +++ b/testpar/Makefile.am @@ -23,13 +23,11 @@ include $(top_srcdir)/config/commence.am INCLUDES=-I$(top_srcdir)/src -I$(top_srcdir)/test -# Test programs and scripts. These are our main targets. +# Test programs. These are our main targets. # -TEST_PROG_PARA=t_mpi t_posix_compliant testphdf5 t_cache t_pflush1 t_pflush2 t_shapesame -TEST_SCRIPT_PARA=testph5.sh +TEST_PROG_PARA=t_mpi testphdf5 t_cache t_pflush1 t_pflush2 t_shapesame check_PROGRAMS = $(TEST_PROG_PARA) -check_SCRIPTS= $(TEST_SCRIPT) 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 \ @@ -43,6 +41,5 @@ LDADD = $(LIBH5TEST) $(LIBHDF5) # Para*.h5 are from testphdf # go is used for debugging. See testphdf5.c. CHECK_CLEANFILES+=MPItest.h5 Para*.h5 CacheTestDummy.h5 go -DISTCLEANFILES=testph5.sh include $(top_srcdir)/config/conclude.am diff --git a/testpar/Makefile.in b/testpar/Makefile.in index 6ddfef2..9f977ce 100644 --- a/testpar/Makefile.in +++ b/testpar/Makefile.in @@ -67,8 +67,7 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(srcdir)/testph5.sh.in $(top_srcdir)/bin/depcomp \ - $(top_srcdir)/bin/mkinstalldirs \ + $(top_srcdir)/bin/depcomp $(top_srcdir)/bin/mkinstalldirs \ $(top_srcdir)/config/commence.am \ $(top_srcdir)/config/conclude.am COPYING check_PROGRAMS = $(am__EXEEXT_1) @@ -80,11 +79,10 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/bin/mkinstalldirs CONFIG_HEADER = $(top_builddir)/src/H5config.h -CONFIG_CLEAN_FILES = testph5.sh +CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = -am__EXEEXT_1 = t_mpi$(EXEEXT) t_posix_compliant$(EXEEXT) \ - testphdf5$(EXEEXT) t_cache$(EXEEXT) t_pflush1$(EXEEXT) \ - t_pflush2$(EXEEXT) t_shapesame$(EXEEXT) +am__EXEEXT_1 = t_mpi$(EXEEXT) testphdf5$(EXEEXT) t_cache$(EXEEXT) \ + t_pflush1$(EXEEXT) t_pflush2$(EXEEXT) t_shapesame$(EXEEXT) t_cache_SOURCES = t_cache.c t_cache_OBJECTS = t_cache.$(OBJEXT) t_cache_LDADD = $(LDADD) @@ -105,10 +103,6 @@ t_pflush2_SOURCES = t_pflush2.c t_pflush2_OBJECTS = t_pflush2.$(OBJEXT) t_pflush2_LDADD = $(LDADD) t_pflush2_DEPENDENCIES = $(LIBH5TEST) $(LIBHDF5) -t_posix_compliant_SOURCES = t_posix_compliant.c -t_posix_compliant_OBJECTS = t_posix_compliant.$(OBJEXT) -t_posix_compliant_LDADD = $(LDADD) -t_posix_compliant_DEPENDENCIES = $(LIBH5TEST) $(LIBHDF5) t_shapesame_SOURCES = t_shapesame.c t_shapesame_OBJECTS = t_shapesame.$(OBJEXT) t_shapesame_LDADD = $(LDADD) @@ -155,10 +149,10 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = t_cache.c t_mpi.c t_pflush1.c t_pflush2.c \ - t_posix_compliant.c t_shapesame.c $(testphdf5_SOURCES) -DIST_SOURCES = t_cache.c t_mpi.c t_pflush1.c t_pflush2.c \ - t_posix_compliant.c t_shapesame.c $(testphdf5_SOURCES) +SOURCES = t_cache.c t_mpi.c t_pflush1.c t_pflush2.c t_shapesame.c \ + $(testphdf5_SOURCES) +DIST_SOURCES = t_cache.c t_mpi.c t_pflush1.c t_pflush2.c t_shapesame.c \ + $(testphdf5_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -241,7 +235,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ @@ -458,11 +451,9 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog MPItest.h5 Para*.h5 \ CacheTestDummy.h5 go INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/test -# Test programs and scripts. These are our main targets. +# Test programs. These are our main targets. # -TEST_PROG_PARA = t_mpi t_posix_compliant testphdf5 t_cache t_pflush1 t_pflush2 t_shapesame -TEST_SCRIPT_PARA = testph5.sh -check_SCRIPTS = $(TEST_SCRIPT) +TEST_PROG_PARA = t_mpi testphdf5 t_cache t_pflush1 t_pflush2 t_shapesame 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 \ t_prop.c @@ -470,7 +461,6 @@ testphdf5_SOURCES = testphdf5.c t_dset.c t_file.c t_file_image.c t_mdset.c \ # The tests all depend on the hdf5 library and the test library LDADD = $(LIBH5TEST) $(LIBHDF5) -DISTCLEANFILES = testph5.sh # Automake needs to be taught how to build lib, progs, and tests targets. # These will be filled in automatically for the most part (e.g., @@ -526,8 +516,6 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): -testph5.sh: $(top_builddir)/config.status $(srcdir)/testph5.sh.in - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ @@ -549,9 +537,6 @@ t_pflush1$(EXEEXT): $(t_pflush1_OBJECTS) $(t_pflush1_DEPENDENCIES) $(EXTRA_t_pfl t_pflush2$(EXEEXT): $(t_pflush2_OBJECTS) $(t_pflush2_DEPENDENCIES) $(EXTRA_t_pflush2_DEPENDENCIES) @rm -f t_pflush2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(t_pflush2_OBJECTS) $(t_pflush2_LDADD) $(LIBS) -t_posix_compliant$(EXEEXT): $(t_posix_compliant_OBJECTS) $(t_posix_compliant_DEPENDENCIES) $(EXTRA_t_posix_compliant_DEPENDENCIES) - @rm -f t_posix_compliant$(EXEEXT) - $(AM_V_CCLD)$(LINK) $(t_posix_compliant_OBJECTS) $(t_posix_compliant_LDADD) $(LIBS) t_shapesame$(EXEEXT): $(t_shapesame_OBJECTS) $(t_shapesame_DEPENDENCIES) $(EXTRA_t_shapesame_DEPENDENCIES) @rm -f t_shapesame$(EXEEXT) $(AM_V_CCLD)$(LINK) $(t_shapesame_OBJECTS) $(t_shapesame_LDADD) $(LIBS) @@ -577,7 +562,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_pflush1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_pflush2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_ph5basic.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_posix_compliant.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_prop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_shapesame.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_span_tree.Po@am__quote@ @@ -707,7 +691,7 @@ distdir: $(DISTFILES) fi; \ done check-am: all-am - $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS) + $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile all-local @@ -738,7 +722,6 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" diff --git a/testpar/t_coll_chunk.c b/testpar/t_coll_chunk.c index 45fe3da..11d7b10 100644 --- a/testpar/t_coll_chunk.c +++ b/testpar/t_coll_chunk.c @@ -613,7 +613,6 @@ coll_chunktest(const char* filename, unsigned prop_value; #endif /* H5_HAVE_INSTRUMENTED_LIBRARY */ - hbool_t use_gpfs = FALSE; int mpi_size,mpi_rank; herr_t status; @@ -631,7 +630,7 @@ coll_chunktest(const char* filename, /* Create the data space */ - acc_plist = create_faccess_plist(comm,info,facc_type,use_gpfs); + acc_plist = create_faccess_plist(comm,info,facc_type); VRFY((acc_plist >= 0),""); file = H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_plist); @@ -918,7 +917,7 @@ coll_chunktest(const char* filename, data_origin1 = (int *)HDmalloc(dims[0]*dims[1]*sizeof(int)); VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded"); - acc_plist = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_plist = create_faccess_plist(comm, info, facc_type); VRFY((acc_plist >= 0),"MPIO creation property list succeeded"); file = H5Fopen(filename,H5F_ACC_RDONLY,acc_plist); diff --git a/testpar/t_dset.c b/testpar/t_dset.c index b3ec4b8..2bc3b09 100644 --- a/testpar/t_dset.c +++ b/testpar/t_dset.c @@ -279,7 +279,6 @@ dataset_writeInd(void) hid_t file_dataspace; /* File dataspace ID */ hid_t mem_dataspace; /* memory dataspace ID */ hid_t dataset1, dataset2; /* Dataset ID */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ hsize_t dims[RANK]; /* dataset dim sizes */ DATATYPE *data_array1 = NULL; /* data buffer */ const char *filename; @@ -310,7 +309,7 @@ dataset_writeInd(void) * CREATE AN HDF5 FILE WITH PARALLEL ACCESS * ---------------------------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* create the file collectively */ @@ -425,7 +424,6 @@ dataset_readInd(void) hid_t file_dataspace; /* File dataspace ID */ hid_t mem_dataspace; /* memory dataspace ID */ hid_t dataset1, dataset2; /* Dataset ID */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ DATATYPE *data_array1 = NULL; /* data buffer */ DATATYPE *data_origin1 = NULL; /* expected data buffer */ const char *filename; @@ -455,7 +453,7 @@ dataset_readInd(void) VRFY((data_origin1 != NULL), "data_origin1 HDmalloc succeeded"); /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* open the file collectively */ @@ -552,7 +550,6 @@ dataset_writeAll(void) hid_t dataset1, dataset2, dataset3, dataset4; /* Dataset ID */ hid_t dataset5, dataset6, dataset7; /* Dataset ID */ hid_t datatype; /* Datatype ID */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ hsize_t dims[RANK]; /* dataset dim sizes */ DATATYPE *data_array1 = NULL; /* data buffer */ const char *filename; @@ -593,7 +590,7 @@ dataset_writeAll(void) * START AN HDF5 FILE * -------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* create the file collectively */ @@ -1085,7 +1082,6 @@ dataset_readAll(void) hid_t file_dataspace; /* File dataspace ID */ hid_t mem_dataspace; /* memory dataspace ID */ hid_t dataset1, dataset2, dataset5, dataset6, dataset7; /* Dataset ID */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ DATATYPE *data_array1 = NULL; /* data buffer */ DATATYPE *data_origin1 = NULL; /* expected data buffer */ const char *filename; @@ -1128,7 +1124,7 @@ dataset_readAll(void) * OPEN AN HDF5 FILE * -------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* open the file collectively */ @@ -1499,7 +1495,6 @@ extend_writeInd(void) hid_t file_dataspace; /* File dataspace ID */ hid_t mem_dataspace; /* memory dataspace ID */ hid_t dataset1, dataset2; /* Dataset ID */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ const char *filename; hsize_t dims[RANK]; /* dataset dim sizes */ hsize_t max_dims[RANK] = @@ -1539,7 +1534,7 @@ extend_writeInd(void) * START AN HDF5 FILE * -------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* Reduce the number of metadata cache slots, so that there are cache @@ -1730,7 +1725,6 @@ extend_writeInd2(void) hid_t fs; /* File dataspace ID */ hid_t ms; /* Memory dataspace ID */ hid_t dataset; /* Dataset ID */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ hsize_t orig_size=10; /* Original dataset dim size */ hsize_t new_size=20; /* Extended dataset dim size */ hsize_t one=1; @@ -1755,7 +1749,7 @@ extend_writeInd2(void) * START AN HDF5 FILE * -------------------*/ /* setup file access template */ - fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); VRFY((fapl >= 0), "create_faccess_plist succeeded"); /* create the file collectively */ @@ -1892,7 +1886,6 @@ extend_readInd(void) hid_t file_dataspace; /* File dataspace ID */ hid_t mem_dataspace; /* memory dataspace ID */ hid_t dataset1, dataset2; /* Dataset ID */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ hsize_t dims[RANK]; /* dataset dim sizes */ DATATYPE *data_array1 = NULL; /* data buffer */ DATATYPE *data_array2 = NULL; /* data buffer */ @@ -1929,7 +1922,7 @@ extend_readInd(void) * OPEN AN HDF5 FILE * -------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* open the file collectively */ @@ -2073,7 +2066,6 @@ extend_writeAll(void) hid_t file_dataspace; /* File dataspace ID */ hid_t mem_dataspace; /* memory dataspace ID */ hid_t dataset1, dataset2; /* Dataset ID */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ const char *filename; hsize_t dims[RANK]; /* dataset dim sizes */ hsize_t max_dims[RANK] = @@ -2113,7 +2105,7 @@ extend_writeAll(void) * START AN HDF5 FILE * -------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* Reduce the number of metadata cache slots, so that there are cache @@ -2324,7 +2316,6 @@ extend_readAll(void) hid_t file_dataspace; /* File dataspace ID */ hid_t mem_dataspace; /* memory dataspace ID */ hid_t dataset1, dataset2; /* Dataset ID */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ const char *filename; hsize_t dims[RANK]; /* dataset dim sizes */ DATATYPE *data_array1 = NULL; /* data buffer */ @@ -2361,7 +2352,7 @@ extend_readAll(void) * OPEN AN HDF5 FILE * -------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* open the file collectively */ @@ -2525,7 +2516,6 @@ compress_readAll(void) int rank=1; /* Dataspace rank */ hsize_t dim=dim0; /* Dataspace dimensions */ unsigned u; /* Local index variable */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ DATATYPE *data_read = NULL; /* data buffer */ DATATYPE *data_orig = NULL; /* expected data buffer */ const char *filename; @@ -2606,7 +2596,7 @@ compress_readAll(void) * -------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* open the file collectively */ @@ -2691,7 +2681,6 @@ none_selection_chunk(void) hid_t file_dataspace; /* File dataspace ID */ hid_t mem_dataspace; /* memory dataspace ID */ hid_t dataset1, dataset2; /* Dataset ID */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ const char *filename; hsize_t dims[RANK]; /* dataset dim sizes */ DATATYPE *data_origin = NULL; /* data buffer */ @@ -2727,7 +2716,7 @@ none_selection_chunk(void) * START AN HDF5 FILE * -------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* create the file collectively */ @@ -2982,7 +2971,6 @@ test_actual_io_mode(int selection_mode) { hsize_t stride[RANK]; hsize_t count[RANK]; hsize_t block[RANK]; - hbool_t use_gpfs = FALSE; char message[256]; herr_t ret; @@ -3022,7 +3010,7 @@ test_actual_io_mode(int selection_mode) { HDassert(filename != NULL); /* Setup the file access template */ - fapl = create_faccess_plist(mpi_comm, mpi_info, facc_type, use_gpfs); + fapl = create_faccess_plist(mpi_comm, mpi_info, facc_type); VRFY((fapl >= 0), "create_faccess_plist() succeeded"); /* Create the file */ @@ -3213,13 +3201,6 @@ test_actual_io_mode(int selection_mode) { break; } - /* Reset the expected values to defulats if the MPI_POSIX driver is in use. - * This property is defined only for mpio, not MPI POSIX. */ - if (facc_type == FACC_MPIPOSIX) { - actual_chunk_opt_mode_expected = H5D_MPIO_NO_CHUNK_OPTIMIZATION; - actual_io_mode_expected = H5D_MPIO_NO_COLLECTIVE; - } - ret = H5Sselect_hyperslab(file_space, H5S_SELECT_SET, start, stride, count, block); VRFY((ret >= 0), "H5Sset_hyperslab succeeded"); @@ -3450,9 +3431,6 @@ actual_io_mode_tests(void) { * TEST_DATA_TRANSFORMS: * Test for Data Transfrom feature as the cause of breaking collective I/O. * - * TEST_SET_MPIPOSIX: - * Test for MPI Posix as the cause of breaking collective I/O. - * * TEST_NOT_SIMPLE_OR_SCALAR_DATASPACES: * Test for NULL dataspace as the cause of breaking collective I/O. * @@ -3508,7 +3486,6 @@ test_no_collective_cause_mode(int selection_mode) hid_t mem_space = -1; hid_t file_space = -1; hsize_t chunk_dims[RANK]; - hbool_t use_gpfs = FALSE; herr_t ret; #ifdef H5_HAVE_FILTER_FLETCHER32 H5Z_filter_t filter_info; @@ -3532,35 +3509,30 @@ test_no_collective_cause_mode(int selection_mode) dcpl = H5Pcreate(H5P_DATASET_CREATE); VRFY((dcpl >= 0), "dataset creation plist created successfully"); - if (selection_mode & TEST_SET_MPIPOSIX) { - l_facc_type = FACC_MPIPOSIX; + if (selection_mode & TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_COMPACT) { + ret = H5Pset_layout (dcpl, H5D_COMPACT); + VRFY((ret >= 0),"set COMPACT layout succeeded"); + is_chunked = 0; } - else { - if (selection_mode & TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_COMPACT) { - ret = H5Pset_layout (dcpl, H5D_COMPACT); - VRFY((ret >= 0),"set COMPACT layout succeeded"); - is_chunked = 0; - } - if (selection_mode & TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_EXTERNAL) { - ret = H5Pset_external (dcpl, FILE_EXTERNAL, (off_t) 0, H5F_UNLIMITED); - VRFY((ret >= 0),"set EXTERNAL file layout succeeded"); - is_chunked = 0; - } + if (selection_mode & TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_EXTERNAL) { + ret = H5Pset_external (dcpl, FILE_EXTERNAL, (off_t) 0, H5F_UNLIMITED); + VRFY((ret >= 0),"set EXTERNAL file layout succeeded"); + is_chunked = 0; + } #ifdef H5_HAVE_FILTER_FLETCHER32 - if (selection_mode & TEST_FILTERS) { - ret = H5Zfilter_avail(H5Z_FILTER_FLETCHER32); - VRFY ((ret >=0 ), "Fletcher32 filter is available.\n"); + if (selection_mode & TEST_FILTERS) { + ret = H5Zfilter_avail(H5Z_FILTER_FLETCHER32); + VRFY ((ret >=0 ), "Fletcher32 filter is available.\n"); - ret = H5Zget_filter_info (H5Z_FILTER_FLETCHER32, &filter_info); - VRFY ( ( (filter_info & H5Z_FILTER_CONFIG_ENCODE_ENABLED) || (filter_info & H5Z_FILTER_CONFIG_DECODE_ENABLED) ) , "Fletcher32 filter encoding and decoding available.\n"); + ret = H5Zget_filter_info (H5Z_FILTER_FLETCHER32, &filter_info); + VRFY ( ( (filter_info & H5Z_FILTER_CONFIG_ENCODE_ENABLED) || (filter_info & H5Z_FILTER_CONFIG_DECODE_ENABLED) ) , "Fletcher32 filter encoding and decoding available.\n"); - ret = H5Pset_fletcher32(dcpl); - VRFY((ret >= 0),"set filter (flecher32) succeeded"); - } -#endif /* H5_HAVE_FILTER_FLETCHER32 */ + ret = H5Pset_fletcher32(dcpl); + VRFY((ret >= 0),"set filter (flecher32) succeeded"); } +#endif /* H5_HAVE_FILTER_FLETCHER32 */ if (selection_mode & TEST_NOT_SIMPLE_OR_SCALAR_DATASPACES) { sid = H5Screate(H5S_NULL); @@ -3580,7 +3552,7 @@ test_no_collective_cause_mode(int selection_mode) HDassert(filename != NULL); /* Setup the file access template */ - fapl = create_faccess_plist(mpi_comm, mpi_info, l_facc_type, use_gpfs); + fapl = create_faccess_plist(mpi_comm, mpi_info, l_facc_type); VRFY((fapl >= 0), "create_faccess_plist() succeeded"); /* Create the file */ @@ -3642,12 +3614,6 @@ test_no_collective_cause_mode(int selection_mode) } #endif /* H5_HAVE_FILTER_FLETCHER32 */ - if (selection_mode & TEST_SET_MPIPOSIX) { - test_name = "Broken Collective I/O - MPIO POSIX"; - no_collective_cause_local_expected |= H5D_MPIO_SET_MPIPOSIX; - no_collective_cause_global_expected |= H5D_MPIO_SET_MPIPOSIX; - } - if (selection_mode & TEST_COLLECTIVE) { test_name = "Broken Collective I/O - Not Broken"; no_collective_cause_local_expected = H5D_MPIO_COLLECTIVE; @@ -3662,13 +3628,6 @@ test_no_collective_cause_mode(int selection_mode) is_independent = 1; } - /* Add MPIPOSIX cause to expected cause if MPI_POSIX driver is in use '-p'. - * Exception to the independent cause.*/ - if (facc_type == FACC_MPIPOSIX && !(selection_mode & TEST_SET_INDEPENDENT)) { - no_collective_cause_local_expected |= H5D_MPIO_SET_MPIPOSIX; - no_collective_cause_global_expected |= H5D_MPIO_SET_MPIPOSIX; - } - /* use all spaces for certain tests */ if (selection_mode & TEST_NOT_SIMPLE_OR_SCALAR_DATASPACES || selection_mode & TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_EXTERNAL) { @@ -3841,7 +3800,6 @@ test_no_collective_cause_mode_filter(int selection_mode) hid_t mem_space = -1; hid_t file_space = -1; hsize_t chunk_dims[RANK]; - hbool_t use_gpfs = FALSE; herr_t ret; #ifdef H5_HAVE_FILTER_FLETCHER32 H5Z_filter_t filter_info; @@ -3890,7 +3848,7 @@ test_no_collective_cause_mode_filter(int selection_mode) HDassert(filename != NULL); /* Setup the file access template */ - fapl_write = create_faccess_plist(mpi_comm, mpi_info, FACC_DEFAULT, use_gpfs); + fapl_write = create_faccess_plist(mpi_comm, mpi_info, FACC_DEFAULT); VRFY((fapl_write >= 0), "create_faccess_plist() succeeded"); fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_write); @@ -3918,13 +3876,6 @@ test_no_collective_cause_mode_filter(int selection_mode) no_collective_cause_global_expected = H5D_MPIO_FILTERS; #endif - /* Ignore above expected cause and reset cause to MPIPOSIX if - * the MPI_POSIX driver is in use.*/ - if (facc_type == FACC_MPIPOSIX) { - no_collective_cause_local_expected = H5D_MPIO_SET_MPIPOSIX; - no_collective_cause_global_expected = H5D_MPIO_SET_MPIPOSIX; - } - /* Get the file dataspace */ file_space = H5Dget_space(dataset); VRFY((file_space >= 0), "H5Dget_space succeeded"); @@ -3983,7 +3934,7 @@ test_no_collective_cause_mode_filter(int selection_mode) *---------------------*/ /* Setup the file access template */ - fapl_read = create_faccess_plist(mpi_comm, mpi_info, facc_type, use_gpfs); + fapl_read = create_faccess_plist(mpi_comm, mpi_info, facc_type); VRFY((fapl_read >= 0), "create_faccess_plist() succeeded"); fid = H5Fopen (filename, H5F_ACC_RDONLY, fapl_read); @@ -4049,7 +4000,6 @@ no_collective_cause_tests(void) test_no_collective_cause_mode (TEST_SET_INDEPENDENT); test_no_collective_cause_mode (TEST_DATATYPE_CONVERSION); test_no_collective_cause_mode (TEST_DATA_TRANSFORMS); - test_no_collective_cause_mode (TEST_SET_MPIPOSIX); test_no_collective_cause_mode (TEST_NOT_SIMPLE_OR_SCALAR_DATASPACES); test_no_collective_cause_mode (TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_COMPACT); test_no_collective_cause_mode (TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_EXTERNAL); @@ -4064,9 +4014,9 @@ no_collective_cause_tests(void) /* * Test combined causes */ - test_no_collective_cause_mode (TEST_SET_MPIPOSIX | TEST_DATATYPE_CONVERSION); + test_no_collective_cause_mode (TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_EXTERNAL | TEST_DATATYPE_CONVERSION); test_no_collective_cause_mode (TEST_DATATYPE_CONVERSION | TEST_DATA_TRANSFORMS); - test_no_collective_cause_mode (TEST_SET_MPIPOSIX | TEST_DATATYPE_CONVERSION | TEST_DATA_TRANSFORMS); + test_no_collective_cause_mode (TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_EXTERNAL | TEST_DATATYPE_CONVERSION | TEST_DATA_TRANSFORMS); return; } @@ -4089,7 +4039,6 @@ dataset_atomicity(void) hid_t acc_tpl; /* File access templates */ hid_t sid; /* Dataspace ID */ hid_t dataset1; /* Dataset IDs */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ hsize_t dims[RANK]; /* dataset dim sizes */ int *write_buf = NULL; /* data buffer */ int *read_buf = NULL; /* data buffer */ @@ -4131,7 +4080,7 @@ dataset_atomicity(void) VRFY((read_buf != NULL), "read_buf HDcalloc succeeded"); /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* create the file collectively */ @@ -4194,7 +4143,7 @@ dataset_atomicity(void) MPI_Barrier (comm); /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* open the file collectively */ diff --git a/testpar/t_file.c b/testpar/t_file.c index 5cd3e9d..70ca60e 100644 --- a/testpar/t_file.c +++ b/testpar/t_file.c @@ -40,7 +40,6 @@ test_split_comm_access(void) int newrank, newprocs; hid_t fid; /* file IDs */ hid_t acc_tpl; /* File access properties */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ herr_t ret; /* generic return value */ const char *filename; @@ -68,7 +67,7 @@ test_split_comm_access(void) MPI_Comm_rank(comm,&sub_mpi_rank); /* setup file access template */ - acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(comm, info, facc_type); VRFY((acc_tpl >= 0), ""); /* create the file collectively */ diff --git a/testpar/t_mdset.c b/testpar/t_mdset.c index 516cc2f..fa1a980 100644 --- a/testpar/t_mdset.c +++ b/testpar/t_mdset.c @@ -88,7 +88,6 @@ void multiple_dset_write(void) int i, j, n, mpi_size, mpi_rank, size; hid_t iof, plist, dataset, memspace, filespace; hid_t dcpl; /* Dataset creation property list */ - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ hsize_t chunk_origin [DIM]; hsize_t chunk_dims [DIM], file_dims [DIM]; hsize_t count[DIM]={1,1}; @@ -112,7 +111,7 @@ void multiple_dset_write(void) outme = HDmalloc((size_t)(size * size * sizeof(double))); VRFY((outme != NULL), "HDmalloc succeeded for outme"); - plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); VRFY((plist>=0), "create_faccess_plist succeeded"); iof = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist); VRFY((iof>=0), "H5Fcreate succeeded"); @@ -175,7 +174,6 @@ void multiple_dset_write(void) void compact_dataset(void) { int i, j, mpi_size, mpi_rank, size, err_num=0; - hbool_t use_gpfs = FALSE; hid_t iof, plist, dcpl, dxpl, dataset, filespace; hsize_t file_dims [DIM]; double * outme; @@ -201,7 +199,7 @@ void compact_dataset(void) filename = GetTestParameters(); VRFY((mpi_size <= size), "mpi_size <= size"); - plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); iof = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist); /* Define data space */ @@ -244,7 +242,7 @@ void compact_dataset(void) H5Fclose(iof); /* Open the file and dataset, read and compare the data. */ - plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); iof = H5Fopen(filename, H5F_ACC_RDONLY, plist); VRFY((iof >= 0), "H5Fopen succeeded"); @@ -295,7 +293,6 @@ void compact_dataset(void) void null_dataset(void) { int mpi_size, mpi_rank; - hbool_t use_gpfs = FALSE; hid_t iof, plist, dxpl, dataset, attr, sid; unsigned uval=2; /* Buffer for writing to dataset */ int val=1; /* Buffer for writing to attribute */ @@ -310,8 +307,7 @@ void null_dataset(void) filename = GetTestParameters(); - plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, - facc_type, use_gpfs); + plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); iof = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist); /* Define data space */ @@ -355,7 +351,7 @@ void null_dataset(void) H5Fclose(iof); /* Open the file and dataset, read and compare the data. */ - plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); iof = H5Fopen(filename, H5F_ACC_RDONLY, plist); VRFY((iof >= 0), "H5Fopen succeeded"); @@ -409,7 +405,6 @@ void null_dataset(void) void big_dataset(void) { int mpi_size, mpi_rank; /* MPI info */ - hbool_t use_gpfs = FALSE; /* Don't use GPFS stuff for this test */ hid_t iof, /* File ID */ fapl, /* File access property list ID */ dataset, /* Dataset ID */ @@ -428,7 +423,7 @@ void big_dataset(void) filename = GetTestParameters(); - fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); VRFY((fapl >= 0), "create_faccess_plist succeeded"); /* @@ -540,7 +535,6 @@ void big_dataset(void) void dataset_fillvalue(void) { int mpi_size, mpi_rank; /* MPI info */ - hbool_t use_gpfs = FALSE; /* Don't use GPFS stuff for this test */ int err_num; /* Number of errors */ hid_t iof, /* File ID */ fapl, /* File access property list ID */ @@ -575,7 +569,7 @@ void dataset_fillvalue(void) wdata=HDmalloc((size_t)(dset_size*sizeof(int))); VRFY((wdata != NULL), "HDmalloc succeeded for write buffer"); - fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); VRFY((fapl >= 0), "create_faccess_plist succeeded"); /* @@ -656,7 +650,7 @@ void dataset_fillvalue(void) ret = H5Dwrite(dataset, H5T_NATIVE_INT, memspace, filespace, dxpl, wdata); VRFY((ret >= 0), "H5Dwrite succeeded"); - /* Barrier here, to allow MPI-posix I/O to sync */ + /* Barrier here, to allow processes to sync */ MPI_Barrier(MPI_COMM_WORLD); /* @@ -731,7 +725,6 @@ void collective_group_write(void) { int mpi_rank, mpi_size, size; int i, j, m; - hbool_t use_gpfs = FALSE; char gname[64], dname[32]; hid_t fid, gid, did, plist, dcpl, memspace, filespace; DATATYPE * outme = NULL; @@ -758,7 +751,7 @@ void collective_group_write(void) outme = HDmalloc((size_t)(size * size * sizeof(DATATYPE))); VRFY((outme != NULL), "HDmalloc succeeded for outme"); - plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist); H5Pclose(plist); @@ -827,7 +820,6 @@ void independent_group_read(void) { int mpi_rank, m; hid_t plist, fid; - hbool_t use_gpfs = FALSE; const H5Ptest_param_t *pt; char *filename; int ngroups; @@ -838,7 +830,7 @@ void independent_group_read(void) MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); - plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); fid = H5Fopen(filename, H5F_ACC_RDONLY, plist); H5Pclose(plist); @@ -950,7 +942,6 @@ void multiple_group_write(void) { int mpi_rank, mpi_size, size; int m; - hbool_t use_gpfs = FALSE; char gname[64]; hid_t fid, gid, plist, memspace, filespace; hsize_t chunk_origin[DIM]; @@ -969,7 +960,7 @@ void multiple_group_write(void) size = get_size(); - plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist); H5Pclose(plist); @@ -1120,7 +1111,6 @@ void multiple_group_read(void) { int mpi_rank, mpi_size, error_num, size; int m; - hbool_t use_gpfs = FALSE; char gname[64]; hid_t plist, fid, gid, memspace, filespace; hsize_t chunk_origin[DIM]; @@ -1138,7 +1128,7 @@ void multiple_group_read(void) size = get_size(); - plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs); + plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type); fid = H5Fopen(filename, H5F_ACC_RDONLY, plist); H5Pclose(plist); diff --git a/testpar/t_ph5basic.c b/testpar/t_ph5basic.c index 1e5d3b3..76eeaef 100644 --- a/testpar/t_ph5basic.c +++ b/testpar/t_ph5basic.c @@ -191,117 +191,3 @@ test_fapl_mpio_dup(void) } } - -/*------------------------------------------------------------------------- - * Function: test_fapl_mpiposix_dup - * - * Purpose: Test if fapl_mpiposix property list keeps a duplicate of the - * communicator object given when set; and returns a duplicate - * of its component when H5Pget_fapl_mpiposix is called. - * Note that fapl_mpiposix does not use INFO object. - * - * Return: Success: None - * - * Failure: Abort - * - * Programmer: Albert Cheng - * January 9, 2003 - * - * Modifications: - *------------------------------------------------------------------------- - */ -void -test_fapl_mpiposix_dup(void) -{ - int mpi_size, mpi_rank; - MPI_Comm comm, comm_tmp; - int mpi_size_old, mpi_rank_old; - int mpi_size_tmp, mpi_rank_tmp; - int mrc; /* MPI return value */ - hid_t acc_pl; /* File access properties */ - hbool_t use_gpfs = FALSE; - herr_t ret; /* hdf5 return value */ - - if (VERBOSE_MED) - printf("Verify fapl_mpiposix duplicates communicator object\n"); - - /* set up MPI parameters */ - MPI_Comm_size(MPI_COMM_WORLD,&mpi_size); - MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank); - if (VERBOSE_MED) - printf("rank/size of MPI_COMM_WORLD are %d/%d\n", mpi_rank, mpi_size); - - /* Create a new communicator that has the same processes as MPI_COMM_WORLD. - * Use MPI_Comm_split because it is simplier than MPI_Comm_create - */ - mrc = MPI_Comm_split(MPI_COMM_WORLD, 0, 0, &comm); - VRFY((mrc==MPI_SUCCESS), "MPI_Comm_split"); - MPI_Comm_size(comm,&mpi_size_old); - MPI_Comm_rank(comm,&mpi_rank_old); - if (VERBOSE_MED) - printf("rank/size of comm are %d/%d\n", mpi_rank_old, mpi_size_old); - - acc_pl = H5Pcreate (H5P_FILE_ACCESS); - VRFY((acc_pl >= 0), "H5P_FILE_ACCESS"); - - ret = H5Pset_fapl_mpiposix(acc_pl, comm, use_gpfs); - VRFY((ret >= 0), ""); - - /* Case 1: - * Free the created communicator object. - * Check if the access property list is still valid and can return - * valid communicator object. - */ - mrc = MPI_Comm_free(&comm); - VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free"); - - ret = H5Pget_fapl_mpiposix(acc_pl, &comm_tmp, &use_gpfs); - VRFY((ret >= 0), "H5Pget_fapl_mpiposix"); - MPI_Comm_size(comm_tmp,&mpi_size_tmp); - MPI_Comm_rank(comm_tmp,&mpi_rank_tmp); - if (VERBOSE_MED) - printf("After H5Pget_fapl_mpiposix: rank/size of comm are %d/%d\n", - mpi_rank_tmp, mpi_size_tmp); - VRFY((mpi_size_tmp==mpi_size), "MPI_Comm_size"); - VRFY((mpi_rank_tmp==mpi_rank), "MPI_Comm_rank"); - - /* Case 2: - * Free the retrieved communicator object. - * Check if the access property list is still valid and can return - * valid communicator object. - * Also verify the NULL argument option. - */ - mrc = MPI_Comm_free(&comm_tmp); - VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free"); - - /* check NULL argument options. */ - ret = H5Pget_fapl_mpiposix(acc_pl, NULL, NULL); - VRFY((ret >= 0), "H5Pget_fapl_mpiposix neither"); - - /* now get it again and check validity too. */ - /* Don't free the returned object which is used in the next case. */ - ret = H5Pget_fapl_mpiposix(acc_pl, &comm_tmp, &use_gpfs); - VRFY((ret >= 0), "H5Pget_fapl_mpiposix"); - MPI_Comm_size(comm_tmp,&mpi_size_tmp); - MPI_Comm_rank(comm_tmp,&mpi_rank_tmp); - if (VERBOSE_MED) - printf("After second H5Pget_fapl_mpiposix: rank/size of comm are %d/%d\n", - mpi_rank_tmp, mpi_size_tmp); - VRFY((mpi_size_tmp==mpi_size), "MPI_Comm_size"); - VRFY((mpi_rank_tmp==mpi_rank), "MPI_Comm_rank"); - - /* Case 3: - * Close the property list and verify the retrieved communicator - * object is still valid. - */ - H5Pclose(acc_pl); - MPI_Comm_size(comm_tmp,&mpi_size_tmp); - MPI_Comm_rank(comm_tmp,&mpi_rank_tmp); - if (VERBOSE_MED) - printf("After Property list closed: rank/size of comm are %d/%d\n", - mpi_rank_tmp, mpi_size_tmp); - - /* clean up */ - mrc = MPI_Comm_free(&comm_tmp); - VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free"); -} diff --git a/testpar/t_posix_compliant.c b/testpar/t_posix_compliant.c deleted file mode 100644 index 207f07e..0000000 --- a/testpar/t_posix_compliant.c +++ /dev/null @@ -1,927 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * 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 files COPYING and Copyright.html. COPYING can be found at the root * - * of the source code distribution tree; Copyright.html can be found at the * - * root level of an installed copy of the electronic HDF5 document set and * - * is linked from the top-level documents page. It can also be found at * - * http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * - * access to either file, you may request a copy from help@hdfgroup.org. * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* A series of tests for posix compliance - * - * These tests do increasingly complicated sets of writes followed by reads. - * POSIX standards say that any read that can be proven to occur after a write - * must include the data in that write. These tests attempt to verify whether the - * underlying filesystem and i/o layer provide such guarantees. - * - * There are two sets of tests, one which uses POSIX i/o (fread, fwrite) and one which - * uses MPI I/O (MPI_File_read, MPI_File_write). Each set has multiple sub-tests, which - * test varying patters of writes and reads. - * - * - * TODO: - * Add corresponding posix i/o tests for each MPI i/o test. Currently, not all of the - * MPI IO tests are implemented using fwrite/fread. - * - * Leon Arber - * larber@ncsa.uiuc.edu -*/ - -/* To compile this outside of the HDF5 library, you can do so by defining the - * macro STANDALONE. E.g., - * mpicc -DSTANDALONE t_posix_compliant.c -o t_posix_compliant - * then run it as an MPI application. E.g., - * mpiexec -np 3 ./t_posix_compliant - */ - -#ifdef H5_HAVE_UNISTD_H -#include <unistd.h> -#endif -#include <stdio.h> -#include <string.h> -#include <stdlib.h> -#include <mpi.h> -#ifndef STANDALONE -#include "h5test.h" -#else -#define HDmalloc(sz) malloc(sz) -#define HDfree(p) free(p) -#define getenv_all(comm, root, name) getenv(name) -#endif -#define TESTFNAME "posix_test" /* test file name */ - -static char* testfile = NULL; -static int err_flag = 0; -static int max_err_print = 5; -int nmismatches = 0; /* warnings encountered */ - -/* globals needed for getopt - * Although they *should* be defined in unistd.h */ -extern char *optarg; -extern int optind, opterr; - - -#define CHECK_SUCCESS(res) \ -{ \ - char err_got[MPI_MAX_ERROR_STRING]; \ - int err_len; \ - if(res != MPI_SUCCESS) \ - { \ - MPI_Error_string(res, err_got, &err_len); \ - fprintf(stderr, "Line %d, Error: %s\n", __LINE__, err_got); \ - MPI_Abort(MPI_COMM_WORLD, -2); \ - } \ -} - -#define PRINT_RESULT() \ -{ \ - int err_result; \ - MPI_Reduce(&err_flag, &err_result, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD); \ - if( (rank == 0) && (err_result == 0) ) \ - printf("PASSED\n"); \ - fflush(stdout); \ - fflush(stderr); \ - err_flag = 0; \ -} - -static void vrfy_elements(int* a, int* b, int size, int rank); -static int find_writesize(int rank, int numprocs, int write_size); - - -/* All writes are to non-overlapping locations in the file - * Then, each task reads another tasks' data - * */ - -static int allwrite_allread_blocks(int numprocs, int rank, int write_size) -{ - MPI_File fh = MPI_FILE_NULL; - int mpio_result; - int amode, i; - MPI_Offset offset = rank*write_size*sizeof(int); - MPI_Status Status; - int* writebuf = (int*)HDmalloc(write_size*sizeof(int)); - int* readbuf = (int*)HDmalloc (write_size*sizeof(int)); - - for(i=0; i<write_size; i++) - writebuf[i] = i; - - amode = MPI_MODE_CREATE | MPI_MODE_RDWR | MPI_MODE_DELETE_ON_CLOSE; - - mpio_result = MPI_File_open(MPI_COMM_WORLD, testfile, amode, - MPI_INFO_NULL, &fh); - CHECK_SUCCESS(mpio_result); - - mpio_result = MPI_File_write_at(fh, offset, writebuf, write_size, MPI_INT, &Status); - CHECK_SUCCESS(mpio_result); - - MPI_Barrier(MPI_COMM_WORLD); - - offset = ( (rank+(numprocs-1)) % numprocs)*write_size*sizeof(int); - - mpio_result = MPI_File_read_at(fh, offset, readbuf, write_size, MPI_INT, &Status); - CHECK_SUCCESS(mpio_result); - - vrfy_elements(writebuf, readbuf, write_size, rank); - - mpio_result = MPI_File_close(&fh); - CHECK_SUCCESS(mpio_result); - HDfree(writebuf); - HDfree(readbuf); - - return err_flag; - -} - -static int posix_allwrite_allread_blocks(int numprocs, int rank, int write_size) -{ - int ret; - int i; - int offset = rank*write_size*sizeof(int); - int* writebuf = (int*)HDmalloc(write_size*sizeof(int)); - int* readbuf = (int*)HDmalloc (write_size*sizeof(int)); - FILE* file = NULL; - - for(i=0; i<write_size; i++) - writebuf[i] = i; - - if(rank==0) - file = fopen(testfile, "w+"); - MPI_Barrier(MPI_COMM_WORLD); - if(rank != 0) - file = fopen(testfile, "r+"); - - if(file == NULL) - { - fprintf(stderr, "Could not create testfile\n"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - ret = fseek(file, offset, SEEK_SET); - if(ret == -1) - { - perror("fseek"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - - ret = fwrite(writebuf, sizeof(int), write_size, file); - if(ret != write_size) - { - perror("fwrite"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - MPI_Barrier(MPI_COMM_WORLD); - - offset = ( (rank+(numprocs-1)) % numprocs)*write_size*sizeof(int); - - ret = fseek(file, offset, SEEK_SET); - if(ret == -1) - { - perror("fseek"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - ret = fread(readbuf, sizeof(int), write_size, file); - if( (ret == 0) && feof(file)) - printf("Process %d: Error. Prematurely reached end of file\n", rank); - else if( (ret != write_size) && ferror(file)) - { - perror("Error encountered in fread"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - vrfy_elements(writebuf, readbuf, write_size, rank); - - fclose(file); - - MPI_Barrier(MPI_COMM_WORLD); - if(rank == 0) - unlink(testfile); - - HDfree(writebuf); - HDfree(readbuf); - return err_flag; - -} - -static int posix_onewrite_allread_blocks(int numprocs, int rank, int write_size) -{ - int ret; - int i; - int offset = rank*write_size*sizeof(int); - int* writebuf = (int*)HDmalloc(write_size*sizeof(int)); - int* readbuf = (int*)HDmalloc (write_size*sizeof(int)); - FILE* file = NULL; - - for(i=0; i<write_size; i++) - writebuf[i] = i; - - if(rank==0) - file = fopen(testfile, "w+"); - MPI_Barrier(MPI_COMM_WORLD); - if(rank != 0) - file = fopen(testfile, "r+"); - - if(file == NULL) - { - fprintf(stderr, "Could not create testfile\n"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - if(rank == 0) - { - for(offset = 0; offset<numprocs*write_size*sizeof(int); offset+=(write_size*sizeof(int))) - { - ret = fseek(file, offset, SEEK_SET); - if(ret == -1) - { - perror("fseek"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - - ret = fwrite(writebuf, sizeof(int), write_size, file); - if(ret != write_size) - { - perror("fwrite"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - } - - } - MPI_Barrier(MPI_COMM_WORLD); - - offset = rank*write_size*sizeof(int); - - ret = fseek(file, offset, SEEK_SET); - if(ret == -1) - { - perror("fseek"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - ret = fread(readbuf, sizeof(int), write_size, file); - if( (ret == 0) && feof(file)) - printf("Process %d: Error. Prematurely reached end of file\n", rank); - else if( (ret != write_size) && ferror(file)) - { - perror("Error encountered in fread"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - vrfy_elements(writebuf, readbuf, write_size, rank); - - fclose(file); - - MPI_Barrier(MPI_COMM_WORLD); - if(rank == 0) - unlink(testfile); - - HDfree(writebuf); - HDfree(readbuf); - return err_flag; - -} - -static int posix_onewrite_allread_interlaced(int numprocs, int rank, int write_size) -{ - int ret; - int i, fill, index; - int offset = rank*write_size*sizeof(int); - int* writebuf = (int*)HDmalloc(write_size*sizeof(int)); - int* readbuf = (int*)HDmalloc (write_size*sizeof(int)); - FILE* file = NULL; - - if(rank==0) - file = fopen(testfile, "w+"); - MPI_Barrier(MPI_COMM_WORLD); - if(rank != 0) - file = fopen(testfile, "r+"); - - if(file == NULL) - { - fprintf(stderr, "Could not create testfile\n"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - if(rank == 0) - { - for(offset = 0; offset<numprocs*write_size*sizeof(int); offset+=(numprocs*sizeof(int))) - { - ret = fseek(file, offset, SEEK_SET); - if(ret == -1) - { - perror("fseek"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - fill = offset / (numprocs*sizeof(int)); - for(i=0; i<numprocs; i++) - writebuf[i] = fill; - - - ret = fwrite(writebuf, sizeof(int), numprocs, file); - if(ret != numprocs) - { - perror("fwrite"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - } - - } - MPI_Barrier(MPI_COMM_WORLD); - - index = 0; - for(offset = rank*sizeof(int); offset<numprocs*write_size*sizeof(int); offset+=(numprocs*sizeof(int))) - { - - ret = fseek(file, offset, SEEK_SET); - if(ret == -1) - { - perror("fseek"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - ret = fread(readbuf+index, sizeof(int), 1, file); - if( (ret == 0) && feof(file)) - printf("Process %d: Error. Prematurely reached end of file\n", rank); - else if( (ret != 1) && ferror(file)) - { - perror("Error encountered in fread"); - MPI_Abort(MPI_COMM_WORLD, 1); - } - - index++; - } - - for(i=0; i<write_size; i++) - writebuf[i] = i; - - vrfy_elements(writebuf, readbuf, write_size, rank); - - fclose(file); - - MPI_Barrier(MPI_COMM_WORLD); - if(rank == 0) - unlink(testfile); - - HDfree(writebuf); - HDfree(readbuf); - return err_flag; - -} -/* Each proc wites out 0 1 2 3 with displacement i, so file contents are: - * 0000 1111 2222 3333 etc. (with 4 procs) - * - * Each proc then reads in the whole file and verifies that the data is what it is supposed to be*/ - -static int allwrite_allread_interlaced(int numprocs, int rank, int write_size) -{ - MPI_File fh = MPI_FILE_NULL; - int mpio_result; - int amode, i, counter = 0; - MPI_Datatype filetype; - MPI_Status Status; - int* writebuf = (int*)HDmalloc(write_size*sizeof(int)); - int* readbuf = (int*) HDmalloc(numprocs*sizeof(int)); - int offset=0; - - for(i=0; i<write_size; i++) - writebuf[i] = i; - - - amode = MPI_MODE_CREATE | MPI_MODE_RDWR | MPI_MODE_DELETE_ON_CLOSE; - mpio_result = MPI_File_open(MPI_COMM_WORLD, testfile, amode, MPI_INFO_NULL, &fh); - CHECK_SUCCESS(mpio_result); - - mpio_result = MPI_Type_vector(write_size, 1, numprocs, MPI_INT, &filetype); - CHECK_SUCCESS(mpio_result); - - mpio_result = MPI_Type_commit(&filetype); - CHECK_SUCCESS(mpio_result); - - mpio_result = MPI_File_set_view(fh, rank*sizeof(int), MPI_INT, filetype, "native", MPI_INFO_NULL); - CHECK_SUCCESS(mpio_result); - - mpio_result = MPI_File_write(fh, writebuf, write_size, MPI_INT, &Status); - CHECK_SUCCESS(mpio_result); - - MPI_Barrier(MPI_COMM_WORLD); - - mpio_result = MPI_File_set_view(fh, 0, MPI_BYTE, MPI_BYTE, "native", MPI_INFO_NULL); - CHECK_SUCCESS(mpio_result); - - for(offset = 0; offset<(write_size*numprocs*sizeof(int)); offset+=(numprocs*sizeof(int))) - { - mpio_result = MPI_File_read_at(fh, offset, readbuf, numprocs, MPI_INT, &Status); - CHECK_SUCCESS(mpio_result); - - for(i=0; i<numprocs; i++) - { - if(writebuf[offset/(numprocs*sizeof(int))] != readbuf[i]) - { - if( (rank == 0) && (counter == 0)) - printf("\n"); - if(counter++ < max_err_print) - fprintf(stderr, "Arrays do not match! Prcoess %d, element %d: [%d, %d]\n", rank, i, writebuf[offset/(numprocs*sizeof(int))], readbuf[i]); - else if(counter++ == max_err_print+1) - fprintf(stderr, "Printed %d errors. Omitting the rest\n", max_err_print); - err_flag = -1; - } - - } - } - nmismatches += counter; - mpio_result = MPI_File_close(&fh); - CHECK_SUCCESS(mpio_result); - - HDfree(writebuf); - HDfree(readbuf); - return err_flag; - - -} - -/* Overlapping pattern works as follows (this test requires at least 2 procs: - * Writes: - * Task 0: 0 2 4 6 etc... - * Task 1: 1 3 5 7 etc... - * Task 2: 0 3 6 etc.. - * Task 3: 0 4 8 etc... - * - * The above describes only the pattern of the elements being written. The actual - * number of elements written is going to be: - * - * Task i where i=(numprocs-1) writes write_size elements. All other tasks do: - * x = ((write_size-1)*numprocs) - * Task i's write_size is the smallest multiple of i<=x divided by i, with the exception - * of tasks 0 and 1, for whom i is 2, since they are writing the even and odd multiples. - * - * So, if there are 5 tasks with write_size=4, the resulting pattern of writes is: - * - * Task 0: 0 2 4 6 8 10 12 14 - * Task 1: 1 3 5 7 9 11 13 15 - * Task 2: 0 3 6 9 12 15 - * Task 3: 0 4 8 12 - * Task 4: 0 5 10 15 - * - * - * - * * * All the entires that overlap will therefore be writing the same value - * - * At the end, all tasks read in the file and verify that it is correct should be - * (1,2...((numprocs-1)*WRTE_SIZE). - * */ - -static int allwrite_allread_overlap(int numprocs, int rank, int write_size) -{ - - MPI_File fh = MPI_FILE_NULL; - int mpio_result; - int amode, i, counter = 0; - MPI_Datatype filetype; - MPI_Status Status; - int* writebuf = (int*) HDmalloc(write_size*(numprocs-1)*sizeof(int)); /* An upper bound...not all the elements will be written */ - int* readbuf = (int*) HDmalloc(write_size*(numprocs-1)*sizeof(int)); - - if(numprocs < 2) - { - fprintf(stderr, "The allwrite_allread_overlap test requires at least 2 procs\n"); - return -1; - } - - if(rank == 0) - { - for(i=0; i<write_size*(numprocs-1); i++) - writebuf[i] = 2*i; - } - else if(rank == 1) - { - for(i=0; i<write_size*(numprocs-1); i++) - writebuf[i] = (2*i)+1; - } - else - { - for(i=0; i<write_size*(numprocs-1); i++) - writebuf[i] = (rank+1)*i; - } - - amode = MPI_MODE_CREATE | MPI_MODE_RDWR | MPI_MODE_DELETE_ON_CLOSE; - mpio_result = MPI_File_open(MPI_COMM_WORLD, testfile, amode, MPI_INFO_NULL, &fh); - CHECK_SUCCESS(mpio_result); - - if( (rank == 0) || (rank == 1) ) - mpio_result = MPI_Type_vector(write_size*(numprocs-1), 1, 2, MPI_INT, &filetype); - else - mpio_result = MPI_Type_vector(write_size*(numprocs-1), 1, rank+1, MPI_INT, &filetype); - CHECK_SUCCESS(mpio_result); - - mpio_result = MPI_Type_commit(&filetype); - CHECK_SUCCESS(mpio_result); - - if( rank == 1) - mpio_result = MPI_File_set_view(fh, sizeof(int), MPI_INT, filetype, "native", MPI_INFO_NULL); - else - mpio_result = MPI_File_set_view(fh, 0, MPI_INT, filetype, "native", MPI_INFO_NULL); - CHECK_SUCCESS(mpio_result); - - if( rank == (numprocs - 1)) - mpio_result = MPI_File_write(fh, writebuf, write_size, MPI_INT, &Status); - else - mpio_result = MPI_File_write(fh, writebuf, find_writesize(rank, numprocs, write_size), MPI_INT, &Status); - - CHECK_SUCCESS(mpio_result); - - MPI_Barrier(MPI_COMM_WORLD); - mpio_result = MPI_File_set_view(fh, 0, MPI_BYTE, MPI_BYTE, "native", MPI_INFO_NULL); - CHECK_SUCCESS(mpio_result); - - mpio_result = MPI_File_read_at(fh, 0, readbuf, write_size*(numprocs-1), MPI_INT, &Status); - CHECK_SUCCESS(mpio_result); - - for(i=0; i<write_size*(numprocs-1); i++) - { - if(i != readbuf[i]) - { - if( (rank == 0) && (counter == 0)) - printf("\n"); - if(counter++ < max_err_print) - fprintf(stderr, "Arrays do not match! Prcoess %d, element %d: [%d, %d]\n", rank, i, i, readbuf[i]); - else if(counter++ == max_err_print+1) - fprintf(stderr, "Printed %d errors. Omitting the rest\n", max_err_print); - err_flag = -1; - } - } - - nmismatches += counter; - mpio_result = MPI_File_close(&fh); - CHECK_SUCCESS(mpio_result); - HDfree(writebuf); - HDfree(readbuf); - - return err_flag; - -} - -/* A random process writes out the following to the file: - * 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 (assuming write_size=5, and numprocs=3) - * - * Process i read's in write_size bytes at offset=i*write_size - */ -static int onewrite_allread_blocks(int numprocs, int rank, int write_size) -{ - MPI_File fh = MPI_FILE_NULL; - int mpio_result; - int amode, i; - MPI_Status Status; - int* writebuf = (int*)HDmalloc(write_size*sizeof(int)); - int* readbuf = (int*)HDmalloc (write_size*sizeof(int)); - - for(i=0; i<write_size; i++) - writebuf[i] = i; - - amode = MPI_MODE_CREATE | MPI_MODE_RDWR | MPI_MODE_DELETE_ON_CLOSE; - - mpio_result = MPI_File_open(MPI_COMM_WORLD, testfile, amode, - MPI_INFO_NULL, &fh); - CHECK_SUCCESS(mpio_result); - - /* A random process writes out all the data */ - if(rank == (rand() % numprocs)) - { - for(i=0; i<numprocs; i++) - { - mpio_result = MPI_File_write_at(fh, write_size*i*sizeof(int), writebuf, write_size, MPI_INT, &Status); - CHECK_SUCCESS(mpio_result); - } - } - - MPI_Barrier(MPI_COMM_WORLD); - - mpio_result = MPI_File_read_at(fh, write_size*rank*sizeof(int), readbuf, write_size, MPI_INT, &Status); - CHECK_SUCCESS(mpio_result); - - vrfy_elements(writebuf, readbuf, write_size, rank); - - mpio_result = MPI_File_close(&fh); - CHECK_SUCCESS(mpio_result); - HDfree(writebuf); - HDfree(readbuf); - - return err_flag; - - - -} - -/* Process zero writes out: - * 0000 1111 2222 3333 etc. (with 4 procs) - * - * Each proc reads out 0 1 2 3 starting at displacement i */ -static int onewrite_allread_interlaced(int numprocs, int rank, int write_size) -{ - MPI_File fh = MPI_FILE_NULL; - int mpio_result; - int amode, i; - MPI_Datatype filetype; - MPI_Status Status; - int* writebuf = (int*) HDmalloc(numprocs*write_size*sizeof(int)); /* Upper bound, not all used */ - int* readbuf = (int*)HDmalloc (write_size*sizeof(int)); - - - amode = MPI_MODE_CREATE | MPI_MODE_RDWR; - amode = MPI_MODE_CREATE | MPI_MODE_RDWR | MPI_MODE_DELETE_ON_CLOSE; - mpio_result = MPI_File_open(MPI_COMM_WORLD, testfile, amode, MPI_INFO_NULL, &fh); - CHECK_SUCCESS(mpio_result); - - mpio_result = MPI_Type_vector(write_size, 1, numprocs, MPI_INT, &filetype); - CHECK_SUCCESS(mpio_result); - - mpio_result = MPI_Type_commit(&filetype); - CHECK_SUCCESS(mpio_result); - - if(rank == (rand() % numprocs)) - { - for(i=0; i<write_size; i++) - { - int j; - for(j=0; j<numprocs; j++) - writebuf[j] = i; - - mpio_result = MPI_File_write_at(fh, i*numprocs*sizeof(int), writebuf, numprocs, MPI_INT, &Status); - CHECK_SUCCESS(mpio_result); - } - } - - MPI_Barrier(MPI_COMM_WORLD); - - mpio_result = MPI_File_set_view(fh, rank*sizeof(int), MPI_INT, filetype, "native", MPI_INFO_NULL); - CHECK_SUCCESS(mpio_result); - - mpio_result = MPI_File_read_at(fh, 0, readbuf, write_size, MPI_INT, &Status); - CHECK_SUCCESS(mpio_result); - - for(i=0; i<write_size; i++) - writebuf[i] = i; - - vrfy_elements(writebuf, readbuf, write_size, rank); - - mpio_result = MPI_File_close(&fh); - CHECK_SUCCESS(mpio_result); - HDfree(writebuf); - HDfree(readbuf); - - return err_flag; - -} - -static int find_writesize(int rank, int numprocs, int size) -{ - /* Largest number in the file */ - int tmp = (size-1)*numprocs; - int x = 0; - int write_size = 0; - - /* Find largest multiple not greater than tmp */ - while(x <= tmp) - { - if( (rank == 0) || (rank == 1) ) - x+=2; - else - x += (rank+1); - - write_size++; - } - - return write_size; -} - -static void -vrfy_elements(int* a, int* b, int size, int rank) -{ - int i, counter = 0; - - for(i=0; i<size; i++) - { - if(a[i] != b[i]) - { - if( (rank == 0) && (counter == 0)) - printf("\n"); - if(counter++ < max_err_print) - fprintf(stderr, "Arrays do not match! Prcoess %d, element %d: [%d, %d]\n", rank, i, a[i], b[i]); - else if(counter++ == max_err_print+1) - fprintf(stderr, "Printed %d errors. Omitting the rest\n", max_err_print); - err_flag = -1; - } - } - nmismatches += counter; - fflush(stderr); - fflush(stdout); -} - -/* print an explanation message by MAIN (0) process. - */ -static void -header_msg(void) -{ - printf( -"Purpose:\n" -"This tests if the file system is posix compliant when POSIX and MPI IO APIs\n" -"are used. This is for information only and always exits with 0 even when\n" -"non-compliance errors are encounter. This is to prevent this test from\n" -"aborting the remaining parallel HDF5 tests unnecessarily.\n\n" - ); -} - -int -main(int argc, char* argv[]) -{ - - int numprocs, rank, opt, mpi_tests=1, posix_tests=1; - int lb, ub, inc; - int write_size = 0; - char optstring[] = "h x m p: s: v:"; - char *prefix; - - err_flag = 0; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &numprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - if (rank == 0) - header_msg(); - while((opt = getopt(argc, argv, optstring)) != -1) - { - switch(opt) - { - case 'h': - if(rank == 0) - printf("Usage: %s [options]\n" - "-h prints this help message\n" - "-x run the posix i/o tests ONLY (default: posix and MPI)\n" - "-m run the mpi i/o tests ONLY (default: posix and MPI)\n" - "-s size Run the test for the specific size. Default is 1024, 4096, 16384, ..., 1048576\n" - "-p path specifies path for test file. Default is current directory\n" - "-v num Specifies number of unmatching entries to print (default 10, pass -1 for all)\n", argv[0]); - goto done; - case 'x': - mpi_tests = 0; - posix_tests = 1; - break; - case 'm': - mpi_tests = 1; - posix_tests = 0; - break; - case 'p': - /* need 2 extra--1 for the / and 1 for the terminating NULL. */ - testfile = (char*) HDmalloc(strlen(optarg) + 2 + strlen(TESTFNAME)); - strcpy(testfile, optarg); - /* Append a / just in case they didn't end their path with one */ - strcat(testfile, "/" TESTFNAME); - break; - case 's': - write_size = atoi(optarg); - break; - case 'v': - max_err_print = atoi(optarg); - break; - } - } - - if( (optind < argc) && (rank == 0)) - fprintf(stderr, "Unkown command-line argument passed. Continuing anyway...\n"); - - if (!testfile){ - /* Try environment variable if not given as option. */ - prefix = getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX"); - if (prefix) - { - /* need 2 extra--1 for the / and 1 for the terminating NULL. */ - testfile = (char*) HDmalloc(strlen(prefix) + 2 + strlen(TESTFNAME)); - strcpy(testfile, prefix); - /* Append a / just in case they didn't end their path with one */ - strcat(testfile, "/" TESTFNAME); - } - else - { - testfile = strdup(TESTFNAME); - } - } - printf("Process %d: testfile=%s\n", rank, testfile); - fflush(stdout); - MPI_Barrier(MPI_COMM_WORLD); - - if(write_size == 0) - { - lb = 16*numprocs*sizeof(int); - /* 1MB MPIO-IO overlapping is failing in copper. Lower it now pending - permenant fix for copper.*/ - /* ub = 1024*1024;*/ - ub = lb*128; - inc = 4; - } - else - { - lb = write_size; - ub = write_size+1; - inc = 2; - } - -#ifndef STANDALONE - /* set alarm. */ - ALARM_ON; -#endif - - for(write_size = lb; write_size <= ub; write_size*=inc) - { - if(rank == 0) - printf("\nTesting size %d\n", write_size); - - if(mpi_tests) - { - if(rank == 0) - printf("Testing allwrite_allread_blocks with MPI IO\t\t"); fflush(stdout); - allwrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int))); - PRINT_RESULT(); - MPI_Barrier(MPI_COMM_WORLD); - - if(rank == 0) - printf("Testing allwrite_allread_interlaced with MPI IO\t\t"); fflush(stdout); - allwrite_allread_interlaced(numprocs, rank, write_size/(numprocs*sizeof(int))); - PRINT_RESULT(); - MPI_Barrier(MPI_COMM_WORLD); - - if(rank == 0) - printf("Testing allwrite_allread_overlap with MPI IO\t\t"); fflush(stdout); - allwrite_allread_overlap(numprocs, rank, write_size); - PRINT_RESULT(); - MPI_Barrier(MPI_COMM_WORLD); - - if(rank == 0) - printf("Testing onewrite_allread_blocks with MPI IO\t\t"); fflush(stdout); - onewrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int))); - PRINT_RESULT(); - MPI_Barrier(MPI_COMM_WORLD); - - if(rank == 0) - printf("Testing onewrite_allread_interlaced with MPI IO\t\t"); fflush(stdout); - onewrite_allread_interlaced(numprocs, rank, write_size/(numprocs*sizeof(int))); - PRINT_RESULT(); - MPI_Barrier(MPI_COMM_WORLD); - } - - if(posix_tests) - { - if(rank == 0) - printf("Testing allwrite_allread_blocks with POSIX IO\t\t"); fflush(stdout); - posix_allwrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int))); - PRINT_RESULT(); - MPI_Barrier(MPI_COMM_WORLD); - - if(rank == 0) - printf("Testing onewrite_allread_blocks with POSIX IO\t\t"); fflush(stdout); - posix_onewrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int))); - PRINT_RESULT(); - MPI_Barrier(MPI_COMM_WORLD); - - if(rank == 0) - printf("Testing onewrite_allread_interlaced with POSIX IO\t"); fflush(stdout); - posix_onewrite_allread_interlaced(numprocs, rank, write_size/(numprocs*sizeof(int))); - PRINT_RESULT(); - MPI_Barrier(MPI_COMM_WORLD); - - /* if(rank == 0) - printf("Testing allwrite_allread_overlap with POSIX IO\t\t"); fflush(stdout); - posix_allwrite_allread_overlap(numprocs, rank, write_size); - PRINT_RESULT(); - MPI_Barrier(MPI_COMM_WORLD); -*/ - } - } - -#ifndef STANDALONE - /* turn off alarm */ - ALARM_OFF; -#endif - -done: - if (testfile) - HDfree(testfile); - if (rank == 0){ - printf("\nSummary:\n"); - fflush(stdout); - } - MPI_Barrier(MPI_COMM_WORLD); - printf("Process %d: encountered %d mismatches.\n", rank, nmismatches); - MPI_Finalize(); - - return 0; -} diff --git a/testpar/t_shapesame.c b/testpar/t_shapesame.c index 2d379d6..1a74295 100644 --- a/testpar/t_shapesame.c +++ b/testpar/t_shapesame.c @@ -139,7 +139,6 @@ hs_dr_pio_test__setup(const int test_num, const char *fcnName = "hs_dr_pio_test__setup()"; #endif /* CONTIG_HS_DR_PIO_TEST__SETUP__DEBUG */ const char *filename; - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ hbool_t mis_match = FALSE; int i; int mrc; @@ -282,7 +281,7 @@ hs_dr_pio_test__setup(const int test_num, * CREATE AN HDF5 FILE WITH PARALLEL ACCESS * ---------------------------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(tv_ptr->mpi_comm, tv_ptr->mpi_info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(tv_ptr->mpi_comm, tv_ptr->mpi_info, facc_type); VRFY((acc_tpl >= 0), "create_faccess_plist() succeeded"); /* set the alignment -- need it large so that we aren't always hitting the @@ -4789,7 +4788,6 @@ usage(void) "\tset number of groups for the multiple group test\n"); printf("\t-f <prefix>\tfilename prefix\n"); printf("\t-2\t\tuse Split-file together with MPIO\n"); - printf("\t-p\t\tuse combo MPI-POSIX driver\n"); printf("\t-d <factor0> <factor1>\tdataset dimensions factors. Defaults (%d,%d)\n", ROW_FACTOR, COL_FACTOR); printf("\t-c <dim0> <dim1>\tdataset chunk dimensions. Defaults (dim0/10,dim1/10)\n"); @@ -4840,9 +4838,6 @@ parse_options(int argc, char **argv) } paraprefix = *argv; break; - case 'p': /* Use the MPI-POSIX driver access */ - facc_type = FACC_MPIPOSIX; - break; case 'i': /* Collective MPI-IO access with independent IO */ dxfer_coll_type = DXFER_INDEPENDENT_IO; break; @@ -4928,8 +4923,7 @@ parse_options(int argc, char **argv) * Create the appropriate File access property list */ hid_t -create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type, - hbool_t use_gpfs) +create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type) { hid_t ret_pl = -1; herr_t ret; /* generic return value */ @@ -4970,13 +4964,6 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type, return(ret_pl); } - if (l_facc_type == FACC_MPIPOSIX) { - /* set Parallel access with communicator */ - ret = H5Pset_fapl_mpiposix(ret_pl, comm, use_gpfs); - VRFY((ret >= 0), "H5Pset_fapl_mpiposix succeeded"); - return(ret_pl); - } - /* unknown file access types */ return (ret_pl); } @@ -5108,12 +5095,6 @@ int main(int argc, char **argv) /* Parse command line arguments */ TestParseCmdLine(argc, argv); - if (facc_type == FACC_MPIPOSIX && MAINPROCESS){ - printf("===================================\n" - " Using MPIPOSIX driver\n" - "===================================\n"); - } - if (dxfer_coll_type == DXFER_INDEPENDENT_IO && MAINPROCESS){ printf("===================================\n" " Using Independent I/O with file set view to replace collective I/O \n" diff --git a/testpar/t_span_tree.c b/testpar/t_span_tree.c index 2730ea2..6e233a9 100644 --- a/testpar/t_span_tree.c +++ b/testpar/t_span_tree.c @@ -261,7 +261,6 @@ void coll_write_test(int chunk_factor) int *matrix_out, *matrix_out1, *vector; - hbool_t use_gpfs = FALSE; int mpi_size,mpi_rank; MPI_Comm comm = MPI_COMM_WORLD; @@ -293,7 +292,7 @@ void coll_write_test(int chunk_factor) for (i = 1; i < MSPACE1_DIM*mpi_size - 1; i++) vector[i] = i; /* Grab file access property list */ - facc_plist = create_faccess_plist(comm, info, facc_type, use_gpfs); + facc_plist = create_faccess_plist(comm, info, facc_type); VRFY((facc_plist >= 0),""); /* @@ -474,7 +473,7 @@ void coll_write_test(int chunk_factor) ***/ /* Obtain file access property list with MPI-IO driver */ - facc_plist = create_faccess_plist(comm, info, facc_type, use_gpfs); + facc_plist = create_faccess_plist(comm, info, facc_type); VRFY((facc_plist >= 0),""); file = H5Fopen(filename, H5F_ACC_RDONLY, facc_plist); @@ -724,7 +723,6 @@ coll_read_test(int chunk_factor) dataset */ #endif - hbool_t use_gpfs = FALSE; int mpi_size,mpi_rank; MPI_Comm comm = MPI_COMM_WORLD; @@ -749,7 +747,7 @@ coll_read_test(int chunk_factor) /*** For testing collective hyperslab selection read ***/ /* Obtain file access property list */ - facc_plist = create_faccess_plist(comm, info, facc_type, use_gpfs); + facc_plist = create_faccess_plist(comm, info, facc_type); VRFY((facc_plist >= 0),""); /* @@ -1582,7 +1580,6 @@ lower_dim_size_comp_test__run_test(const int chunk_edge_size, hsize_t max_dims[32]; #endif /* LOWER_DIM_SIZE_COMP_TEST__RUN_TEST__DEBUG */ const char *filename; - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ hbool_t data_ok = FALSE; hbool_t mis_match = FALSE; int i; @@ -1717,7 +1714,7 @@ lower_dim_size_comp_test__run_test(const int chunk_edge_size, * CREATE AN HDF5 FILE WITH PARALLEL ACCESS * ---------------------------------------*/ /* setup file access template */ - acc_tpl = create_faccess_plist(mpi_comm, mpi_info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(mpi_comm, mpi_info, facc_type); VRFY((acc_tpl >= 0), "create_faccess_plist() succeeded"); /* create the file collectively */ @@ -2681,7 +2678,6 @@ link_chunk_collective_io_test(void) /* const char *fcnName = "link_chunk_collective_io_test()"; */ const char *filename; hbool_t mis_match = FALSE; - hbool_t use_gpfs = FALSE; /* Use GPFS hints */ int i; int mrc; int mpi_rank; @@ -2718,7 +2714,7 @@ link_chunk_collective_io_test(void) HDassert( filename != NULL ); /* setup file access template */ - acc_tpl = create_faccess_plist(mpi_comm, mpi_info, facc_type, use_gpfs); + acc_tpl = create_faccess_plist(mpi_comm, mpi_info, facc_type); VRFY((acc_tpl >= 0), "create_faccess_plist() succeeded"); /* create the file collectively */ diff --git a/testpar/testph5.sh.in b/testpar/testph5.sh.in deleted file mode 100644 index 83327ca..0000000 --- a/testpar/testph5.sh.in +++ /dev/null @@ -1,77 +0,0 @@ -#! /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 files COPYING and Copyright.html. COPYING can be found at the root -# of the source code distribution tree; Copyright.html can be found at the -# root level of an installed copy of the electronic HDF5 document set and -# is linked from the top-level documents page. It can also be found at -# http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have -# access to either file, you may request a copy from help@hdfgroup.org. -# - -# Scripts for running testphdf5 program with a variety of parameters -top_srcdir=@top_srcdir@ -top_builddir=.. -srcdir=@srcdir@ - -TEST_APP=testphdf5 # The tool name -TEST_APP_BIN=`pwd`/$TEST_APP # The path of the tool binary - -nerrors=0 -verbose=yes - -# Print a line-line message left justified in a field of 70 characters -# beginning with the word "Testing". -# -TESTING() { - SPACES=" " - echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012' -} - -# Run a test. If a test fails then increment the `nerrors' global variable. -# -TOOLTEST() { - # Run test. - echo $RUNPARALLEL $TEST_APP_BIN "$@" - eval $RUNPARALLEL $TEST_APP_BIN "$@" - - # Check if the command failed and increment nerrors if so. - if test $? -ne 0 ; then - nerrors="`expr $nerrors + 1`" - fi -} - -############################################################################## -############################################################################## -### T H E T E S T S ### -############################################################################## -############################################################################## - -# testphdf5 test using the MPI-POSIX VFL driver -TOOLTEST -p - -# Temporary patch: -# Run t_shapesame this way. Need more permanent solution. -echo $RUNPARALLEL ./t_shapesame -p -eval $RUNPARALLEL ./t_shapesame -p - -# Check if the command failed and increment nerrors if so. -if test $? -ne 0 ; then - nerrors="`expr $nerrors + 1`" -fi -# Temporary patch ended. - -# Emit message about testing status -if test $nerrors -eq 0 ; then - echo "All $TEST_APP tests passed." -else - echo "ERROR! One or more $TEST_APP tests failed." -fi - -# Propagate a useful exit code -exit $nerrors diff --git a/testpar/testphdf5.c b/testpar/testphdf5.c index 3419977..0b97c03 100644 --- a/testpar/testphdf5.c +++ b/testpar/testphdf5.c @@ -118,7 +118,6 @@ usage(void) "\tset number of groups for the multiple group test\n"); printf("\t-f <prefix>\tfilename prefix\n"); printf("\t-2\t\tuse Split-file together with MPIO\n"); - printf("\t-p\t\tuse combo MPI-POSIX driver\n"); printf("\t-d <factor0> <factor1>\tdataset dimensions factors. Defaults (%d,%d)\n", ROW_FACTOR, COL_FACTOR); printf("\t-c <dim0> <dim1>\tdataset chunk dimensions. Defaults (dim0/10,dim1/10)\n"); @@ -169,9 +168,6 @@ parse_options(int argc, char **argv) } paraprefix = *argv; break; - case 'p': /* Use the MPI-POSIX driver access */ - facc_type = FACC_MPIPOSIX; - break; case 'i': /* Collective MPI-IO access with independent IO */ dxfer_coll_type = DXFER_INDEPENDENT_IO; break; @@ -257,8 +253,7 @@ parse_options(int argc, char **argv) * Create the appropriate File access property list */ hid_t -create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type, - hbool_t use_gpfs) +create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type) { hid_t ret_pl = -1; herr_t ret; /* generic return value */ @@ -299,13 +294,6 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type, return(ret_pl); } - if (l_facc_type == FACC_MPIPOSIX) { - /* set Parallel access with communicator */ - ret = H5Pset_fapl_mpiposix(ret_pl, comm, use_gpfs); - VRFY((ret >= 0), "H5Pset_fapl_mpiposix succeeded"); - return(ret_pl); - } - /* unknown file access types */ return (ret_pl); } @@ -353,8 +341,6 @@ int main(int argc, char **argv) /* Tests are generally arranged from least to most complexity... */ AddTest("mpiodup", test_fapl_mpio_dup, NULL, "fapl_mpio duplicate", NULL); - AddTest("posixdup", test_fapl_mpiposix_dup, NULL, - "fapl_mpiposix duplicate", NULL); AddTest("split", test_split_comm_access, NULL, "dataset using split communicators", PARATESTFILE); @@ -552,12 +538,6 @@ int main(int argc, char **argv) /* Parse command line arguments */ TestParseCmdLine(argc, argv); - if (facc_type == FACC_MPIPOSIX && MAINPROCESS){ - printf("===================================\n" - " Using MPIPOSIX driver\n" - "===================================\n"); - } - if (dxfer_coll_type == DXFER_INDEPENDENT_IO && MAINPROCESS){ printf("===================================\n" " Using Independent I/O with file set view to replace collective I/O \n" diff --git a/testpar/testphdf5.h b/testpar/testphdf5.h index 0b39160..f313073 100644 --- a/testpar/testphdf5.h +++ b/testpar/testphdf5.h @@ -63,8 +63,6 @@ enum H5TEST_COLL_CHUNK_API {API_NONE=0,API_LINK_HARD, #define FACC_DEFAULT 0x0 /* default */ #define FACC_MPIO 0x1 /* MPIO */ #define FACC_SPLIT 0x2 /* Split File */ -#define FACC_MULTI 0x4 /* Multi File */ -#define FACC_MPIPOSIX 0x8 /* MPIPOSIX */ #define DXFER_COLLECTIVE_IO 0x1 /* Collective IO*/ #define DXFER_INDEPENDENT_IO 0x2 /* Independent IO collectively */ @@ -186,14 +184,13 @@ enum H5TEST_COLL_CHUNK_API {API_NONE=0,API_LINK_HARD, #define TEST_SET_INDEPENDENT 0x002 #define TEST_DATATYPE_CONVERSION 0x004 #define TEST_DATA_TRANSFORMS 0x008 -#define TEST_SET_MPIPOSIX 0x010 -#define TEST_NOT_SIMPLE_OR_SCALAR_DATASPACES 0x020 -#define TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_COMPACT 0x040 -#define TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_EXTERNAL 0x080 -#define TEST_FILTERS 0x100 +#define TEST_NOT_SIMPLE_OR_SCALAR_DATASPACES 0x010 +#define TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_COMPACT 0x020 +#define TEST_NOT_CONTIGUOUS_OR_CHUNKED_DATASET_EXTERNAL 0x040 +#define TEST_FILTERS 0x080 /* TEST_FILTERS will take place of this after supporting mpio + filter for * H5Dcreate and H5Dwrite */ -#define TEST_FILTERS_READ 0x200 +#define TEST_FILTERS_READ 0x100 /* Don't erase these lines, they are put here for debugging purposes */ /* @@ -246,7 +243,6 @@ void multiple_group_read(void); void collective_group_write(void); void independent_group_read(void); void test_fapl_mpio_dup(void); -void test_fapl_mpiposix_dup(void); void test_split_comm_access(void); void dataset_atomicity(void); void dataset_writeInd(void); @@ -298,7 +294,7 @@ void compress_readAll(void); void test_dense_attr(void); /* commonly used prototypes */ -hid_t create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type, hbool_t use_gpfs); +hid_t create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type); MPI_Offset h5_mpi_get_file_size(const char *filename, MPI_Comm comm, MPI_Info info); int dataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[], DATATYPE *dataset, DATATYPE *original); diff --git a/tools/Makefile.in b/tools/Makefile.in index 5b9568a..a456113 100644 --- a/tools/Makefile.in +++ b/tools/Makefile.in @@ -214,7 +214,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/tools/h5copy/Makefile.in b/tools/h5copy/Makefile.in index b922c9b..51b3640 100644 --- a/tools/h5copy/Makefile.in +++ b/tools/h5copy/Makefile.in @@ -220,7 +220,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/tools/h5diff/Makefile.in b/tools/h5diff/Makefile.in index 1b732b0..e38d2e1 100644 --- a/tools/h5diff/Makefile.in +++ b/tools/h5diff/Makefile.in @@ -227,7 +227,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/tools/h5dump/Makefile.in b/tools/h5dump/Makefile.in index 21a622d..7770b93 100644 --- a/tools/h5dump/Makefile.in +++ b/tools/h5dump/Makefile.in @@ -226,7 +226,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/tools/h5dump/h5dump_ddl.c b/tools/h5dump/h5dump_ddl.c index d714f39..e38b93b 100644 --- a/tools/h5dump/h5dump_ddl.c +++ b/tools/h5dump/h5dump_ddl.c @@ -1203,28 +1203,24 @@ dump_fcpl(hid_t fid) PRINTSTREAM(rawoutstream, "%s %d\n","BTREE_LEAF", sym_lk); #ifdef SHOW_FILE_DRIVER - if (H5FD_CORE==fdriver) + if(H5FD_CORE==fdriver) HDstrcpy(dname,"H5FD_CORE"); #ifdef H5_HAVE_DIRECT - else if (H5FD_DIRECT==fdriver) + else if(H5FD_DIRECT==fdriver) HDstrcpy(dname,"H5FD_DIRECT"); #endif - else if (H5FD_FAMILY==fdriver) + else if(H5FD_FAMILY==fdriver) HDstrcpy(dname,"H5FD_FAMILY"); - else if (H5FD_LOG==fdriver) + else if(H5FD_LOG==fdriver) HDstrcpy(dname,"H5FD_LOG"); - else if (H5FD_MPIO==fdriver) + else if(H5FD_MPIO==fdriver) HDstrcpy(dname,"H5FD_MPIO"); - else if (H5FD_MULTI==fdriver) + else if(H5FD_MULTI==fdriver) HDstrcpy(dname,"H5FD_MULTI"); - else if (H5FD_SEC2==fdriver) + else if(H5FD_SEC2==fdriver) HDstrcpy(dname,"H5FD_SEC2"); - else if (H5FD_STDIO==fdriver) + else if(H5FD_STDIO==fdriver) HDstrcpy(dname,"H5FD_STDIO"); -#ifdef H5_HAVE_STREAM - else if (H5FD_STREAM==fdriver) - HDstrcpy(dname,"H5FD_STREAM"); -#endif else HDstrcpy(dname,"Unknown driver"); @@ -1239,19 +1235,14 @@ dump_fcpl(hid_t fid) indentation(dump_indent + COL); if(fs_strategy == H5F_FILE_SPACE_ALL_PERSIST) { PRINTSTREAM(rawoutstream, "%s %s\n", "FILE_SPACE_STRATEGY", "H5F_FILE_SPACE_ALL_PERSIST"); - } - else if(fs_strategy == H5F_FILE_SPACE_ALL) { + } else if(fs_strategy == H5F_FILE_SPACE_ALL) { PRINTSTREAM(rawoutstream, "%s %s\n", "FILE_SPACE_STRATEGY", "H5F_FILE_SPACE_ALL"); - } - else if(fs_strategy == H5F_FILE_SPACE_AGGR_VFD) { + } else if(fs_strategy == H5F_FILE_SPACE_AGGR_VFD) { PRINTSTREAM(rawoutstream, "%s %s\n", "FILE_SPACE_STRATEGY", "H5F_FILE_SPACE_AGGR_VFD"); - } - else if(fs_strategy == H5F_FILE_SPACE_VFD) { + } else if(fs_strategy == H5F_FILE_SPACE_VFD) { PRINTSTREAM(rawoutstream, "%s %s\n", "FILE_SPACE_STRATEGY", "H5F_FILE_SPACE_VFD"); - } - else { + } else PRINTSTREAM(rawoutstream, "%s %s\n", "FILE_SPACE_STRATEGY", "Unknown strategy"); - } indentation(dump_indent + COL); PRINTSTREAM(rawoutstream, "%s %Hu\n","FREE_SPACE_THRESHOLD", fs_threshold); diff --git a/tools/h5import/Makefile.in b/tools/h5import/Makefile.in index 94910af..93e27ff 100644 --- a/tools/h5import/Makefile.in +++ b/tools/h5import/Makefile.in @@ -220,7 +220,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/tools/h5jam/Makefile.in b/tools/h5jam/Makefile.in index c16c300..f699068 100644 --- a/tools/h5jam/Makefile.in +++ b/tools/h5jam/Makefile.in @@ -234,7 +234,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/tools/h5ls/Makefile.in b/tools/h5ls/Makefile.in index d67249f..54b73c7 100644 --- a/tools/h5ls/Makefile.in +++ b/tools/h5ls/Makefile.in @@ -214,7 +214,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/tools/h5repack/Makefile.in b/tools/h5repack/Makefile.in index f9b3018..5951d2e 100644 --- a/tools/h5repack/Makefile.in +++ b/tools/h5repack/Makefile.in @@ -271,7 +271,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/tools/h5stat/Makefile.in b/tools/h5stat/Makefile.in index d2c26a2..282d329 100644 --- a/tools/h5stat/Makefile.in +++ b/tools/h5stat/Makefile.in @@ -249,7 +249,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/tools/lib/Makefile.in b/tools/lib/Makefile.in index 6f7f3b9..b41282a 100644 --- a/tools/lib/Makefile.in +++ b/tools/lib/Makefile.in @@ -212,7 +212,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c index 1794342..10d150f 100644 --- a/tools/lib/h5tools.c +++ b/tools/lib/h5tools.c @@ -64,12 +64,8 @@ static const char *drivernames[]={ "family", "split", "multi", -#ifdef H5_HAVE_STREAM - "stream", -#endif /* H5_HAVE_STREAM */ #ifdef H5_HAVE_PARALLEL "mpio", - "mpiposix" #endif /* H5_HAVE_PARALLEL */ }; @@ -80,12 +76,8 @@ typedef enum { ,FAMILY_IDX ,SPLIT_IDX ,MULTI_IDX -#ifdef H5_HAVE_STREAM - ,STREAM_IDX -#endif /* H5_HAVE_STREAM */ #ifdef H5_HAVE_PARALLEL ,MPIO_IDX - ,MPIPOSIX_IDX #endif /* H5_HAVE_PARALLEL */ } driver_idx; #define NUM_DRIVERS (sizeof(drivernames) / sizeof(drivernames[0])) @@ -521,48 +513,23 @@ h5tools_get_fapl(hid_t fapl, const char *driver, unsigned *drivernum) if(drivernum) *drivernum = MULTI_IDX; -#ifdef H5_HAVE_STREAM - } - else if(!HDstrcmp(driver, drivernames[STREAM_IDX])) { - /* STREAM Driver */ - if(H5Pset_fapl_stream(new_fapl, NULL) < 0) - goto error; - - if(drivernum) - *drivernum = STREAM_IDX; -#endif /* H5_HAVE_STREAM */ -#ifdef H5_HAVE_PARALLEL - } - else if(!HDstrcmp(driver, drivernames[MPIO_IDX])) { - /* MPI-I/O Driver */ - /* check if MPI has been initialized. */ - if(!h5tools_mpi_init_g) - MPI_Initialized(&h5tools_mpi_init_g); - if(h5tools_mpi_init_g) { - if(H5Pset_fapl_mpio(new_fapl, MPI_COMM_WORLD, MPI_INFO_NULL) < 0) - goto error; - - if(drivernum) - *drivernum = MPIO_IDX; - } /* end if */ } - else if (!HDstrcmp(driver, drivernames[MPIPOSIX_IDX])) { +#ifdef H5_HAVE_PARALLEL + else if(!HDstrcmp(driver, drivernames[MPIO_IDX])) { /* MPI-I/O Driver */ /* check if MPI has been initialized. */ if(!h5tools_mpi_init_g) MPI_Initialized(&h5tools_mpi_init_g); if(h5tools_mpi_init_g) { - if(H5Pset_fapl_mpiposix(new_fapl, MPI_COMM_WORLD, TRUE) < 0) + if(H5Pset_fapl_mpio(new_fapl, MPI_COMM_WORLD, MPI_INFO_NULL) < 0) goto error; - if(drivernum) - *drivernum = MPIPOSIX_IDX; + *drivernum = MPIO_IDX; } /* end if */ -#endif /* H5_HAVE_PARALLEL */ } - else { +#endif /* H5_HAVE_PARALLEL */ + else goto error; - } return(new_fapl); @@ -580,8 +547,7 @@ error: * Loop through the various types of VFL drivers trying to open FNAME. * If the HDF5 library is version 1.2 or less, then we have only the SEC2 * driver to try out. If the HDF5 library is greater than version 1.2, - * then we have the FAMILY, SPLIT, and MULTI drivers to play with (and - * the STREAM driver if H5_HAVE_STREAM is defined, that is). + * then we have the FAMILY, SPLIT, and MULTI drivers to play with. * * If DRIVER is non-NULL, then it will try to open the file with that * driver first. We assume that the user knows what they are doing so, if @@ -956,10 +922,9 @@ h5tools_region_simple_prefix(FILE *stream, const h5tool_format_t *info, h5tools_str_region_prefix(&prefix, info, elmtno, ptdata, ctx->ndims, ctx->p_max_idx, ctx); /* Write new prefix to output */ - if (ctx->indent_level >= 0) { + if (ctx->indent_level >= 0) indentlevel = ctx->indent_level; - } - else { + else /* * This is because sometimes we don't print out all the header * info for the data (like the tattr-2.ddl example). If that happens @@ -967,25 +932,20 @@ h5tools_region_simple_prefix(FILE *stream, const h5tool_format_t *info, * just print out the default indent levels. */ indentlevel = ctx->default_indent_level; - } /* when printing array indices, print the indentation before the prefix the prefix is printed one indentation level before */ - if (info->pindex) { + if (info->pindex) for (i = 0; i < indentlevel - 1; i++) { PUTSTREAM(h5tools_str_fmt(&str, (size_t)0, info->line_indent), stream); } - } if (elmtno == 0 && secnum == 0 && info->line_1st) { PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_1st), stream); - } - else if (secnum && info->line_cont) { + } else if (secnum && info->line_cont) { PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_cont), stream); - } - else { + } else PUTSTREAM(h5tools_str_fmt(&prefix, (size_t)0, info->line_pre), stream); - } templength = h5tools_str_len(&prefix); diff --git a/tools/misc/Makefile.in b/tools/misc/Makefile.in index 47bf60d..a20b3db 100644 --- a/tools/misc/Makefile.in +++ b/tools/misc/Makefile.in @@ -274,7 +274,6 @@ FC_VERSION = @FC_VERSION@ FGREP = @FGREP@ FILTERS = @FILTERS@ FSEARCH_DIRS = @FSEARCH_DIRS@ -GPFS = @GPFS@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ diff --git a/vms/src/h5pubconf.h b/vms/src/h5pubconf.h index 798732f..e12724c 100644 --- a/vms/src/h5pubconf.h +++ b/vms/src/h5pubconf.h @@ -180,12 +180,6 @@ /* Define to 1 if you have the `get_fpc_csr' function. */ /* #undef H5_HAVE_GET_FPC_CSR */ -/* Define if we have GPFS support */ -/* #undef H5_HAVE_GPFS */ - -/* Define to 1 if you have the <gpfs.h> header file. */ -/* #undef H5_HAVE_GPFS_H */ - /* Define if library will contain instrumentation to detect correct optimization operation */ #define H5_HAVE_INSTRUMENTED_LIBRARY 1 diff --git a/vms/src/make.com b/vms/src/make.com index 20429b2..397d543 100644 --- a/vms/src/make.com +++ b/vms/src/make.com @@ -44,7 +44,7 @@ $ cobj= "H5, H5checksum, H5dbg, H5system, H5timer, H5trace,"+- "H5EAsblock, H5EAstat, H5EAtest, H5E, H5Edeprec, H5Eint,"+- "H5FA, H5FAcache, H5FAdbg, H5FAdblkpage, H5FAdblock, H5FAhdr, H5FAstat, H5FAtest,"+- "H5Faccum, H5F, H5Fcwfs, H5Fdbg, H5Fdeprec, H5FD, H5FDcore, H5FDdirect, H5FDfamily, H5FDint, H5FDlog, "+- - "H5FDmpi, H5FDmpio, H5FDmpiposix, H5FDmulti, H5FDsec2, H5FDspace, H5FDstdio, H5FDwindows,"+- + "H5FDmpi, H5FDmpio, H5FDmulti, H5FDsec2, H5FDspace, H5FDstdio, H5FDwindows,"+- "H5Fefc, H5Ffake, H5Fio, H5FL, H5Fmount, H5Fmpi, H5FO, H5Fquery, H5FS, H5FScache, H5FSdbg,"+- "H5Fsfile, H5FSsection, H5FSstat, H5FStest, H5Fsuper, H5Fsuper_cache, H5Ftest,"+- "H5Gbtree2, H5G, H5Gcache, H5Gcompact, H5Gdense, H5Gdeprec, H5Gent, H5Gint, H5Glink, H5Gloc,"+- |