mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-02-17 16:10:24 +08:00
[svn-r24864] Description:
Remove all traces of MPI-POSIX VFD and GPFS detection/code. Remove remaining traces of stream VFD. Remove testpar/t_posix_compliant test (it's not actually verifying anything). Clean up H5D__mpio_opt_possible() further. Moved environment variable that disables MPI collective operations into MPI-IO VFD (instead of it being in src/H5S.c). A few other small code cleanups. Tested on: Mac OSX/64 10.9.2 (amazon) w/parallel & serial
This commit is contained in:
parent
c4f982abf1
commit
2e4302818a
4
MANIFEST
4
MANIFEST
@ -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
|
||||
|
@ -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@
|
||||
|
@ -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_)/;
|
||||
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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
|
||||
@ -816,16 +809,6 @@ if (NOT WINDOWS)
|
||||
endif (HDF5_ENABLE_DIRECT_VFD)
|
||||
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
|
||||
#-----------------------------------------------------------------------------
|
||||
@ -891,18 +874,6 @@ if (WINDOWS)
|
||||
endif (NOT HDF5_NO_IOEO_TEST)
|
||||
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
|
||||
#-----------------------------------------------------------------------------
|
||||
|
@ -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@
|
||||
|
@ -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>
|
||||
|
@ -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@
|
||||
|
79
configure
vendored
79
configure
vendored
@ -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
|
||||
@ -27682,74 +27676,6 @@ else
|
||||
$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" ;;
|
||||
|
34
configure.ac
34
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
|
||||
@ -2391,35 +2389,6 @@ else
|
||||
AC_MSG_RESULT([no])
|
||||
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
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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@
|
||||
|
@ -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
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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");
|
||||
h5dcpl = H5Pcreate(H5P_DATASET_CREATE);
|
||||
if (h5dcpl < 0) {
|
||||
fprintf(stderr, "HDF5 Property List Create 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");
|
||||
}
|
||||
/* 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 */
|
||||
|
||||
sprintf(dname, "Dataset_%ld", ndset);
|
||||
h5ds_id = H5DCREATE(fd->h5fd, dname, ELMT_H5_TYPE,
|
||||
h5dset_space_id, h5dcpl);
|
||||
|
||||
if (h5ds_id < 0) {
|
||||
fprintf(stderr, "HDF5 Dataset 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);
|
||||
|
||||
if (h5ds_id < 0) {
|
||||
fprintf(stderr, "HDF5 Dataset Create failed\n");
|
||||
GOTOERROR(FAIL);
|
||||
}
|
||||
|
||||
hrc = H5Pclose(h5dcpl);
|
||||
/* verifying the close of the dcpl */
|
||||
if (hrc < 0) {
|
||||
fprintf(stderr, "HDF5 Property List Close 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);
|
||||
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);
|
||||
}
|
||||
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);
|
||||
/* 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;
|
||||
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 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);
|
||||
}
|
||||
if (mrc != MPI_SUCCESS) {
|
||||
fprintf(stderr, "MPI 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);
|
||||
/*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);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
break;
|
||||
|
||||
if (mrc != MPI_SUCCESS) {
|
||||
fprintf(stderr, "MPI File Open failed(%s)\n", fname);
|
||||
GOTOERROR(FAIL);
|
||||
}
|
||||
}
|
||||
case PHDF5:
|
||||
if ((acc_tpl = H5Pcreate(H5P_FILE_ACCESS)) < 0) {
|
||||
fprintf(stderr, "HDF5 Property List Create failed\n");
|
||||
GOTOERROR(FAIL);
|
||||
}
|
||||
|
||||
break;
|
||||
/* 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);
|
||||
}
|
||||
|
||||
case PHDF5:
|
||||
acc_tpl = H5Pcreate(H5P_FILE_ACCESS);
|
||||
if (acc_tpl < 0) {
|
||||
fprintf(stderr, "HDF5 Property List Create failed\n");
|
||||
GOTOERROR(FAIL);
|
||||
}
|
||||
/* 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);
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
/* 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);
|
||||
}
|
||||
|
||||
/* 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);
|
||||
}
|
||||
/* verifying the close of the acc_tpl */
|
||||
if (H5Pclose(acc_tpl) < 0) {
|
||||
fprintf(stderr, "HDF5 Property List Close 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);
|
||||
}
|
||||
|
||||
hrc = H5Pclose(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);
|
||||
}
|
||||
|
||||
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.
|
||||
|
@ -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");
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
if(io_info->dxpl_cache->xfer_mode == H5FD_MPIO_INDEPENDENT)
|
||||
local_cause |= H5D_MPIO_SET_INDEPENDENT;
|
||||
|
||||
/* 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;
|
||||
/* 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() */
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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() */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
|
@ -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" {
|
||||
|
1488
src/H5FDmpiposix.c
1488
src/H5FDmpiposix.c
File diff suppressed because it is too large
Load Diff
@ -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 */
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
||||
/********************/
|
||||
|
13
src/H5S.c
13
src/H5S.c
@ -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() */
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
/* 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 */
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
|
@ -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 \
|
||||
|
@ -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@
|
||||
|
@ -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
|
||||
*/
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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 ||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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);
|
||||
|
123
testpar/t_dset.c
123
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 */
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -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"
|
||||
|
@ -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 */
|
||||
|
@ -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
|
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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@
|
||||
|
@ -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 {
|
||||
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);
|
||||
|
||||
|
@ -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@
|
||||
|
@ -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
|
||||
|
@ -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,"+-
|
||||
|
Loading…
Reference in New Issue
Block a user