[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:
Quincey Koziol 2014-03-21 18:02:24 -05:00
parent c4f982abf1
commit 2e4302818a
97 changed files with 443 additions and 4693 deletions

View File

@ -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

View File

@ -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@

View File

@ -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_)/;

View File

@ -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@

View File

@ -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@

View File

@ -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;

View File

@ -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@

View File

@ -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@

View File

@ -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
#-----------------------------------------------------------------------------

View File

@ -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@

View File

@ -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>

View File

@ -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
View File

@ -788,7 +788,6 @@ HAVE_DMALLOC
CODESTACK
INSTRUMENT
LARGEFILE
GPFS
HDF5_HL
CXX
HDF_CXX
@ -913,7 +912,6 @@ with_zlib
with_szlib
enable_threadsafe
with_pthread
enable_gpfs
enable_debug
enable_codestack
enable_metadata_trace_file
@ -1596,8 +1594,6 @@ Optional Features:
--enable-production Determines how to run the compiler.
--disable-largefile omit support for large files
--enable-threadsafe Enable thread-safe capability
--enable-gpfs Enable GPFS hints for the MPI/POSIX file driver.
[default=no]
--enable-debug=all Turn on debugging in all packages. One may also
specify a comma-separated list of package names
without the leading H5 or the word no. The default
@ -3975,7 +3971,6 @@ $as_echo "done" >&6; }
## HDF_CXX: whether C++ is enabled. Default no.
## CXX: C++ compiler.
## HDF5_HL: whether high-level library is enabled. Default is yes.
## GPFS: whether gpfs is enabled. Default no.
## LARGEFILE: whether largefile support is enabled. Default yes.
## INSTRUMENT: whether INSTRUMENT is enabled. No default set here.
## CODESTACK: whether CODESTACK is enabled. Default no.
@ -3997,7 +3992,6 @@ $as_echo "done" >&6; }
HDF_CXX=no
HDF_CXX=no
HDF5_HL=yes
GPFS=no
LARGEFILE=yes
CODESTACK=no
@ -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" ;;

View File

@ -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

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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@

View File

@ -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

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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);

View File

@ -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

View File

@ -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.

View File

@ -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");

View File

@ -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;

View File

@ -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 */

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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() */

View File

@ -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 */

View File

@ -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() */
/*---------------------------------------------------------------------------

View File

@ -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" {

File diff suppressed because it is too large Load Diff

View File

@ -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 */

View File

@ -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 */

View File

@ -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;
/********************/

View File

@ -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() */

View File

@ -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,

View File

@ -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

View File

@ -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;

View File

@ -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 \

View File

@ -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@

View File

@ -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
*/

View File

@ -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@

View File

@ -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@

View File

@ -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 ||

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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);

View File

@ -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 */

View File

@ -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 */

View File

@ -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);

View File

@ -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");
}

View File

@ -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;
}

View File

@ -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"

View File

@ -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 */

View File

@ -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

View File

@ -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"

View File

@ -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);

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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);

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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@

View File

@ -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);

View File

@ -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@

View File

@ -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

View File

@ -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,"+-