Merge pull request #4520 from ggouaillardet/refresh/romio321
io/romio321: refresh ROMIO based on latest stable MPICH 3.2.1
Этот коммит содержится в:
Коммит
8babaad35c
@ -1,58 +0,0 @@
|
|||||||
1. prepare new romio directory
|
|
||||||
|
|
||||||
cp -a <old romio> <new romio>
|
|
||||||
# cp -a ompi/mca/io/romio ompi/mca/io/romio314
|
|
||||||
rm -rf <new romio>/romio
|
|
||||||
# rm -rf ompi/mca/io/romio314/romio
|
|
||||||
git add <new romio>
|
|
||||||
# git add ompi/mca/io/romio314
|
|
||||||
# git commit
|
|
||||||
|
|
||||||
|
|
||||||
2. import new romio
|
|
||||||
|
|
||||||
cp -a <mpich dir>/src/mpi/romio <new romio>
|
|
||||||
# cp -a /.../mpich-3.2b1/src/mpi/romio ompi/mca/io/romio314
|
|
||||||
git add <new romio>
|
|
||||||
# git add ompi/mca/io/romio314
|
|
||||||
# git commit
|
|
||||||
|
|
||||||
3. patch romio
|
|
||||||
|
|
||||||
cd <new romio>
|
|
||||||
# cd ompi/mca/io/romio314
|
|
||||||
# git show 7ad376a7b202b45c8b4f574e873546ab8752e305 | patch -p5
|
|
||||||
# cd ../../../..
|
|
||||||
git add <new romio>
|
|
||||||
# git add ompi/mca/io/romio314
|
|
||||||
# git commit
|
|
||||||
|
|
||||||
|
|
||||||
4. apply post romio 3.1.4 patches
|
|
||||||
# cd ompi/mca/io/romio314
|
|
||||||
# git show 53fd425a6a0843a5de0a8c544901fbf01246ed31 | patch -p5
|
|
||||||
# git show 74a46863ca3d0806050e7a55377a4fbde612f3fe | patch -p5
|
|
||||||
# git show 2b5c52fb05ab54e4fa72e948acabc42e3f979ebd | patch -p5
|
|
||||||
# git show 24a6f1425734eb3e6ffb9e37f510507a4a65ebd1 | patch -p5
|
|
||||||
# git show 23b27c510c2c626a09457abad7699cfc4740d1eb | patch -p5
|
|
||||||
# cd ../../../..
|
|
||||||
# git add ompi/mca/io/romio314
|
|
||||||
# git commit
|
|
||||||
|
|
||||||
|
|
||||||
4. prepare ompi to use new romio
|
|
||||||
|
|
||||||
vi <new romio>/Makefile.am <new romio>/configure.m4 <new romio>/src/Makefile.extra
|
|
||||||
# vi ompi/mca/io/romio314/Makefile.am ompi/mca/io/romio314/configure.m4 ompi/mca/io/romio314/src/Makefile.extra
|
|
||||||
git add <new romio>
|
|
||||||
# git add ompi/mca/io/romio314
|
|
||||||
# git commit
|
|
||||||
|
|
||||||
|
|
||||||
5. remove old romio
|
|
||||||
|
|
||||||
git rm -r <old romio>
|
|
||||||
# git rm -r ompi/mca/io/romio
|
|
||||||
# git commit
|
|
||||||
rm -rf <old romio>
|
|
||||||
# rm -rf ompi/mca/io/romio
|
|
Двоичные данные
ompi/mca/io/romio314/romio/doc/users-guide.pdf
Двоичные данные
ompi/mca/io/romio314/romio/doc/users-guide.pdf
Двоичный файл не отображается.
@ -1,4 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
LIBS="@LIBS@"
|
|
||||||
MPI_OFFSET_TYPE="@MPI_OFFSET_TYPE@"
|
|
||||||
FORTRAN_MPI_OFFSET="@FORTRAN_MPI_OFFSET@"
|
|
@ -11,6 +11,8 @@
|
|||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
# Copyright (c) 2010-2015 Cisco Systems, Inc. All rights reserved.
|
# Copyright (c) 2010-2015 Cisco Systems, Inc. All rights reserved.
|
||||||
# Copyright (c) 2017 IBM Corporation. All rights reserved.
|
# Copyright (c) 2017 IBM Corporation. All rights reserved.
|
||||||
|
# Copyright (c) 2017 Research Organization for Information Science
|
||||||
|
# and Technology (RIST). All rights reserved.
|
||||||
# $COPYRIGHT$
|
# $COPYRIGHT$
|
||||||
#
|
#
|
||||||
# Additional copyrights may follow
|
# Additional copyrights may follow
|
||||||
@ -23,7 +25,7 @@ EXTRA_DIST = autogen.subdirs
|
|||||||
sources =
|
sources =
|
||||||
include src/Makefile.extra
|
include src/Makefile.extra
|
||||||
|
|
||||||
if MCA_io_romio314_SHOULD_BUILD
|
if MCA_io_romio321_SHOULD_BUILD
|
||||||
# Need to set both SUBDIRS and DIST_SUBDIRS due to oddities with AM
|
# Need to set both SUBDIRS and DIST_SUBDIRS due to oddities with AM
|
||||||
SUBDIRS = romio
|
SUBDIRS = romio
|
||||||
DIST_SUBDIRS = romio
|
DIST_SUBDIRS = romio
|
||||||
@ -33,13 +35,13 @@ endif
|
|||||||
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
# mca_<type>_<name>.la (for DSO builds) or libmca_<type>_<name>.la
|
||||||
# (for static builds).
|
# (for static builds).
|
||||||
|
|
||||||
if MCA_BUILD_ompi_io_romio314_DSO
|
if MCA_BUILD_ompi_io_romio321_DSO
|
||||||
lib =
|
lib =
|
||||||
lib_sources =
|
lib_sources =
|
||||||
component = mca_io_romio314.la
|
component = mca_io_romio321.la
|
||||||
component_sources = $(sources)
|
component_sources = $(sources)
|
||||||
else
|
else
|
||||||
lib = libmca_io_romio314.la
|
lib = libmca_io_romio321.la
|
||||||
lib_sources = $(sources)
|
lib_sources = $(sources)
|
||||||
component =
|
component =
|
||||||
component_sources =
|
component_sources =
|
||||||
@ -49,14 +51,13 @@ libs = romio/libromio_dist.la
|
|||||||
|
|
||||||
mcacomponentdir = $(ompilibdir)
|
mcacomponentdir = $(ompilibdir)
|
||||||
mcacomponent_LTLIBRARIES = $(component)
|
mcacomponent_LTLIBRARIES = $(component)
|
||||||
mca_io_romio314_la_SOURCES = $(component_sources)
|
mca_io_romio321_la_SOURCES = $(component_sources)
|
||||||
mca_io_romio314_la_LIBADD = $(top_builddir)/ompi/lib@OMPI_LIBMPI_NAME@.la \
|
mca_io_romio321_la_LIBADD = $(libs)
|
||||||
$(libs)
|
mca_io_romio321_la_DEPENDENCIES = $(libs)
|
||||||
mca_io_romio314_la_DEPENDENCIES = $(libs)
|
mca_io_romio321_la_LDFLAGS = -module -avoid-version
|
||||||
mca_io_romio314_la_LDFLAGS = -module -avoid-version
|
|
||||||
|
|
||||||
noinst_LTLIBRARIES = $(lib)
|
noinst_LTLIBRARIES = $(lib)
|
||||||
libmca_io_romio314_la_SOURCES = $(lib_sources)
|
libmca_io_romio321_la_SOURCES = $(lib_sources)
|
||||||
libmca_io_romio314_la_LIBADD = $(libs)
|
libmca_io_romio321_la_LIBADD = $(libs)
|
||||||
libmca_io_romio314_la_DEPENDENCIES = $(libs)
|
libmca_io_romio321_la_DEPENDENCIES = $(libs)
|
||||||
libmca_io_romio314_la_LDFLAGS = -module -avoid-version
|
libmca_io_romio321_la_LDFLAGS = -module -avoid-version
|
39
ompi/mca/io/romio321/REFRESH_NOTES.txt
Обычный файл
39
ompi/mca/io/romio321/REFRESH_NOTES.txt
Обычный файл
@ -0,0 +1,39 @@
|
|||||||
|
1. prepare new romio directory
|
||||||
|
cp -a <old romio> <new romio>
|
||||||
|
# cp -a ompi/mca/io/romio ompi/mca/io/romio321
|
||||||
|
rm -rf <new romio>/romio
|
||||||
|
# rm -rf ompi/mca/io/romio321/romio
|
||||||
|
git add <new romio>
|
||||||
|
# git add ompi/mca/io/romio321
|
||||||
|
# git commit
|
||||||
|
|
||||||
|
2. import new romio
|
||||||
|
cp -a <mpich dir>/src/mpi/romio <new romio>
|
||||||
|
# cp -a /.../mpich-3.2b1/src/mpi/romio ompi/mca/io/romio321
|
||||||
|
git add <new romio>
|
||||||
|
# git add ompi/mca/io/romio321
|
||||||
|
# git commit
|
||||||
|
|
||||||
|
3. patch romio
|
||||||
|
cd <new romio>
|
||||||
|
# cd ompi/mca/io/romio321
|
||||||
|
# git show 7a7968f02e2bad912426d1535119fb30d881b460 | patch -p5
|
||||||
|
# cd ../../../..
|
||||||
|
git add <new romio>
|
||||||
|
# git add ompi/mca/io/romio321
|
||||||
|
# git commit
|
||||||
|
|
||||||
|
4. prepare ompi to use new romio
|
||||||
|
vi <new romio>/Makefile.am <new romio>/configure.m4 <new romio>/src/Makefile.extra
|
||||||
|
# vi ompi/mca/io/romio321/Makefile.am ompi/mca/io/romio321/configure.m4 ompi/mca/io/romio321/src/Makefile.extra
|
||||||
|
git add <new romio>
|
||||||
|
# git add ompi/mca/io/romio321
|
||||||
|
# git commit
|
||||||
|
|
||||||
|
|
||||||
|
5. remove old romio
|
||||||
|
git rm -r <old romio>
|
||||||
|
# git rm -r ompi/mca/io/romio
|
||||||
|
# git commit
|
||||||
|
rm -rf <old romio>
|
||||||
|
# rm -rf ompi/mca/io/romio
|
@ -11,7 +11,7 @@
|
|||||||
# Copyright (c) 2004-2005 The Regents of the University of California.
|
# Copyright (c) 2004-2005 The Regents of the University of California.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
# Copyright (c) 2008-2015 Cisco Systems, Inc. All rights reserved.
|
# Copyright (c) 2008-2015 Cisco Systems, Inc. All rights reserved.
|
||||||
# Copyright (c) 2015 Research Organization for Information Science
|
# Copyright (c) 2015-2017 Research Organization for Information Science
|
||||||
# and Technology (RIST). All rights reserved.
|
# and Technology (RIST). All rights reserved.
|
||||||
# $COPYRIGHT$
|
# $COPYRIGHT$
|
||||||
#
|
#
|
||||||
@ -20,24 +20,24 @@
|
|||||||
# $HEADER$
|
# $HEADER$
|
||||||
#
|
#
|
||||||
|
|
||||||
AC_DEFUN([MCA_ompi_io_romio314_POST_CONFIG], [
|
AC_DEFUN([MCA_ompi_io_romio321_POST_CONFIG], [
|
||||||
AM_CONDITIONAL([MCA_io_romio314_SHOULD_BUILD], [test $1 -eq 1])
|
AM_CONDITIONAL([MCA_io_romio321_SHOULD_BUILD], [test $1 -eq 1])
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
# MCA_io_romio314_CONFIG([action-if-found], [action-if-not-found])
|
# MCA_io_romio321_CONFIG([action-if-found], [action-if-not-found])
|
||||||
# -----------------------------------------------------------
|
# -----------------------------------------------------------
|
||||||
AC_DEFUN([MCA_ompi_io_romio314_CONFIG],[
|
AC_DEFUN([MCA_ompi_io_romio321_CONFIG],[
|
||||||
AC_CONFIG_FILES([ompi/mca/io/romio314/Makefile])
|
AC_CONFIG_FILES([ompi/mca/io/romio321/Makefile])
|
||||||
|
|
||||||
OPAL_VAR_SCOPE_PUSH([io_romio314_flags io_romio314_flags_define io_romio314_happy io_romio314_save_LIBS])
|
OPAL_VAR_SCOPE_PUSH([io_romio321_flags io_romio321_flags_define io_romio321_happy io_romio321_save_LIBS])
|
||||||
AC_ARG_ENABLE([io-romio],
|
AC_ARG_ENABLE([io-romio],
|
||||||
[AC_HELP_STRING([--disable-io-romio],
|
[AC_HELP_STRING([--disable-io-romio],
|
||||||
[Disable the ROMIO MPI-IO component])])
|
[Disable the ROMIO MPI-IO component])])
|
||||||
AC_ARG_WITH([io-romio-flags],
|
AC_ARG_WITH([io-romio-flags],
|
||||||
[AC_HELP_STRING([--with-io-romio-flags=FLAGS],
|
[AC_HELP_STRING([--with-io-romio-flags=FLAGS],
|
||||||
[Pass FLAGS to the ROMIO distribution configuration script])])
|
[Pass FLAGS to the ROMIO distribution configuration script])])
|
||||||
AC_DEFINE_UNQUOTED([MCA_io_romio314_USER_CONFIGURE_FLAGS], ["$with_io_romio_flags"], [Set of user-defined configure flags given to ROMIOs configure script via --with-io-romio-flags])
|
AC_DEFINE_UNQUOTED([MCA_io_romio321_USER_CONFIGURE_FLAGS], ["$with_io_romio_flags"], [Set of user-defined configure flags given to ROMIOs configure script via --with-io-romio-flags])
|
||||||
AC_MSG_CHECKING([if want ROMIO component])
|
AC_MSG_CHECKING([if want ROMIO component])
|
||||||
AS_IF([test "$enable_io_romio" = "no"],
|
AS_IF([test "$enable_io_romio" = "no"],
|
||||||
[AC_MSG_RESULT([no])
|
[AC_MSG_RESULT([no])
|
||||||
@ -53,50 +53,50 @@ AC_DEFUN([MCA_ompi_io_romio314_CONFIG],[
|
|||||||
[AC_MSG_RESULT([yes])
|
[AC_MSG_RESULT([yes])
|
||||||
|
|
||||||
AS_IF([test -n "$with_io_romio_flags" && test "$with_io_romio_flags" != "no"],
|
AS_IF([test -n "$with_io_romio_flags" && test "$with_io_romio_flags" != "no"],
|
||||||
[io_romio314_flags="$with_io_romio_flags $io_romio314_flags"],
|
[io_romio321_flags="$with_io_romio_flags $io_romio321_flags"],
|
||||||
[io_romio314_flags=])
|
[io_romio321_flags=])
|
||||||
# If ROMIO is going to end up in a DSO, all we need is
|
# If ROMIO is going to end up in a DSO, all we need is
|
||||||
# shared library-ized objects, as we're only building a
|
# shared library-ized objects, as we're only building a
|
||||||
# DSO (which is always shared). Otherwise, build with
|
# DSO (which is always shared). Otherwise, build with
|
||||||
# same flags as OMPI, as we might need any combination of
|
# same flags as OMPI, as we might need any combination of
|
||||||
# shared and static-ized objects...
|
# shared and static-ized objects...
|
||||||
AS_IF([test "$compile_mode" = "dso"],
|
AS_IF([test "$compile_mode" = "dso"],
|
||||||
[io_romio314_shared=enable
|
[io_romio321_shared=enable
|
||||||
io_romio314_static=disable],
|
io_romio321_static=disable],
|
||||||
[AS_IF([test "$enable_shared" = "yes"],
|
[AS_IF([test "$enable_shared" = "yes"],
|
||||||
[io_romio314_shared=enable],
|
[io_romio321_shared=enable],
|
||||||
[io_romio314_shared=disable])
|
[io_romio321_shared=disable])
|
||||||
AS_IF([test "$enable_static" = "yes"],
|
AS_IF([test "$enable_static" = "yes"],
|
||||||
[io_romio314_static=enable],
|
[io_romio321_static=enable],
|
||||||
[io_romio314_static=disable])])
|
[io_romio321_static=disable])])
|
||||||
AS_IF([test -n "$prefix" && test "$prefix" != "NONE"],
|
AS_IF([test -n "$prefix" && test "$prefix" != "NONE"],
|
||||||
[io_romio314_prefix_arg="--prefix=$prefix"],
|
[io_romio321_prefix_arg="--prefix=$prefix"],
|
||||||
[io_romio314_prefix_arg=])
|
[io_romio321_prefix_arg=])
|
||||||
|
|
||||||
AS_IF([test "$cross_compiling" = "yes"],
|
AS_IF([test "$cross_compiling" = "yes"],
|
||||||
[AS_IF([test ! -z $build], [io_romio314_flags="$io_romio314_flags --build=$build"])
|
[AS_IF([test ! -z $build], [io_romio321_flags="$io_romio321_flags --build=$build"])
|
||||||
AS_IF([test ! -z $host], [io_romio314_flags="$io_romio314_flags --host=$host"])
|
AS_IF([test ! -z $host], [io_romio321_flags="$io_romio321_flags --host=$host"])
|
||||||
AS_IF([test ! -z $target], [io_romio314_flags="$io_romio314_flags --target=$target"])])
|
AS_IF([test ! -z $target], [io_romio321_flags="$io_romio321_flags --target=$target"])])
|
||||||
io_romio314_flags_define="$io_romio314_flags FROM_OMPI=yes CC='$CC' CFLAGS='$CFLAGS -D__EXTENSIONS__' CPPFLAGS='$CPPFLAGS' FFLAGS='$FFLAGS' LDFLAGS='$LDFLAGS' --$io_romio314_shared-shared --$io_romio314_static-static $io_romio314_flags $io_romio314_prefix_arg --disable-aio --disable-weak-symbols --enable-strict --disable-f77 --disable-f90"
|
io_romio321_flags_define="$io_romio321_flags FROM_OMPI=yes CC='$CC' CFLAGS='$CFLAGS -D__EXTENSIONS__' CPPFLAGS='$CPPFLAGS' FFLAGS='$FFLAGS' LDFLAGS='$LDFLAGS' --$io_romio321_shared-shared --$io_romio321_static-static $io_romio321_flags $io_romio321_prefix_arg --disable-aio --disable-weak-symbols --enable-strict --disable-f77 --disable-f90"
|
||||||
AC_DEFINE_UNQUOTED([MCA_io_romio314_COMPLETE_CONFIGURE_FLAGS], ["$io_romio314_flags_define"], [Complete set of command line arguments given to ROMIOs configure script])
|
AC_DEFINE_UNQUOTED([MCA_io_romio321_COMPLETE_CONFIGURE_FLAGS], ["$io_romio321_flags_define"], [Complete set of command line arguments given to ROMIOs configure script])
|
||||||
|
|
||||||
io_romio314_flags="$io_romio314_flags FROM_OMPI=yes CC="'"'"$CC"'"'" CFLAGS="'"'"$CFLAGS -D__EXTENSIONS__"'"'" CPPFLAGS="'"'"$CPPFLAGS"'"'" FFLAGS="'"'"$FFLAGS"'"'" LDFLAGS="'"'"$LDFLAGS"'"'" --$io_romio314_shared-shared --$io_romio314_static-static $io_romio314_flags $io_romio314_prefix_arg --disable-aio --disable-weak-symbols --enable-strict --disable-f77 --disable-f90"
|
io_romio321_flags="$io_romio321_flags FROM_OMPI=yes CC="'"'"$CC"'"'" CFLAGS="'"'"$CFLAGS -D__EXTENSIONS__"'"'" CPPFLAGS="'"'"$CPPFLAGS"'"'" FFLAGS="'"'"$FFLAGS"'"'" LDFLAGS="'"'"$LDFLAGS"'"'" --$io_romio321_shared-shared --$io_romio321_static-static $io_romio321_flags $io_romio321_prefix_arg --disable-aio --disable-weak-symbols --enable-strict --disable-f77 --disable-f90"
|
||||||
|
|
||||||
opal_show_subtitle "Configuring ROMIO distribution"
|
opal_show_subtitle "Configuring ROMIO distribution"
|
||||||
OPAL_CONFIG_SUBDIR([ompi/mca/io/romio314/romio],
|
OPAL_CONFIG_SUBDIR([ompi/mca/io/romio321/romio],
|
||||||
[$io_romio314_flags],
|
[$io_romio321_flags],
|
||||||
[io_romio314_happy=1], [io_romio314_happy=0])
|
[io_romio321_happy=1], [io_romio321_happy=0])
|
||||||
|
|
||||||
AS_IF([test "$io_romio314_happy" = "1"],
|
AS_IF([test "$io_romio321_happy" = "1"],
|
||||||
[ # grab the libraries list from ROMIO. We don't
|
[ # grab the libraries list from ROMIO. We don't
|
||||||
# need this for building the component, as libtool
|
# need this for building the component, as libtool
|
||||||
# will figure that part out. But we do need it for
|
# will figure that part out. But we do need it for
|
||||||
# the wrapper settings
|
# the wrapper settings
|
||||||
io_romio314_save_LIBS="$LIBS"
|
io_romio321_save_LIBS="$LIBS"
|
||||||
LIBS=
|
LIBS=
|
||||||
. ompi/mca/io/romio314/romio/localdefs
|
. ompi/mca/io/romio321/romio/localdefs
|
||||||
io_romio314_LIBS="$LIBS"
|
io_romio321_LIBS="$LIBS"
|
||||||
LIBS="$io_romio314_save_LIBS"
|
LIBS="$io_romio321_save_LIBS"
|
||||||
|
|
||||||
echo "ROMIO distribution configured successfully"
|
echo "ROMIO distribution configured successfully"
|
||||||
$1],
|
$1],
|
@ -1,35 +1,16 @@
|
|||||||
diff --git a/ompi/mca/io/romio32b1/romio/.config_params b/ompi/mca/io/romio32b1/romio/.config_params
|
diff --git a/ompi/mca/io/romio321/romio/.config_params b/ompi/mca/io/romio321/romio/.config_params
|
||||||
index 96f735f..fcc2f91 100644
|
index 96f735f..fcc2f91 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/.config_params
|
--- a/ompi/mca/io/romio321/romio/.config_params
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/.config_params
|
+++ b/ompi/mca/io/romio321/romio/.config_params
|
||||||
@@ -36,3 +36,4 @@ __sgi_mpi
|
@@ -36,3 +36,4 @@ __sgi_mpi
|
||||||
__hp_mpi
|
__hp_mpi
|
||||||
__cray_mpi
|
__cray_mpi
|
||||||
__lam_mpi
|
__lam_mpi
|
||||||
+__open_mpi
|
+__open_mpi
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/.gitignore b/ompi/mca/io/romio32b1/romio/.gitignore
|
diff --git a/ompi/mca/io/romio321/romio/Makefile.am b/ompi/mca/io/romio321/romio/Makefile.am
|
||||||
new file mode 100644
|
|
||||||
index 0000000..28f1e98
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/.gitignore
|
|
||||||
@@ -0,0 +1,13 @@
|
|
||||||
+/Makefile
|
|
||||||
+/.deps
|
|
||||||
+/*.bb
|
|
||||||
+/*.bbg
|
|
||||||
+/*.gcda
|
|
||||||
+/*.gcno
|
|
||||||
+/.libs
|
|
||||||
+/.libstamp*
|
|
||||||
+/*.lo
|
|
||||||
+/.*-cache
|
|
||||||
+.state-cache
|
|
||||||
+version.m4
|
|
||||||
+confdb/config.rpath
|
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/Makefile.am b/ompi/mca/io/romio32b1/romio/Makefile.am
|
|
||||||
index b9d4e25..69d7014 100644
|
index b9d4e25..69d7014 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/Makefile.am
|
--- a/ompi/mca/io/romio321/romio/Makefile.am
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/Makefile.am
|
+++ b/ompi/mca/io/romio321/romio/Makefile.am
|
||||||
@@ -1,9 +1,28 @@
|
@@ -1,9 +1,28 @@
|
||||||
# -*- Mode: Makefile; -*-
|
# -*- Mode: Makefile; -*-
|
||||||
+# Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
|
+# Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
|
||||||
@ -52,7 +33,7 @@ index b9d4e25..69d7014 100644
|
|||||||
# (C) 2011 by Argonne National Laboratory.
|
# (C) 2011 by Argonne National Laboratory.
|
||||||
# See COPYRIGHT in top-level directory.
|
# See COPYRIGHT in top-level directory.
|
||||||
#
|
#
|
||||||
|
|
||||||
+# OMPI: include a top level makefile with some options
|
+# OMPI: include a top level makefile with some options
|
||||||
+include $(top_srcdir)/Makefile.options
|
+include $(top_srcdir)/Makefile.options
|
||||||
+
|
+
|
||||||
@ -60,12 +41,12 @@ index b9d4e25..69d7014 100644
|
|||||||
## 1) that ROMIO is being embedded within the MPI library, as in MPICH or Open
|
## 1) that ROMIO is being embedded within the MPI library, as in MPICH or Open
|
||||||
## MPI
|
## MPI
|
||||||
@@ -17,7 +36,6 @@ ACLOCAL_AMFLAGS = -I confdb
|
@@ -17,7 +36,6 @@ ACLOCAL_AMFLAGS = -I confdb
|
||||||
include_HEADERS =
|
include_HEADERS =
|
||||||
nodist_include_HEADERS =
|
nodist_include_HEADERS =
|
||||||
noinst_HEADERS =
|
noinst_HEADERS =
|
||||||
-AM_CPPFLAGS =
|
-AM_CPPFLAGS =
|
||||||
EXTRA_DIST =
|
EXTRA_DIST =
|
||||||
SUFFIXES =
|
SUFFIXES =
|
||||||
doc1_src_txt =
|
doc1_src_txt =
|
||||||
@@ -46,7 +64,9 @@ AM_CPPFLAGS += $(MPI_H_INCLUDE)
|
@@ -46,7 +64,9 @@ AM_CPPFLAGS += $(MPI_H_INCLUDE)
|
||||||
# handle the "include" directory here
|
# handle the "include" directory here
|
||||||
@ -75,9 +56,9 @@ index b9d4e25..69d7014 100644
|
|||||||
+# Open MPI: do not install mpio.h
|
+# Open MPI: do not install mpio.h
|
||||||
+noinst_HEADERS += include/mpio.h
|
+noinst_HEADERS += include/mpio.h
|
||||||
+noinst_HEADERS += include/io_romio_conv.h
|
+noinst_HEADERS += include/io_romio_conv.h
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -63,8 +83,8 @@ EXTRA_DIST += autogen.sh
|
@@ -63,8 +83,8 @@ EXTRA_DIST += autogen.sh
|
||||||
if BUILD_ROMIO_EMBEDDED
|
if BUILD_ROMIO_EMBEDDED
|
||||||
# Build a libtool convenience library that the enclosing MPI implementation can
|
# Build a libtool convenience library that the enclosing MPI implementation can
|
||||||
@ -86,72 +67,13 @@ index b9d4e25..69d7014 100644
|
|||||||
-libromio_la_SOURCES = $(romio_mpi_sources) $(romio_other_sources) $(glue_sources)
|
-libromio_la_SOURCES = $(romio_mpi_sources) $(romio_other_sources) $(glue_sources)
|
||||||
+noinst_LTLIBRARIES = libromio_dist.la
|
+noinst_LTLIBRARIES = libromio_dist.la
|
||||||
+libromio_dist_la_SOURCES = $(romio_mpi_sources) $(romio_other_sources) $(glue_sources)
|
+libromio_dist_la_SOURCES = $(romio_mpi_sources) $(romio_other_sources) $(glue_sources)
|
||||||
|
|
||||||
## NOTE: ROMIO's old build system builds a bunch of _foo.o objects that contain
|
## NOTE: ROMIO's old build system builds a bunch of _foo.o objects that contain
|
||||||
## PMPI_ implementations as well as calls to only other PMPI routines. In
|
## PMPI_ implementations as well as calls to only other PMPI routines. In
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/Makefile.options b/ompi/mca/io/romio32b1/romio/Makefile.options
|
diff --git a/ompi/mca/io/romio321/romio/adio/Makefile.mk b/ompi/mca/io/romio321/romio/adio/Makefile.mk
|
||||||
new file mode 100644
|
|
||||||
index 0000000..0b72829
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/Makefile.options
|
|
||||||
@@ -0,0 +1,36 @@
|
|
||||||
+# -*- makefile -*-
|
|
||||||
+#
|
|
||||||
+# Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
||||||
+# University Research and Technology
|
|
||||||
+# Corporation. All rights reserved.
|
|
||||||
+# Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
+# of Tennessee Research Foundation. All rights
|
|
||||||
+# reserved.
|
|
||||||
+# Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
||||||
+# University of Stuttgart. All rights reserved.
|
|
||||||
+# Copyright (c) 2004-2005 The Regents of the University of California.
|
|
||||||
+# All rights reserved.
|
|
||||||
+# $COPYRIGHT$
|
|
||||||
+#
|
|
||||||
+# Additional copyrights may follow
|
|
||||||
+#
|
|
||||||
+# $HEADER$
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+AUTOMAKE_OPTIONS = foreign dist-bzip2
|
|
||||||
+
|
|
||||||
+# $(OMPI_TOP_SRCDIR) - mca_base_param.h
|
|
||||||
+# $(OMPI_TOP_SRCDIR)/opal/include - opal_config_bottom.h
|
|
||||||
+# $(OMPI_TOP_BUILDDIR)/opal/include - opal_config.h
|
|
||||||
+# $(OMPI_TOP_BUILDDIR)/ompi/include - mpi.h
|
|
||||||
+# $(top_srcdir)/include - vpath support
|
|
||||||
+# $(top_srcdir)/adio/include - vpath support
|
|
||||||
+
|
|
||||||
+AM_CPPFLAGS = \
|
|
||||||
+ -DOMPI_BUILDING=1 \
|
|
||||||
+ -I$(OMPI_TOP_SRCDIR) \
|
|
||||||
+ -I$(OMPI_TOP_SRCDIR)/opal/include \
|
|
||||||
+ -I$(OMPI_TOP_BUILDDIR)/opal/include \
|
|
||||||
+ -I$(OMPI_TOP_BUILDDIR)/ompi/include \
|
|
||||||
+ -I$(top_srcdir)/include \
|
|
||||||
+ -I$(top_srcdir)/adio/include
|
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/README_OMPI b/ompi/mca/io/romio32b1/romio/README_OMPI
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..6dba412
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/README_OMPI
|
|
||||||
@@ -0,0 +1,11 @@
|
|
||||||
+Please note that this is *NOT* a vanilla MPICH v3.2b1
|
|
||||||
+distribution of the ROMIO package from Argonne National Labs.
|
|
||||||
+Various customizations had to be applied to the configuration process.
|
|
||||||
+More to the point -- if replace this copy of ROMIO with a newer version,
|
|
||||||
+it will likely not work. :-(
|
|
||||||
+
|
|
||||||
+- The Open MPI Team
|
|
||||||
+
|
|
||||||
+-----------------------------------------------------------------------------
|
|
||||||
+
|
|
||||||
+Local modifications are in ompi.patch
|
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/adio/Makefile.mk b/ompi/mca/io/romio32b1/romio/adio/Makefile.mk
|
|
||||||
index 505d518..ffc05cb 100644
|
index 505d518..ffc05cb 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/adio/Makefile.mk
|
--- a/ompi/mca/io/romio321/romio/adio/Makefile.mk
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/adio/Makefile.mk
|
+++ b/ompi/mca/io/romio321/romio/adio/Makefile.mk
|
||||||
@@ -20,6 +20,7 @@ noinst_HEADERS += \
|
@@ -20,6 +20,7 @@ noinst_HEADERS += \
|
||||||
adio/include/mpipr.h \
|
adio/include/mpipr.h \
|
||||||
adio/include/mpiu_greq.h \
|
adio/include/mpiu_greq.h \
|
||||||
@ -159,13 +81,13 @@ index 505d518..ffc05cb 100644
|
|||||||
+ adio/include/romioconf-undefs.h \
|
+ adio/include/romioconf-undefs.h \
|
||||||
adio/include/mpiu_external32.h \
|
adio/include/mpiu_external32.h \
|
||||||
adio/include/hint_fns.h
|
adio/include/hint_fns.h
|
||||||
|
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/adio/common/ad_end.c b/ompi/mca/io/romio32b1/romio/adio/common/ad_end.c
|
diff --git a/ompi/mca/io/romio321/romio/adio/common/ad_end.c b/ompi/mca/io/romio321/romio/adio/common/ad_end.c
|
||||||
index ea4dfeb..066c65c 100644
|
index ea4dfeb..066c65c 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/adio/common/ad_end.c
|
--- a/ompi/mca/io/romio321/romio/adio/common/ad_end.c
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/adio/common/ad_end.c
|
+++ b/ompi/mca/io/romio321/romio/adio/common/ad_end.c
|
||||||
@@ -16,7 +16,12 @@ void ADIO_End(int *error_code)
|
@@ -16,7 +16,12 @@ void ADIO_End(int *error_code)
|
||||||
|
|
||||||
/* if a default errhandler was set on MPI_FILE_NULL then we need to ensure
|
/* if a default errhandler was set on MPI_FILE_NULL then we need to ensure
|
||||||
* that our reference to that errhandler is released */
|
* that our reference to that errhandler is released */
|
||||||
+/* Open MPI: The call to PMPI_File_set_errhandler has to be done in romio/src/io_romio_file_open.c
|
+/* Open MPI: The call to PMPI_File_set_errhandler has to be done in romio/src/io_romio_file_open.c
|
||||||
@ -174,50 +96,50 @@ index ea4dfeb..066c65c 100644
|
|||||||
+#if 0
|
+#if 0
|
||||||
PMPI_File_set_errhandler(MPI_FILE_NULL, MPI_ERRORS_RETURN);
|
PMPI_File_set_errhandler(MPI_FILE_NULL, MPI_ERRORS_RETURN);
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
/* delete the flattened datatype list */
|
/* delete the flattened datatype list */
|
||||||
curr = ADIOI_Flatlist;
|
curr = ADIOI_Flatlist;
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/adio/common/ad_iread_coll.c b/ompi/mca/io/romio32b1/romio/adio/common/ad_iread_coll.c
|
diff --git a/ompi/mca/io/romio321/romio/adio/common/ad_iread_coll.c b/ompi/mca/io/romio321/romio/adio/common/ad_iread_coll.c
|
||||||
index b1311e6..6ae4359 100644
|
index 2ec23fb..8487c25 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/adio/common/ad_iread_coll.c
|
--- a/ompi/mca/io/romio321/romio/adio/common/ad_iread_coll.c
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/adio/common/ad_iread_coll.c
|
+++ b/ompi/mca/io/romio321/romio/adio/common/ad_iread_coll.c
|
||||||
@@ -16,6 +16,8 @@
|
@@ -16,6 +16,8 @@
|
||||||
#include "mpe.h"
|
#include "mpe.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
+#ifdef HAVE_MPI_GREQUEST_EXTENSIONS
|
+#ifdef HAVE_MPI_GREQUEST_EXTENSIONS
|
||||||
+
|
+
|
||||||
/* ADIOI_GEN_IreadStridedColl */
|
/* ADIOI_GEN_IreadStridedColl */
|
||||||
struct ADIOI_GEN_IreadStridedColl_vars {
|
struct ADIOI_GEN_IreadStridedColl_vars {
|
||||||
/* requests */
|
/* requests */
|
||||||
@@ -1315,3 +1317,4 @@ static int ADIOI_GEN_irc_wait_fn(int count, void **array_of_states,
|
@@ -1340,3 +1342,4 @@ static int ADIOI_GEN_irc_wait_fn(int count, void **array_of_states,
|
||||||
return errcode;
|
return errcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
+#endif /* HAVE_MPI_GREQUEST_EXTENSIONS */
|
+#endif /* HAVE_MPI_GREQUEST_EXTENSIONS */
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/adio/common/ad_iwrite_coll.c b/ompi/mca/io/romio32b1/romio/adio/common/ad_iwrite_coll.c
|
diff --git a/ompi/mca/io/romio321/romio/adio/common/ad_iwrite_coll.c b/ompi/mca/io/romio321/romio/adio/common/ad_iwrite_coll.c
|
||||||
index b456ec4..9178a8d 100644
|
index d275f78..9b27b42 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/adio/common/ad_iwrite_coll.c
|
--- a/ompi/mca/io/romio321/romio/adio/common/ad_iwrite_coll.c
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/adio/common/ad_iwrite_coll.c
|
+++ b/ompi/mca/io/romio321/romio/adio/common/ad_iwrite_coll.c
|
||||||
@@ -13,6 +13,8 @@
|
@@ -13,6 +13,8 @@
|
||||||
#include "mpe.h"
|
#include "mpe.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
+#ifdef HAVE_MPI_GREQUEST_EXTENSIONS
|
+#ifdef HAVE_MPI_GREQUEST_EXTENSIONS
|
||||||
+
|
+
|
||||||
/* ADIOI_GEN_IwriteStridedColl */
|
/* ADIOI_GEN_IwriteStridedColl */
|
||||||
struct ADIOI_GEN_IwriteStridedColl_vars {
|
struct ADIOI_GEN_IwriteStridedColl_vars {
|
||||||
/* requests */
|
/* requests */
|
||||||
@@ -1539,3 +1541,4 @@ static int ADIOI_GEN_iwc_wait_fn(int count, void **array_of_states,
|
@@ -1565,3 +1567,4 @@ static int ADIOI_GEN_iwc_wait_fn(int count, void **array_of_states,
|
||||||
return errcode;
|
return errcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
+#endif /* HAVE_MPI_GREQUEST_EXTENSIONS */
|
+#endif /* HAVE_MPI_GREQUEST_EXTENSIONS */
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/adio/include/adioi.h b/ompi/mca/io/romio32b1/romio/adio/include/adioi.h
|
diff --git a/ompi/mca/io/romio321/romio/adio/include/adioi.h b/ompi/mca/io/romio321/romio/adio/include/adioi.h
|
||||||
index b20ca82..73dad0d 100644
|
index 0e91ead..13c0f25 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/adio/include/adioi.h
|
--- a/ompi/mca/io/romio321/romio/adio/include/adioi.h
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/adio/include/adioi.h
|
+++ b/ompi/mca/io/romio321/romio/adio/include/adioi.h
|
||||||
@@ -429,18 +429,26 @@ void ADIOI_GEN_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
@@ -440,18 +440,26 @@ void ADIOI_GEN_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
@ -242,63 +164,12 @@ index b20ca82..73dad0d 100644
|
|||||||
+#define ADIOI_GEN_IwriteStridedColl NULL
|
+#define ADIOI_GEN_IwriteStridedColl NULL
|
||||||
+#endif
|
+#endif
|
||||||
void ADIOI_Calc_my_off_len(ADIO_File fd, int bufcount, MPI_Datatype
|
void ADIOI_Calc_my_off_len(ADIO_File fd, int bufcount, MPI_Datatype
|
||||||
datatype, int file_ptr_type, ADIO_Offset
|
datatype, int file_ptr_type, ADIO_Offset
|
||||||
offset, ADIO_Offset **offset_list_ptr, ADIO_Offset
|
offset, ADIO_Offset **offset_list_ptr, ADIO_Offset
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/adio/include/romioconf-undefs.h b/ompi/mca/io/romio32b1/romio/adio/include/romioconf-undefs.h
|
diff --git a/ompi/mca/io/romio321/romio/configure.ac b/ompi/mca/io/romio321/romio/configure.ac
|
||||||
new file mode 100644
|
index 93f8b09..0b85d53 100644
|
||||||
index 0000000..5c21607
|
--- a/ompi/mca/io/romio321/romio/configure.ac
|
||||||
--- /dev/null
|
+++ b/ompi/mca/io/romio321/romio/configure.ac
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/adio/include/romioconf-undefs.h
|
|
||||||
@@ -0,0 +1,45 @@
|
|
||||||
+/*
|
|
||||||
+ * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
||||||
+ * University Research and Technology
|
|
||||||
+ * Corporation. All rights reserved.
|
|
||||||
+ * Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
+ * of Tennessee Research Foundation. All rights
|
|
||||||
+ * reserved.
|
|
||||||
+ * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
||||||
+ * University of Stuttgart. All rights reserved.
|
|
||||||
+ * Copyright (c) 2004-2005 The Regents of the University of California.
|
|
||||||
+ * All rights reserved.
|
|
||||||
+ * $COPYRIGHT$
|
|
||||||
+ *
|
|
||||||
+ * Additional copyrights may follow
|
|
||||||
+ *
|
|
||||||
+ * $HEADER$
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#ifndef ROMIO_CONF_UNDEFS_H
|
|
||||||
+#define ROMIO_CONF_UNDEFS_H
|
|
||||||
+
|
|
||||||
+/* Need to add some undefs here so that we don't conflict with the
|
|
||||||
+ * main ompi_config.h. Arrgh. Stupid autoconf not giving us the option
|
|
||||||
+ * to not define these macros... grumble...
|
|
||||||
+ */
|
|
||||||
+#if defined(PACKAGE_BUGREPORT)
|
|
||||||
+#undef PACKAGE_BUGREPORT
|
|
||||||
+#endif
|
|
||||||
+#if defined(PACKAGE_NAME)
|
|
||||||
+#undef PACKAGE_NAME
|
|
||||||
+#endif
|
|
||||||
+#if defined(PACKAGE_STRING)
|
|
||||||
+#undef PACKAGE_STRING
|
|
||||||
+#endif
|
|
||||||
+#if defined(PACKAGE_TARNAME)
|
|
||||||
+#undef PACKAGE_TARNAME
|
|
||||||
+#endif
|
|
||||||
+#if defined(PACKAGE_VERSION)
|
|
||||||
+#undef PACKAGE_VERSION
|
|
||||||
+#endif
|
|
||||||
+#if defined(PACKAGE_URL)
|
|
||||||
+#undef PACKAGE_URL
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#endif /* ROMIOCONF_UNDEFS_H */
|
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/configure.ac b/ompi/mca/io/romio32b1/romio/configure.ac
|
|
||||||
index f975e1c..4d51a3e 100644
|
|
||||||
--- a/ompi/mca/io/romio32b1/romio/configure.ac
|
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/configure.ac
|
|
||||||
@@ -3,12 +3,21 @@
|
@@ -3,12 +3,21 @@
|
||||||
# autoconf --localdir=../confdb configure.ac
|
# autoconf --localdir=../confdb configure.ac
|
||||||
# (or wherever the confdb is)
|
# (or wherever the confdb is)
|
||||||
@ -307,7 +178,7 @@ index f975e1c..4d51a3e 100644
|
|||||||
+# harmless and are left here solely for the sake of ease of future
|
+# harmless and are left here solely for the sake of ease of future
|
||||||
+# patching/importing.
|
+# patching/importing.
|
||||||
AC_PREREQ([2.63])
|
AC_PREREQ([2.63])
|
||||||
|
|
||||||
-m4_include([version.m4])
|
-m4_include([version.m4])
|
||||||
-dnl 2nd arg is intentionally underquoted
|
-dnl 2nd arg is intentionally underquoted
|
||||||
+# Open MPI: Modifications to this file were done on an "let's do the
|
+# Open MPI: Modifications to this file were done on an "let's do the
|
||||||
@ -327,15 +198,15 @@ index f975e1c..4d51a3e 100644
|
|||||||
@@ -22,7 +31,7 @@ dnl scripts.
|
@@ -22,7 +31,7 @@ dnl scripts.
|
||||||
AC_CONFIG_AUX_DIR([confdb])
|
AC_CONFIG_AUX_DIR([confdb])
|
||||||
AC_CONFIG_MACRO_DIR([confdb])
|
AC_CONFIG_MACRO_DIR([confdb])
|
||||||
|
|
||||||
-AM_INIT_AUTOMAKE([-Wall -Werror -Wno-portability-recursive foreign 1.12.3 silent-rules subdir-objects])
|
-AM_INIT_AUTOMAKE([-Wall -Werror -Wno-portability-recursive foreign 1.12.3 silent-rules subdir-objects])
|
||||||
+AM_INIT_AUTOMAKE([-Wall -Werror -Wno-portability-recursive foreign 1.12 silent-rules subdir-objects])
|
+AM_INIT_AUTOMAKE([-Wall -Werror -Wno-portability-recursive foreign 1.12 silent-rules subdir-objects])
|
||||||
AM_MAINTAINER_MODE([enable])
|
AM_MAINTAINER_MODE([enable])
|
||||||
|
|
||||||
dnl must come before LT_INIT, which AC_REQUIREs AC_PROG_CC
|
dnl must come before LT_INIT, which AC_REQUIREs AC_PROG_CC
|
||||||
@@ -43,12 +52,15 @@ if test -n "$CONFIGURE_ARGS" ; then
|
@@ -43,12 +52,15 @@ if test -n "$CONFIGURE_ARGS" ; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CONFIG_HEADER(adio/include/romioconf.h)
|
AC_CONFIG_HEADER(adio/include/romioconf.h)
|
||||||
+# Open MPI: modified AH_TOP
|
+# Open MPI: modified AH_TOP
|
||||||
AH_TOP([/*
|
AH_TOP([/*
|
||||||
@ -352,7 +223,7 @@ index f975e1c..4d51a3e 100644
|
|||||||
@@ -58,9 +70,37 @@ AH_BOTTOM([
|
@@ -58,9 +70,37 @@ AH_BOTTOM([
|
||||||
#endif /* !defined(ROMIOCONF_H_INCLUDED) */
|
#endif /* !defined(ROMIOCONF_H_INCLUDED) */
|
||||||
])
|
])
|
||||||
|
|
||||||
+# Open MPI: this configure script doesn't seem to define these
|
+# Open MPI: this configure script doesn't seem to define these
|
||||||
+# anywhere, so just do them manually here because "we know better"
|
+# anywhere, so just do them manually here because "we know better"
|
||||||
+# (i.e., Open MPI can be hard-wired to these values).
|
+# (i.e., Open MPI can be hard-wired to these values).
|
||||||
@ -392,7 +263,7 @@ index f975e1c..4d51a3e 100644
|
|||||||
@@ -95,6 +135,10 @@ AC_ARG_VAR([FROM_OMPI],[set to "yes" if building ROMIO inside of Open MPI])
|
@@ -95,6 +135,10 @@ AC_ARG_VAR([FROM_OMPI],[set to "yes" if building ROMIO inside of Open MPI])
|
||||||
FROM_OMPI=${FROM_OMPI:-no}
|
FROM_OMPI=${FROM_OMPI:-no}
|
||||||
if test "$FROM_OMPI" = 1 ; then FROM_OMPI=yes ; fi
|
if test "$FROM_OMPI" = 1 ; then FROM_OMPI=yes ; fi
|
||||||
|
|
||||||
+AC_ARG_VAR([FROM_OMPI],[set to "yes" if building ROMIO inside of Open MPI])
|
+AC_ARG_VAR([FROM_OMPI],[set to "yes" if building ROMIO inside of Open MPI])
|
||||||
+FROM_OMPI=${FROM_OMPI:-no}
|
+FROM_OMPI=${FROM_OMPI:-no}
|
||||||
+if test "$FROM_OMPI" = 1 ; then FROM_OMPI=yes ; fi
|
+if test "$FROM_OMPI" = 1 ; then FROM_OMPI=yes ; fi
|
||||||
@ -410,7 +281,7 @@ index f975e1c..4d51a3e 100644
|
|||||||
# foll. needed for f77 test programs
|
# foll. needed for f77 test programs
|
||||||
F77GETARG="call getarg(i,str)"
|
F77GETARG="call getarg(i,str)"
|
||||||
F77IARGC="iargc()"
|
F77IARGC="iargc()"
|
||||||
@@ -133,6 +178,17 @@ MPI_OFFSET_KIND2="!"
|
@@ -133,6 +178,18 @@ MPI_OFFSET_KIND2="!"
|
||||||
TEST_CC=""
|
TEST_CC=""
|
||||||
TEST_F77=""
|
TEST_F77=""
|
||||||
#
|
#
|
||||||
@ -425,10 +296,11 @@ index f975e1c..4d51a3e 100644
|
|||||||
+MPIO_REQOBJECTS="iotest.o iotestall.o iotestany.o iotestsome.o iowait.o iowaitall.o iowaitany.o iowaitsome.o ioreq_c2f.o ioreq_f2c.o"
|
+MPIO_REQOBJECTS="iotest.o iotestall.o iotestany.o iotestsome.o iowait.o iowaitall.o iowaitany.o iowaitsome.o ioreq_c2f.o ioreq_f2c.o"
|
||||||
+MPIO_REQ_TMP_POBJECTS="iotest.p iowait.p iowaitall.p iowaitany.p iotestall.p iotestany.p iowaitsome.p iotestsome.p"
|
+MPIO_REQ_TMP_POBJECTS="iotest.p iowait.p iowaitall.p iowaitany.p iotestall.p iotestany.p iowaitsome.p iotestsome.p"
|
||||||
+MPIO_REQ_REAL_POBJECTS="_iotest.o _iowait.o _iowaitall.o _iowaitany.o _iotestall.o _iotestany.o _iowaitsome.o _iotestsome.o"
|
+MPIO_REQ_REAL_POBJECTS="_iotest.o _iowait.o _iowaitall.o _iowaitany.o _iotestall.o _iotestany.o _iowaitsome.o _iotestsome.o"
|
||||||
have_aio=no
|
+#
|
||||||
#
|
|
||||||
known_mpi_impls="mpich_mpi mpich_mpi sgi_mpi hp_mpi cray_mpi lam_mpi open_mpi_mpi"
|
known_mpi_impls="mpich_mpi mpich_mpi sgi_mpi hp_mpi cray_mpi lam_mpi open_mpi_mpi"
|
||||||
@@ -171,7 +227,7 @@ AC_ARG_ENABLE(f77,
|
|
||||||
|
dnl An m4 macro for use with m4_foreach_w and friends. You should modify this
|
||||||
|
@@ -169,7 +226,7 @@ AC_ARG_ENABLE(f77,
|
||||||
AC_ARG_ENABLE(f90,
|
AC_ARG_ENABLE(f90,
|
||||||
[--enable-f90 - Turn on support for Fortran 90 (default)],,enable_f90=yes)
|
[--enable-f90 - Turn on support for Fortran 90 (default)],,enable_f90=yes)
|
||||||
AC_ARG_ENABLE(weak-symbols,
|
AC_ARG_ENABLE(weak-symbols,
|
||||||
@ -437,7 +309,7 @@ index f975e1c..4d51a3e 100644
|
|||||||
AC_ARG_ENABLE(debug,
|
AC_ARG_ENABLE(debug,
|
||||||
[--enable-debug - Build a debugging version],,)
|
[--enable-debug - Build a debugging version],,)
|
||||||
AC_ARG_WITH(file-system,[
|
AC_ARG_WITH(file-system,[
|
||||||
@@ -194,9 +250,10 @@ if test "$enable_debug" = "yes" ; then
|
@@ -192,9 +249,10 @@ if test "$enable_debug" = "yes" ; then
|
||||||
DEBUG=yes
|
DEBUG=yes
|
||||||
fi
|
fi
|
||||||
MPI=$with_mpi
|
MPI=$with_mpi
|
||||||
@ -448,22 +320,22 @@ index f975e1c..4d51a3e 100644
|
|||||||
+#if test -n "$with_mpi"; then
|
+#if test -n "$with_mpi"; then
|
||||||
+# CC=$MPI/bin/mpicc
|
+# CC=$MPI/bin/mpicc
|
||||||
+#fi
|
+#fi
|
||||||
|
|
||||||
# start with the set of file systems that the user asked for
|
# start with the set of file systems that the user asked for
|
||||||
# FILE_SYSTEM=$with_file_system
|
# FILE_SYSTEM=$with_file_system
|
||||||
@@ -259,6 +316,7 @@ top_build_dir=`pwd`
|
@@ -257,6 +315,7 @@ top_build_dir=`pwd`
|
||||||
# used in romioinstall
|
# used in romioinstall
|
||||||
AC_SUBST(top_build_dir)
|
AC_SUBST(top_build_dir)
|
||||||
|
|
||||||
+# Open MPI: these shouldn't be needed with AM
|
+# Open MPI: these shouldn't be needed with AM
|
||||||
#
|
#
|
||||||
# Create the "autoconf" style directory names...
|
# Create the "autoconf" style directory names...
|
||||||
# Most of these are done for us; add the documentation directories
|
# Most of these are done for us; add the documentation directories
|
||||||
@@ -380,8 +438,9 @@ if test "$CC" = "gcc" -a -z "$C_DEBUG_FLAG" ; then
|
@@ -378,8 +437,9 @@ if test "$CC" = "gcc" -a -z "$C_DEBUG_FLAG" ; then
|
||||||
fi
|
fi
|
||||||
if test $DEBUG = "yes" ; then
|
if test $DEBUG = "yes" ; then
|
||||||
CFLAGS="$CFLAGS $C_DEBUG_FLAG"
|
CFLAGS="$CFLAGS $C_DEBUG_FLAG"
|
||||||
-else
|
-else
|
||||||
- CFLAGS="$CFLAGS $C_OPT_FLAG"
|
- CFLAGS="$CFLAGS $C_OPT_FLAG"
|
||||||
+# Open MPI: don't add optflags - they'll come from the top-level configure
|
+# Open MPI: don't add optflags - they'll come from the top-level configure
|
||||||
+#else
|
+#else
|
||||||
@ -471,28 +343,28 @@ index f975e1c..4d51a3e 100644
|
|||||||
fi
|
fi
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Here go the rest of the tests
|
# Here go the rest of the tests
|
||||||
@@ -428,7 +487,8 @@ else
|
@@ -426,7 +486,8 @@ else
|
||||||
F77=":"
|
F77=":"
|
||||||
fi
|
fi
|
||||||
#
|
#
|
||||||
-AC_C_INLINE
|
-AC_C_INLINE
|
||||||
+# Open MPI: We already do this test top-level
|
+# Open MPI: We already do this test top-level
|
||||||
+dnl AC_C_INLINE
|
+dnl AC_C_INLINE
|
||||||
|
|
||||||
AC_TYPE_SIZE_T
|
AC_TYPE_SIZE_T
|
||||||
AC_TYPE_SSIZE_T
|
AC_TYPE_SSIZE_T
|
||||||
@@ -651,7 +711,9 @@ AM_CONDITIONAL([BUILD_MPIO_ERRHAN],[false])
|
@@ -649,7 +710,9 @@ AM_CONDITIONAL([BUILD_MPIO_ERRHAN],[false])
|
||||||
|
|
||||||
# if we don't have weak symbol support, we must build a separate convenience
|
# if we don't have weak symbol support, we must build a separate convenience
|
||||||
# library in order to provide the "PMPI_" symbols
|
# library in order to provide the "PMPI_" symbols
|
||||||
-AM_CONDITIONAL([BUILD_PROFILING_LIB],[test "x$HAVE_WEAK_SYMBOLS" = "x0"])
|
-AM_CONDITIONAL([BUILD_PROFILING_LIB],[test "x$HAVE_WEAK_SYMBOLS" = "x0"])
|
||||||
+# Open MPI: Disable the profile library
|
+# Open MPI: Disable the profile library
|
||||||
+#AM_CONDITIONAL([BUILD_PROFILING_LIB],[test "x$HAVE_WEAK_SYMBOLS" = "x0"])
|
+#AM_CONDITIONAL([BUILD_PROFILING_LIB],[test "x$HAVE_WEAK_SYMBOLS" = "x0"])
|
||||||
+AM_CONDITIONAL([BUILD_PROFILING_LIB],[false])
|
+AM_CONDITIONAL([BUILD_PROFILING_LIB],[false])
|
||||||
|
|
||||||
# weird: we have conflated "buid ROMIO's versions of the fortran bindings" and
|
# weird: we have conflated "buid ROMIO's versions of the fortran bindings" and
|
||||||
# "build ROMIO"s fortran I/O tests". Of course the common situaiton is that we
|
# "build ROMIO"s fortran I/O tests". Of course the common situaiton is that we
|
||||||
@@ -1565,8 +1627,10 @@ if test $FROM_OMPI = yes ; then
|
@@ -1447,8 +1510,10 @@ if test $FROM_OMPI = yes ; then
|
||||||
HAVE_MPI_DARRAY_SUBARRAY="#define HAVE_MPI_DARRAY_SUBARRAY"
|
HAVE_MPI_DARRAY_SUBARRAY="#define HAVE_MPI_DARRAY_SUBARRAY"
|
||||||
# Open MPI: see comments in mpi-io/mpioprof.h
|
# Open MPI: see comments in mpi-io/mpioprof.h
|
||||||
AC_DEFINE(MPIO_BUILD_PROFILING, 1, [hack to make ROMIO build without profiling])
|
AC_DEFINE(MPIO_BUILD_PROFILING, 1, [hack to make ROMIO build without profiling])
|
||||||
@ -504,7 +376,7 @@ index f975e1c..4d51a3e 100644
|
|||||||
elif test $FROM_LAM = yes ; then
|
elif test $FROM_LAM = yes ; then
|
||||||
# LAM does have the status set bytes functionality
|
# LAM does have the status set bytes functionality
|
||||||
AC_DEFINE(HAVE_STATUS_SET_BYTES,1,[Define if have MPIR_Status_set_bytes])
|
AC_DEFINE(HAVE_STATUS_SET_BYTES,1,[Define if have MPIR_Status_set_bytes])
|
||||||
@@ -1615,7 +1679,7 @@ elif test $FROM_MPICH = yes ; then
|
@@ -1497,7 +1562,7 @@ elif test $FROM_MPICH = yes ; then
|
||||||
DEFINE_HAVE_MPI_GREQUEST_EXTENSIONS="#define HAVE_MPI_GREQUEST_EXTENSIONS 1"
|
DEFINE_HAVE_MPI_GREQUEST_EXTENSIONS="#define HAVE_MPI_GREQUEST_EXTENSIONS 1"
|
||||||
AC_DEFINE(HAVE_MPIU_FUNCS,1,[Define if MPICH memory tracing macros defined])
|
AC_DEFINE(HAVE_MPIU_FUNCS,1,[Define if MPICH memory tracing macros defined])
|
||||||
AC_DEFINE(HAVE_MPIX_H, 1, [])
|
AC_DEFINE(HAVE_MPIX_H, 1, [])
|
||||||
@ -513,10 +385,10 @@ index f975e1c..4d51a3e 100644
|
|||||||
AC_DEFINE(HAVE_MPI_TYPE_SIZE_X, 1, [Define if MPI library provides MPI_TYPE_SIZE_X])
|
AC_DEFINE(HAVE_MPI_TYPE_SIZE_X, 1, [Define if MPI library provides MPI_TYPE_SIZE_X])
|
||||||
AC_DEFINE(HAVE_MPI_STATUS_SET_ELEMENTS_X, 1, [Define if MPI library provides MPI_STATUS_SET_ELEMENTS_X])
|
AC_DEFINE(HAVE_MPI_STATUS_SET_ELEMENTS_X, 1, [Define if MPI library provides MPI_STATUS_SET_ELEMENTS_X])
|
||||||
AC_DEFINE(HAVE_DECL_MPI_COMBINER_HINDEXED_BLOCK, 1, [Define if MPI library provides HINDEXED_BLOCK datatype])
|
AC_DEFINE(HAVE_DECL_MPI_COMBINER_HINDEXED_BLOCK, 1, [Define if MPI library provides HINDEXED_BLOCK datatype])
|
||||||
@@ -1751,9 +1815,22 @@ AC_CHECK_HEADERS(unistd.h,
|
@@ -1620,9 +1685,22 @@ fi
|
||||||
echo "setting SYSDEP_INC to $SYSDEP_INC"
|
echo "setting SYSDEP_INC to $SYSDEP_INC"
|
||||||
AC_SUBST(SYSDEP_INC)
|
AC_SUBST(SYSDEP_INC)
|
||||||
|
|
||||||
+# Open MPI: use the exact same restrict test that we use in the
|
+# Open MPI: use the exact same restrict test that we use in the
|
||||||
+# upper-level Open MPI configure script so that we always get the same
|
+# upper-level Open MPI configure script so that we always get the same
|
||||||
+# #define for "restrict" (there are a small number of files that will
|
+# #define for "restrict" (there are a small number of files that will
|
||||||
@ -524,7 +396,7 @@ index f975e1c..4d51a3e 100644
|
|||||||
+# need to #defines to agree).
|
+# need to #defines to agree).
|
||||||
AC_C_RESTRICT
|
AC_C_RESTRICT
|
||||||
PAC_C_GNU_ATTRIBUTE
|
PAC_C_GNU_ATTRIBUTE
|
||||||
|
|
||||||
+# Open MPI: we need libtool
|
+# Open MPI: we need libtool
|
||||||
+AM_PROG_LIBTOOL
|
+AM_PROG_LIBTOOL
|
||||||
+
|
+
|
||||||
@ -535,11 +407,11 @@ index f975e1c..4d51a3e 100644
|
|||||||
+
|
+
|
||||||
# support gcov test coverage information
|
# support gcov test coverage information
|
||||||
PAC_ENABLE_COVERAGE
|
PAC_ENABLE_COVERAGE
|
||||||
|
|
||||||
@@ -1765,23 +1842,29 @@ echo "setting CFLAGS to $CFLAGS"
|
@@ -1634,23 +1712,29 @@ echo "setting CFLAGS to $CFLAGS"
|
||||||
echo "setting USER_CFLAGS to $USER_CFLAGS"
|
echo "setting USER_CFLAGS to $USER_CFLAGS"
|
||||||
echo "setting USER_FFLAGS to $USER_FFLAGS"
|
echo "setting USER_FFLAGS to $USER_FFLAGS"
|
||||||
|
|
||||||
+# Open MPI: Add on CFLAGS that we figured out up top. They have
|
+# Open MPI: Add on CFLAGS that we figured out up top. They have
|
||||||
+# makefile macros in them, so we couldn't substitute them until now.
|
+# makefile macros in them, so we couldn't substitute them until now.
|
||||||
+CFLAGS="$CFLAGS $OMPI_CFLAGS "'-I$(top_builddir)/include'
|
+CFLAGS="$CFLAGS $OMPI_CFLAGS "'-I$(top_builddir)/include'
|
||||||
@ -572,7 +444,15 @@ index f975e1c..4d51a3e 100644
|
|||||||
AC_SUBST(arch_IRIX)
|
AC_SUBST(arch_IRIX)
|
||||||
AC_SUBST(ROMIO_HOME)
|
AC_SUBST(ROMIO_HOME)
|
||||||
AC_SUBST(LIBNAME)
|
AC_SUBST(LIBNAME)
|
||||||
@@ -1825,24 +1908,25 @@ AC_SUBST(ROMIO_TCPPFLAGS)
|
@@ -1671,6 +1755,7 @@ AC_SUBST(HAVE_MPI_DARRAY_SUBARRAY)
|
||||||
|
AC_SUBST(BUILD_MPI_ARRAY)
|
||||||
|
AC_SUBST(DEFINE_MPI_OFFSET)
|
||||||
|
AC_SUBST(DEFINE_HAVE_MPI_GREQUEST)
|
||||||
|
+AC_SUBST(DEFINE_HAVE_MPI_GREQUEST_EXTENSIONS)
|
||||||
|
AC_SUBST(MPI_OFFSET_TYPE)
|
||||||
|
AC_SUBST(MPI_FINFO1)
|
||||||
|
AC_SUBST(MPI_FINFO2)
|
||||||
|
@@ -1694,24 +1779,25 @@ AC_SUBST(ROMIO_TCPPFLAGS)
|
||||||
AC_SUBST(ROMIO_TFFLAGS)
|
AC_SUBST(ROMIO_TFFLAGS)
|
||||||
AC_SUBST(MPIRUN)
|
AC_SUBST(MPIRUN)
|
||||||
AC_SUBST(FORTRAN_TEST)
|
AC_SUBST(FORTRAN_TEST)
|
||||||
@ -611,10 +491,10 @@ index f975e1c..4d51a3e 100644
|
|||||||
+#if test ! -d mpi2-other ; then mkdir mpi2-other ; fi
|
+#if test ! -d mpi2-other ; then mkdir mpi2-other ; fi
|
||||||
+#if test ! -d mpi-io ; then mkdir mpi-io ; fi
|
+#if test ! -d mpi-io ; then mkdir mpi-io ; fi
|
||||||
+#if test ! -d mpi-io/glue ; then mkdir mpi-io/glue ; fi
|
+#if test ! -d mpi-io/glue ; then mkdir mpi-io/glue ; fi
|
||||||
|
|
||||||
# Create makefiles for all of the adio devices. Only the ones that
|
# Create makefiles for all of the adio devices. Only the ones that
|
||||||
# are active will be called by the top level ROMIO make
|
# are active will be called by the top level ROMIO make
|
||||||
@@ -1850,8 +1934,6 @@ AC_OUTPUT_COMMANDS([chmod 755 util/romioinstall test/runtests])
|
@@ -1719,8 +1805,6 @@ AC_OUTPUT_COMMANDS([chmod 755 util/romioinstall test/runtests])
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
localdefs
|
localdefs
|
||||||
@ -623,7 +503,7 @@ index f975e1c..4d51a3e 100644
|
|||||||
test/Makefile
|
test/Makefile
|
||||||
test/misc.c
|
test/misc.c
|
||||||
test/large_file.c
|
test/large_file.c
|
||||||
@@ -1859,14 +1941,17 @@ AC_CONFIG_FILES([
|
@@ -1728,14 +1812,17 @@ AC_CONFIG_FILES([
|
||||||
test-internal/Makefile
|
test-internal/Makefile
|
||||||
util/romioinstall
|
util/romioinstall
|
||||||
include/mpio.h
|
include/mpio.h
|
||||||
@ -642,27 +522,27 @@ index f975e1c..4d51a3e 100644
|
|||||||
+# mpi2-other/array/fortran/Makefile
|
+# mpi2-other/array/fortran/Makefile
|
||||||
+# include/mpiof.h
|
+# include/mpiof.h
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
|
|
||||||
dnl PAC_SUBDIR_CACHE_CLEANUP
|
dnl PAC_SUBDIR_CACHE_CLEANUP
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/doc/users-guide.tex b/ompi/mca/io/romio32b1/romio/doc/users-guide.tex
|
diff --git a/ompi/mca/io/romio321/romio/doc/users-guide.tex b/ompi/mca/io/romio321/romio/doc/users-guide.tex
|
||||||
index b33d483..3715431 100644
|
index b33d483..3715431 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/doc/users-guide.tex
|
--- a/ompi/mca/io/romio321/romio/doc/users-guide.tex
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/doc/users-guide.tex
|
+++ b/ompi/mca/io/romio321/romio/doc/users-guide.tex
|
||||||
@@ -807,13 +807,19 @@ to include the file {\tt mpio.h} for C or {\tt mpiof.h} for Fortran in
|
@@ -807,13 +807,19 @@ to include the file {\tt mpio.h} for C or {\tt mpiof.h} for Fortran in
|
||||||
your MPI-IO program.
|
your MPI-IO program.
|
||||||
|
|
||||||
Note that on HP machines running HPUX and on NEC SX-4, you need to
|
Note that on HP machines running HPUX and on NEC SX-4, you need to
|
||||||
-compile Fortran programs with {\tt mpifort}.
|
-compile Fortran programs with {\tt mpifort}.
|
||||||
+compile Fortran programs with {\tt mpifort}, because {\tt mpif77} does
|
+compile Fortran programs with {\tt mpifort}, because {\tt mpif77} does
|
||||||
+not support 8-byte integers.
|
+not support 8-byte integers.
|
||||||
|
|
||||||
With MPICH, HP MPI, or NEC MPI, you can compile MPI-IO programs as \\
|
With MPICH, HP MPI, or NEC MPI, you can compile MPI-IO programs as \\
|
||||||
\hspace*{.4in} {\tt mpicc foo.c}\\
|
\hspace*{.4in} {\tt mpicc foo.c}\\
|
||||||
or \\
|
or \\
|
||||||
+\hspace*{.4in} {\tt mpif77 foo.f }\\
|
+\hspace*{.4in} {\tt mpif77 foo.f }\\
|
||||||
+or\\
|
+or\\
|
||||||
\hspace*{.4in} {\tt mpifort foo.f}\\
|
\hspace*{.4in} {\tt mpifort foo.f}\\
|
||||||
|
|
||||||
+As mentioned above, mpifort is preferred over mpif77 on HPUX and NEC
|
+As mentioned above, mpifort is preferred over mpif77 on HPUX and NEC
|
||||||
+because the f77 compilers on those machines do not support 8-byte integers.
|
+because the f77 compilers on those machines do not support 8-byte integers.
|
||||||
+
|
+
|
||||||
@ -671,151 +551,21 @@ index b33d483..3715431 100644
|
|||||||
or \\
|
or \\
|
||||||
@@ -863,7 +869,8 @@ file systems because they don't support {\tt fcntl} file locks,
|
@@ -863,7 +869,8 @@ file systems because they don't support {\tt fcntl} file locks,
|
||||||
and ROMIO uses that feature to implement shared file pointers.
|
and ROMIO uses that feature to implement shared file pointers.
|
||||||
|
|
||||||
\item On HP machines running HPUX and on NEC SX-4, you need to compile
|
\item On HP machines running HPUX and on NEC SX-4, you need to compile
|
||||||
-Fortran programs with {\tt mpifort}.
|
-Fortran programs with {\tt mpifort}.
|
||||||
+Fortran programs with {\tt mpifort} instead of {\tt mpif77}, because
|
+Fortran programs with {\tt mpifort} instead of {\tt mpif77}, because
|
||||||
+the {\tt f77} compilers on these machines don't support 8-byte integers.
|
+the {\tt f77} compilers on these machines don't support 8-byte integers.
|
||||||
|
|
||||||
\item The file-open mode {\tt MPI\_MODE\_EXCL} does not work on Intel
|
\item The file-open mode {\tt MPI\_MODE\_EXCL} does not work on Intel
|
||||||
PFS file system, due to a bug in PFS.
|
PFS file system, due to a bug in PFS.
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/include/io_romio_conv.h b/ompi/mca/io/romio32b1/romio/include/io_romio_conv.h
|
diff --git a/ompi/mca/io/romio321/romio/include/mpio.h.in b/ompi/mca/io/romio321/romio/include/mpio.h.in
|
||||||
new file mode 100644
|
index 1f3f382..9ef709d 100644
|
||||||
index 0000000..c03873d
|
--- a/ompi/mca/io/romio321/romio/include/mpio.h.in
|
||||||
--- /dev/null
|
+++ b/ompi/mca/io/romio321/romio/include/mpio.h.in
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/include/io_romio_conv.h
|
|
||||||
@@ -0,0 +1,124 @@
|
|
||||||
+/*
|
|
||||||
+ * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
|
||||||
+ * University Research and Technology
|
|
||||||
+ * Corporation. All rights reserved.
|
|
||||||
+ * Copyright (c) 2004-2005 The University of Tennessee and The University
|
|
||||||
+ * of Tennessee Research Foundation. All rights
|
|
||||||
+ * reserved.
|
|
||||||
+ * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
|
||||||
+ * University of Stuttgart. All rights reserved.
|
|
||||||
+ * Copyright (c) 2004-2005 The Regents of the University of California.
|
|
||||||
+ * All rights reserved.
|
|
||||||
+ * $COPYRIGHT$
|
|
||||||
+ *
|
|
||||||
+ * Additional copyrights may follow
|
|
||||||
+ *
|
|
||||||
+ * $HEADER$
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#ifndef MCA_IO_ROMIO_CONV_H
|
|
||||||
+#define MCA_IO_ROMIO_CONV_H
|
|
||||||
+
|
|
||||||
+/* Prefix that we add to all ROMIO symbols */
|
|
||||||
+#ifdef ROMIO_PREFIX
|
|
||||||
+#undef ROMIO_PREFIX
|
|
||||||
+#endif
|
|
||||||
+#define ROMIO_PREFIX(foo) mca_io_romio_dist_##foo
|
|
||||||
+
|
|
||||||
+/* Section 9.2 */
|
|
||||||
+/* Begin Prototypes */
|
|
||||||
+#define MPI_File_open ROMIO_PREFIX(MPI_File_open)
|
|
||||||
+#define MPI_File_close ROMIO_PREFIX(MPI_File_close)
|
|
||||||
+#define MPI_File_delete ROMIO_PREFIX(MPI_File_delete)
|
|
||||||
+#define MPI_File_set_size ROMIO_PREFIX(MPI_File_set_size)
|
|
||||||
+#define MPI_File_preallocate ROMIO_PREFIX(MPI_File_preallocate)
|
|
||||||
+#define MPI_File_get_size ROMIO_PREFIX(MPI_File_get_size)
|
|
||||||
+#define MPI_File_get_group ROMIO_PREFIX(MPI_File_get_group)
|
|
||||||
+#define MPI_File_get_amode ROMIO_PREFIX(MPI_File_get_amode)
|
|
||||||
+#define MPI_File_set_info ROMIO_PREFIX(MPI_File_set_info)
|
|
||||||
+#define MPI_File_get_info ROMIO_PREFIX(MPI_File_get_info)
|
|
||||||
+
|
|
||||||
+/* Section 9.3 */
|
|
||||||
+#define MPI_File_set_view ROMIO_PREFIX(MPI_File_set_view)
|
|
||||||
+#define MPI_File_get_view ROMIO_PREFIX(MPI_File_get_view)
|
|
||||||
+
|
|
||||||
+/* Section 9.4.2 */
|
|
||||||
+#define MPI_File_read_at ROMIO_PREFIX(MPI_File_read_at)
|
|
||||||
+#define MPI_File_read_at_all ROMIO_PREFIX(MPI_File_read_at_all)
|
|
||||||
+#define MPI_File_write_at ROMIO_PREFIX(MPI_File_write_at)
|
|
||||||
+#define MPI_File_write_at_all ROMIO_PREFIX(MPI_File_write_at_all)
|
|
||||||
+#define MPI_File_iread_at ROMIO_PREFIX(MPI_File_iread_at)
|
|
||||||
+#define MPI_File_iwrite_at ROMIO_PREFIX(MPI_File_iwrite_at)
|
|
||||||
+
|
|
||||||
+/* Section 9.4.3 */
|
|
||||||
+#define MPI_File_read ROMIO_PREFIX(MPI_File_read)
|
|
||||||
+#define MPI_File_read_all ROMIO_PREFIX(MPI_File_read_all)
|
|
||||||
+#define MPI_File_write ROMIO_PREFIX(MPI_File_write)
|
|
||||||
+#define MPI_File_write_all ROMIO_PREFIX(MPI_File_write_all)
|
|
||||||
+
|
|
||||||
+#define MPI_File_iread ROMIO_PREFIX(MPI_File_iread)
|
|
||||||
+#define MPI_File_iwrite ROMIO_PREFIX(MPI_File_iwrite)
|
|
||||||
+
|
|
||||||
+#define MPI_File_seek ROMIO_PREFIX(MPI_File_seek)
|
|
||||||
+#define MPI_File_get_position ROMIO_PREFIX(MPI_File_get_position)
|
|
||||||
+#define MPI_File_get_byte_offset ROMIO_PREFIX(MPI_File_get_byte_offset)
|
|
||||||
+
|
|
||||||
+/* Section 9.4.4 */
|
|
||||||
+#define MPI_File_read_shared ROMIO_PREFIX(MPI_File_read_shared)
|
|
||||||
+#define MPI_File_write_shared ROMIO_PREFIX(MPI_File_write_shared)
|
|
||||||
+#define MPI_File_iread_shared ROMIO_PREFIX(MPI_File_iread_shared)
|
|
||||||
+#define MPI_File_iwrite_shared ROMIO_PREFIX(MPI_File_iwrite_shared)
|
|
||||||
+#define MPI_File_read_ordered ROMIO_PREFIX(MPI_File_read_ordered)
|
|
||||||
+#define MPI_File_write_ordered ROMIO_PREFIX(MPI_File_write_ordered)
|
|
||||||
+#define MPI_File_seek_shared ROMIO_PREFIX(MPI_File_seek_shared)
|
|
||||||
+#define MPI_File_get_position_shared ROMIO_PREFIX(MPI_File_get_position_shared)
|
|
||||||
+
|
|
||||||
+/* Section 9.4.5 */
|
|
||||||
+#define MPI_File_read_at_all_begin ROMIO_PREFIX(MPI_File_read_at_all_begin)
|
|
||||||
+#define MPI_File_read_at_all_end ROMIO_PREFIX(MPI_File_read_at_all_end)
|
|
||||||
+#define MPI_File_write_at_all_begin ROMIO_PREFIX(MPI_File_write_at_all_begin)
|
|
||||||
+#define MPI_File_write_at_all_end ROMIO_PREFIX(MPI_File_write_at_all_end)
|
|
||||||
+#define MPI_File_read_all_begin ROMIO_PREFIX(MPI_File_read_all_begin)
|
|
||||||
+#define MPI_File_read_all_end ROMIO_PREFIX(MPI_File_read_all_end)
|
|
||||||
+#define MPI_File_write_all_begin ROMIO_PREFIX(MPI_File_write_all_begin)
|
|
||||||
+#define MPI_File_write_all_end ROMIO_PREFIX(MPI_File_write_all_end)
|
|
||||||
+#define MPI_File_read_ordered_begin ROMIO_PREFIX(MPI_File_read_ordered_begin)
|
|
||||||
+#define MPI_File_read_ordered_end ROMIO_PREFIX(MPI_File_read_ordered_end)
|
|
||||||
+#define MPI_File_write_ordered_begin ROMIO_PREFIX(MPI_File_write_ordered_begin)
|
|
||||||
+#define MPI_File_write_ordered_end ROMIO_PREFIX(MPI_File_write_ordered_end)
|
|
||||||
+
|
|
||||||
+/* Section 9.5.1 */
|
|
||||||
+#define MPI_File_get_type_extent ROMIO_PREFIX(MPI_File_get_type_extent)
|
|
||||||
+
|
|
||||||
+/* Section 9.6.1 */
|
|
||||||
+#define MPI_File_set_atomicity ROMIO_PREFIX(MPI_File_set_atomicity)
|
|
||||||
+#define MPI_File_get_atomicity ROMIO_PREFIX(MPI_File_get_atomicity)
|
|
||||||
+#define MPI_File_sync ROMIO_PREFIX(MPI_File_sync)
|
|
||||||
+
|
|
||||||
+/* Section 4.13.3 */
|
|
||||||
+#define MPI_File_set_errhandler ROMIO_PREFIX(MPI_File_set_errhandler)
|
|
||||||
+#define MPI_File_get_errhandler ROMIO_PREFIX(MPI_File_get_errhandler)
|
|
||||||
+/* End Prototypes */
|
|
||||||
+
|
|
||||||
+#define MPI_Register_datarep ROMIO_PREFIX(MPI_Register_datarep)
|
|
||||||
+
|
|
||||||
+/* JMS these don't seem to work... */
|
|
||||||
+#define MPI_File_f2c ROMIO_PREFIX(MPI_File_f2c)
|
|
||||||
+#define MPI_File_c2f ROMIO_PREFIX(MPI_File_c2f)
|
|
||||||
+
|
|
||||||
+#define MPIO_Request_c2f ROMIO_PREFIX(MPIO_Request_c2f)
|
|
||||||
+#define MPIO_Request_f2c ROMIO_PREFIX(MPIO_Request_f2c)
|
|
||||||
+
|
|
||||||
+/* Conversion of MPI_File and MPIO_Request */
|
|
||||||
+#define MPI_File ROMIO_PREFIX(MPI_File)
|
|
||||||
+
|
|
||||||
+/* Open MPI's mpi.h #define's MPI_FILE_NULL, so we need to undef it
|
|
||||||
+ here and allow it to be re-assigned to whatever ROMIO wants */
|
|
||||||
+#undef MPI_FILE_NULL
|
|
||||||
+
|
|
||||||
+/* Let's not use MPIR_Status_set_bytes */
|
|
||||||
+#ifndef MPIR_Status_set_bytes
|
|
||||||
+#define MPIR_Status_set_bytes ROMIO_PREFIX(MPIR_Status_set_bytes)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#endif /* MCA_IO_ROMIO_CONV_H */
|
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/include/mpio.h.in b/ompi/mca/io/romio32b1/romio/include/mpio.h.in
|
|
||||||
index 2238f4b..8d1314c 100644
|
|
||||||
--- a/ompi/mca/io/romio32b1/romio/include/mpio.h.in
|
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/include/mpio.h.in
|
|
||||||
@@ -11,6 +11,16 @@
|
@@ -11,6 +11,16 @@
|
||||||
#define MPIO_INCLUDE
|
#define MPIO_INCLUDE
|
||||||
|
|
||||||
#include "mpi.h"
|
#include "mpi.h"
|
||||||
+/* Open MPI: We need to rename almost all of these functions, as well
|
+/* Open MPI: We need to rename almost all of these functions, as well
|
||||||
+ a the types to be names that conform to the prefix rule */
|
+ a the types to be names that conform to the prefix rule */
|
||||||
@ -827,10 +577,19 @@ index 2238f4b..8d1314c 100644
|
|||||||
+#define MPIIMPL_HAVE_MPI_TYPE_CREATE_DARRAY 1
|
+#define MPIIMPL_HAVE_MPI_TYPE_CREATE_DARRAY 1
|
||||||
+#define MPIIMPL_HAVE_MPI_COMBINER_DUP 1
|
+#define MPIIMPL_HAVE_MPI_COMBINER_DUP 1
|
||||||
+#define MPICH_ATTR_POINTER_WITH_TYPE_TAG(x,y)
|
+#define MPICH_ATTR_POINTER_WITH_TYPE_TAG(x,y)
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -279,9 +289,12 @@ int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsi
|
@@ -38,6 +48,8 @@ typedef struct ADIOI_RequestD *MPIO_Request;
|
||||||
|
#endif
|
||||||
|
#define MPIO_REQUEST_DEFINED
|
||||||
|
|
||||||
|
+@DEFINE_HAVE_MPI_GREQUEST_EXTENSIONS@
|
||||||
|
+
|
||||||
|
#ifndef HAVE_MPI_OFFSET
|
||||||
|
@DEFINE_MPI_OFFSET@
|
||||||
|
/* If we needed to define MPI_Offset, then we also need to make
|
||||||
|
@@ -279,9 +291,12 @@ int MPI_Type_create_darray(int size, int rank, int ndims, const int array_of_gsi
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
/* above needed for some versions of mpi.h in MPICH!! */
|
/* above needed for some versions of mpi.h in MPICH!! */
|
||||||
@ -841,10 +600,10 @@ index 2238f4b..8d1314c 100644
|
|||||||
MPI_Fint MPI_File_c2f(MPI_File file);
|
MPI_Fint MPI_File_c2f(MPI_File file);
|
||||||
-
|
-
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
#ifndef HAVE_MPI_GREQUEST
|
#ifndef HAVE_MPI_GREQUEST
|
||||||
/* The following functions are required if generalized requests are not
|
/* The following functions are required if generalized requests are not
|
||||||
@@ -329,15 +342,21 @@ int MPI_Info_free(MPI_Info *info);
|
@@ -329,15 +344,21 @@ int MPI_Info_free(MPI_Info *info);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
/* above needed for some versions of mpi.h in MPICH!! */
|
/* above needed for some versions of mpi.h in MPICH!! */
|
||||||
@ -854,44 +613,31 @@ index 2238f4b..8d1314c 100644
|
|||||||
MPI_Info MPI_Info_f2c(MPI_Fint info);
|
MPI_Info MPI_Info_f2c(MPI_Fint info);
|
||||||
#endif
|
#endif
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
#endif /* HAVE_PRAGMA_HP_SEC_DEF */
|
#endif /* HAVE_PRAGMA_HP_SEC_DEF */
|
||||||
|
|
||||||
|
|
||||||
/**************** BINDINGS FOR THE PROFILING INTERFACE ***************/
|
/**************** BINDINGS FOR THE PROFILING INTERFACE ***************/
|
||||||
|
|
||||||
+/* Open MPI: We don't want any of the profiling layer */
|
+/* Open MPI: We don't want any of the profiling layer */
|
||||||
+#if 0
|
+#if 0
|
||||||
+
|
+
|
||||||
|
|
||||||
/* Section 9.2 */
|
/* Section 9.2 */
|
||||||
int PMPI_File_open(MPI_Comm, const char *, int, MPI_Info, MPI_File *);
|
int PMPI_File_open(MPI_Comm, const char *, int, MPI_Info, MPI_File *);
|
||||||
@@ -528,6 +547,8 @@ MPI_Fint PMPI_Info_c2f(MPI_Info);
|
@@ -528,6 +549,8 @@ MPI_Fint PMPI_Info_c2f(MPI_Info);
|
||||||
MPI_Info PMPI_Info_f2c(MPI_Fint);
|
MPI_Info PMPI_Info_f2c(MPI_Fint);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
+#endif /* Open MPI: We don't want any of the profiling layer */
|
+#endif /* Open MPI: We don't want any of the profiling layer */
|
||||||
+
|
+
|
||||||
#if defined(__cplusplus)
|
#if defined(__cplusplus)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/localdefs.in b/ompi/mca/io/romio32b1/romio/localdefs.in
|
diff --git a/ompi/mca/io/romio321/romio/mpi-io/Makefile.mk b/ompi/mca/io/romio321/romio/mpi-io/Makefile.mk
|
||||||
index bf057d1..5b3d670 100644
|
|
||||||
--- a/ompi/mca/io/romio32b1/romio/localdefs.in
|
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/localdefs.in
|
|
||||||
@@ -1,7 +1,4 @@
|
|
||||||
#! /bin/sh
|
|
||||||
-
|
|
||||||
-# Append ROMIO library dependencies to the global list
|
|
||||||
-EXTERNAL_LIBS="$EXTERNAL_LIBS @LIBS@"
|
|
||||||
-
|
|
||||||
+LIBS="@LIBS@"
|
|
||||||
MPI_OFFSET_TYPE="@MPI_OFFSET_TYPE@"
|
|
||||||
FORTRAN_MPI_OFFSET="@FORTRAN_MPI_OFFSET@"
|
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/mpi-io/Makefile.mk b/ompi/mca/io/romio32b1/romio/mpi-io/Makefile.mk
|
|
||||||
index d4d5a29..264976e 100644
|
index d4d5a29..264976e 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/mpi-io/Makefile.mk
|
--- a/ompi/mca/io/romio321/romio/mpi-io/Makefile.mk
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/mpi-io/Makefile.mk
|
+++ b/ompi/mca/io/romio321/romio/mpi-io/Makefile.mk
|
||||||
@@ -14,8 +14,6 @@ noinst_HEADERS += mpi-io/mpioimpl.h mpi-io/mpioprof.h
|
@@ -14,8 +14,6 @@ noinst_HEADERS += mpi-io/mpioimpl.h mpi-io/mpioprof.h
|
||||||
romio_mpi_sources += \
|
romio_mpi_sources += \
|
||||||
mpi-io/close.c \
|
mpi-io/close.c \
|
||||||
@ -901,10 +647,10 @@ index d4d5a29..264976e 100644
|
|||||||
mpi-io/fsync.c \
|
mpi-io/fsync.c \
|
||||||
mpi-io/get_amode.c \
|
mpi-io/get_amode.c \
|
||||||
mpi-io/get_atom.c \
|
mpi-io/get_atom.c \
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/mpi-io/close.c b/ompi/mca/io/romio32b1/romio/mpi-io/close.c
|
diff --git a/ompi/mca/io/romio321/romio/mpi-io/close.c b/ompi/mca/io/romio321/romio/mpi-io/close.c
|
||||||
index 520f206..160b661 100644
|
index 3f2b0b1..12d5c47 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/mpi-io/close.c
|
--- a/ompi/mca/io/romio321/romio/mpi-io/close.c
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/mpi-io/close.c
|
+++ b/ompi/mca/io/romio321/romio/mpi-io/close.c
|
||||||
@@ -76,8 +76,13 @@ int MPI_File_close(MPI_File *fh)
|
@@ -76,8 +76,13 @@ int MPI_File_close(MPI_File *fh)
|
||||||
* somehow inform the MPI library that we no longer hold a reference to any
|
* somehow inform the MPI library that we no longer hold a reference to any
|
||||||
* user defined error handler. We do this by setting the errhandler at this
|
* user defined error handler. We do this by setting the errhandler at this
|
||||||
@ -916,42 +662,42 @@ index 520f206..160b661 100644
|
|||||||
error_code = PMPI_File_set_errhandler(*fh, MPI_ERRORS_RETURN);
|
error_code = PMPI_File_set_errhandler(*fh, MPI_ERRORS_RETURN);
|
||||||
if (error_code != MPI_SUCCESS) goto fn_fail;
|
if (error_code != MPI_SUCCESS) goto fn_fail;
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
ADIO_Close(adio_fh, &error_code);
|
ADIO_Close(adio_fh, &error_code);
|
||||||
MPIO_File_free(fh);
|
MPIO_File_free(fh);
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/mpi-io/glue/Makefile.mk b/ompi/mca/io/romio32b1/romio/mpi-io/glue/Makefile.mk
|
diff --git a/ompi/mca/io/romio321/romio/mpi-io/glue/Makefile.mk b/ompi/mca/io/romio321/romio/mpi-io/glue/Makefile.mk
|
||||||
index 05954a1..66f7f9e 100644
|
index 05954a1..66f7f9e 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/mpi-io/glue/Makefile.mk
|
--- a/ompi/mca/io/romio321/romio/mpi-io/glue/Makefile.mk
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/mpi-io/glue/Makefile.mk
|
+++ b/ompi/mca/io/romio321/romio/mpi-io/glue/Makefile.mk
|
||||||
@@ -7,6 +7,7 @@
|
@@ -7,6 +7,7 @@
|
||||||
|
|
||||||
include $(top_srcdir)/mpi-io/glue/default/Makefile.mk
|
include $(top_srcdir)/mpi-io/glue/default/Makefile.mk
|
||||||
include $(top_srcdir)/mpi-io/glue/mpich/Makefile.mk
|
include $(top_srcdir)/mpi-io/glue/mpich/Makefile.mk
|
||||||
+include $(top_srcdir)/mpi-io/glue/openmpi/Makefile.mk
|
+include $(top_srcdir)/mpi-io/glue/openmpi/Makefile.mk
|
||||||
|
|
||||||
if !BUILD_ROMIO_EMBEDDED
|
if !BUILD_ROMIO_EMBEDDED
|
||||||
romio_other_sources += \
|
romio_other_sources += \
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/mpi-io/iread_all.c b/ompi/mca/io/romio32b1/romio/mpi-io/iread_all.c
|
diff --git a/ompi/mca/io/romio321/romio/mpi-io/iread_all.c b/ompi/mca/io/romio321/romio/mpi-io/iread_all.c
|
||||||
index ba36161..32a48b8 100644
|
index 2615e56..00a0640 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/mpi-io/iread_all.c
|
--- a/ompi/mca/io/romio321/romio/mpi-io/iread_all.c
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/mpi-io/iread_all.c
|
+++ b/ompi/mca/io/romio321/romio/mpi-io/iread_all.c
|
||||||
@@ -26,7 +26,7 @@ int MPIX_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype
|
@@ -26,7 +26,7 @@ int MPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype,
|
||||||
#include "mpioprof.h"
|
#include "mpioprof.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
-#ifdef HAVE_MPI_GREQUEST
|
-#ifdef HAVE_MPI_GREQUEST
|
||||||
+#if HAVE_MPI_GREQUEST
|
+#if HAVE_MPI_GREQUEST
|
||||||
#include "mpiu_greq.h"
|
#include "mpiu_greq.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
diff --git a/ompi/mca/io/romio32b1/romio/mpi-io/mpioprof.h b/ompi/mca/io/romio32b1/romio/mpi-io/mpioprof.h
|
diff --git a/ompi/mca/io/romio321/romio/mpi-io/mpioprof.h b/ompi/mca/io/romio321/romio/mpi-io/mpioprof.h
|
||||||
index 15654ac..63dffd8 100644
|
index f3ee3b4..c74413d 100644
|
||||||
--- a/ompi/mca/io/romio32b1/romio/mpi-io/mpioprof.h
|
--- a/ompi/mca/io/romio321/romio/mpi-io/mpioprof.h
|
||||||
+++ b/ompi/mca/io/romio32b1/romio/mpi-io/mpioprof.h
|
+++ b/ompi/mca/io/romio321/romio/mpi-io/mpioprof.h
|
||||||
@@ -10,6 +10,15 @@
|
@@ -10,6 +10,15 @@
|
||||||
building the profiling interface
|
building the profiling interface
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+/*
|
+/*
|
||||||
+ * Open MPI: Unfortunately, ROMIO doesn't seem to be able to build
|
+ * Open MPI: Unfortunately, ROMIO doesn't seem to be able to build
|
||||||
+ * without a profiling interface, but we don't want a profiling
|
+ * without a profiling interface, but we don't want a profiling
|
||||||
@ -962,10 +708,10 @@ index 15654ac..63dffd8 100644
|
|||||||
+ */
|
+ */
|
||||||
+#if 0
|
+#if 0
|
||||||
#ifdef MPIO_BUILD_PROFILING
|
#ifdef MPIO_BUILD_PROFILING
|
||||||
|
|
||||||
#undef MPI_File_open
|
#undef MPI_File_open
|
||||||
@@ -212,3 +221,4 @@
|
@@ -212,3 +221,4 @@
|
||||||
#define MPIX_Grequest_class_create PMPIX_Grequest_class_create
|
#define MPIX_Grequest_class_create PMPIX_Grequest_class_create
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
+#endif
|
+#endif
|
@ -1,9 +1,9 @@
|
|||||||
# Here are names that at least at one point were used within ROMIO.
|
# Here are names that at least at one point were used within ROMIO.
|
||||||
# We should look at these and decide which we wish to allow and which
|
# We should look at these and decide which we wish to allow and which
|
||||||
# should be replaced with something more ROMIO-specific.
|
# should be replaced with something more ROMIO-specific.
|
||||||
%romioDefines = ( 'ROMIO_[A-Za-z0-9_]+' => romio,
|
%romioDefines = ( 'ROMIO_[A-Za-z0-9_]+' => romio,
|
||||||
'PROFILE' => romio,
|
'PROFILE' => romio,
|
||||||
'PRINT_ERR_MSG' => romio,
|
'PRINT_ERR_MSG' => romio,
|
||||||
'HPUX' => romio,
|
'HPUX' => romio,
|
||||||
'SPPUX'=> romio,
|
'SPPUX'=> romio,
|
||||||
'SX4'=> romio,
|
'SX4'=> romio,
|
||||||
@ -51,5 +51,5 @@
|
|||||||
if (defined(&PushDefinesNames)) {
|
if (defined(&PushDefinesNames)) {
|
||||||
&PushDefinesNames( "romioDefines", "tree", "add" );
|
&PushDefinesNames( "romioDefines", "tree", "add" );
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
13
ompi/mca/io/romio321/romio/.gitignore
поставляемый
Обычный файл
13
ompi/mca/io/romio321/romio/.gitignore
поставляемый
Обычный файл
@ -0,0 +1,13 @@
|
|||||||
|
/Makefile
|
||||||
|
/.deps
|
||||||
|
/*.bb
|
||||||
|
/*.bbg
|
||||||
|
/*.gcda
|
||||||
|
/*.gcno
|
||||||
|
/.libs
|
||||||
|
/.libstamp*
|
||||||
|
/*.lo
|
||||||
|
/.*-cache
|
||||||
|
.state-cache
|
||||||
|
version.m4
|
||||||
|
confdb/config.rpath
|
1032
ompi/mca/io/romio321/romio/2.diff
Обычный файл
1032
ompi/mca/io/romio321/romio/2.diff
Обычный файл
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
36
ompi/mca/io/romio321/romio/3.diff
Обычный файл
36
ompi/mca/io/romio321/romio/3.diff
Обычный файл
@ -0,0 +1,36 @@
|
|||||||
|
commit ae17908f35ee614071ec68eb4643286f7b707e86
|
||||||
|
Author: Nathan Hjelm <hjelmn@lanl.gov>
|
||||||
|
Date: Tue May 1 15:11:34 2018 -0600
|
||||||
|
|
||||||
|
io/romio314: fix two more MPI-3 compliance issues
|
||||||
|
|
||||||
|
Signed-off-by: Nathan Hjelm <hjelmn@lanl.gov>
|
||||||
|
|
||||||
|
diff --git a/ompi/mca/io/romio314/romio/adio/common/cb_config_list.c b/ompi/mca/io/romio314/romio/adio/common/cb_config_list.c
|
||||||
|
index 718205b..e9f3116 100644
|
||||||
|
--- a/ompi/mca/io/romio314/romio/adio/common/cb_config_list.c
|
||||||
|
+++ b/ompi/mca/io/romio314/romio/adio/common/cb_config_list.c
|
||||||
|
@@ -135,8 +135,8 @@ int ADIOI_cb_gather_name_array(MPI_Comm comm,
|
||||||
|
|
||||||
|
if (ADIOI_cb_config_list_keyval == MPI_KEYVAL_INVALID) {
|
||||||
|
/* cleaned up by ADIOI_End_call */
|
||||||
|
- MPI_Comm_create_keyval((MPI_Copy_function *) ADIOI_cb_copy_name_array,
|
||||||
|
- (MPI_Delete_function *) ADIOI_cb_delete_name_array,
|
||||||
|
+ MPI_Comm_create_keyval((MPI_Comm_copy_attr_function *) ADIOI_cb_copy_name_array,
|
||||||
|
+ (MPI_Comm_delete_attr_function *) ADIOI_cb_delete_name_array,
|
||||||
|
&ADIOI_cb_config_list_keyval, NULL);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
diff --git a/ompi/mca/io/romio314/romio/mpi-io/mpioimpl.h b/ompi/mca/io/romio314/romio/mpi-io/mpioimpl.h
|
||||||
|
index a73561a..ff13723 100644
|
||||||
|
--- a/ompi/mca/io/romio314/romio/mpi-io/mpioimpl.h
|
||||||
|
+++ b/ompi/mca/io/romio314/romio/mpi-io/mpioimpl.h
|
||||||
|
@@ -58,7 +58,7 @@ struct MPIR_Info {
|
||||||
|
|
||||||
|
#define MPIR_INFO_COOKIE 5835657
|
||||||
|
|
||||||
|
-MPI_Delete_function ADIOI_End_call;
|
||||||
|
+MPI_Comm_delete_attr_function ADIOI_End_call;
|
||||||
|
|
||||||
|
/* common initialization routine */
|
||||||
|
void MPIR_MPIOInit(int * error_code);
|
@ -7,11 +7,11 @@ all source listings of the code.
|
|||||||
Copyright (C) 1997 University of Chicago
|
Copyright (C) 1997 University of Chicago
|
||||||
|
|
||||||
Permission is hereby granted to use, reproduce, prepare derivative
|
Permission is hereby granted to use, reproduce, prepare derivative
|
||||||
works, and to redistribute to others.
|
works, and to redistribute to others.
|
||||||
|
|
||||||
The University of Chicago makes no representations as to the suitability,
|
The University of Chicago makes no representations as to the suitability,
|
||||||
operability, accuracy, or correctness of this software for any purpose.
|
operability, accuracy, or correctness of this software for any purpose.
|
||||||
It is provided "as is" without express or implied warranty.
|
It is provided "as is" without express or implied warranty.
|
||||||
|
|
||||||
This software was authored by:
|
This software was authored by:
|
||||||
Rajeev Thakur: (630) 252-1682; thakur@mcs.anl.gov
|
Rajeev Thakur: (630) 252-1682; thakur@mcs.anl.gov
|
||||||
@ -26,7 +26,7 @@ Government Contract and are subject to the following license: the
|
|||||||
Government is granted for itself and others acting on its behalf a
|
Government is granted for itself and others acting on its behalf a
|
||||||
paid-up, nonexclusive, irrevocable worldwide license in this computer
|
paid-up, nonexclusive, irrevocable worldwide license in this computer
|
||||||
software to reproduce, prepare derivative works, and perform publicly
|
software to reproduce, prepare derivative works, and perform publicly
|
||||||
and display publicly.
|
and display publicly.
|
||||||
|
|
||||||
DISCLAIMER
|
DISCLAIMER
|
||||||
|
|
||||||
@ -37,5 +37,5 @@ of their employees, makes any warranty express or implied, or assumes
|
|||||||
any legal liability or responsibility for the accuracy, completeness,
|
any legal liability or responsibility for the accuracy, completeness,
|
||||||
or usefulness of any information, apparatus, product, or process
|
or usefulness of any information, apparatus, product, or process
|
||||||
disclosed, or represents that its use would not infringe privately
|
disclosed, or represents that its use would not infringe privately
|
||||||
owned rights.
|
owned rights.
|
||||||
|
|
@ -33,11 +33,11 @@ include $(top_srcdir)/Makefile.options
|
|||||||
ACLOCAL_AMFLAGS = -I confdb
|
ACLOCAL_AMFLAGS = -I confdb
|
||||||
|
|
||||||
# empty variable initializations so that later code can append (+=)
|
# empty variable initializations so that later code can append (+=)
|
||||||
include_HEADERS =
|
include_HEADERS =
|
||||||
nodist_include_HEADERS =
|
nodist_include_HEADERS =
|
||||||
noinst_HEADERS =
|
noinst_HEADERS =
|
||||||
EXTRA_DIST =
|
EXTRA_DIST =
|
||||||
SUFFIXES =
|
SUFFIXES =
|
||||||
doc1_src_txt =
|
doc1_src_txt =
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
@ -47,14 +47,14 @@ doc1_src_txt =
|
|||||||
# In MPICH these will have an MPI_ and a PMPI_ version. Other implementations
|
# In MPICH these will have an MPI_ and a PMPI_ version. Other implementations
|
||||||
# (like OMPI) only want these to be MPI_ routines, possibly with some
|
# (like OMPI) only want these to be MPI_ routines, possibly with some
|
||||||
# name-shifting prefix.
|
# name-shifting prefix.
|
||||||
romio_mpi_sources =
|
romio_mpi_sources =
|
||||||
|
|
||||||
# regular old source files that implement ROMIO, such as ADIO code
|
# regular old source files that implement ROMIO, such as ADIO code
|
||||||
romio_other_sources =
|
romio_other_sources =
|
||||||
|
|
||||||
# code that may need to be "up" called from the MPI library and/or is
|
# code that may need to be "up" called from the MPI library and/or is
|
||||||
# MPI-implementation-specific in some way
|
# MPI-implementation-specific in some way
|
||||||
glue_sources =
|
glue_sources =
|
||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
# when building under MPICH we must be able to find mpi.h
|
# when building under MPICH we must be able to find mpi.h
|
||||||
@ -102,7 +102,7 @@ if BUILD_PROFILING_LIB
|
|||||||
# won't work very well the other way around.
|
# won't work very well the other way around.
|
||||||
noinst_LTLIBRARIES += libpromio.la
|
noinst_LTLIBRARIES += libpromio.la
|
||||||
libpromio_la_SOURCES = $(romio_mpi_sources)
|
libpromio_la_SOURCES = $(romio_mpi_sources)
|
||||||
libpromio_la_CPPFLAGS = $(AM_CPPFLAGS) -DMPIO_BUILD_PROFILING
|
libpromio_la_CPPFLAGS = $(AM_CPPFLAGS) -DMPIO_BUILD_PROFILING
|
||||||
endif BUILD_PROFILING_LIB
|
endif BUILD_PROFILING_LIB
|
||||||
|
|
||||||
else !BUILD_ROMIO_EMBEDDED
|
else !BUILD_ROMIO_EMBEDDED
|
@ -23,11 +23,11 @@ Major Changes in this version:
|
|||||||
|
|
||||||
PanFS allows users to specify the layout of a file at file-creation time.
|
PanFS allows users to specify the layout of a file at file-creation time.
|
||||||
Layout information includes the number of StorageBlades (SB)
|
Layout information includes the number of StorageBlades (SB)
|
||||||
across which the data is stored, the number of SBs across which a
|
across which the data is stored, the number of SBs across which a
|
||||||
parity stripe is written, and the number of consecutive stripes that
|
parity stripe is written, and the number of consecutive stripes that
|
||||||
are placed on the same set of SBs. The panfs_layout_* hints are only
|
are placed on the same set of SBs. The panfs_layout_* hints are only
|
||||||
used if supplied at file-creation time.
|
used if supplied at file-creation time.
|
||||||
|
|
||||||
panfs_layout_type - Specifies the layout of a file:
|
panfs_layout_type - Specifies the layout of a file:
|
||||||
2 = RAID0
|
2 = RAID0
|
||||||
3 = RAID5 Parity Stripes
|
3 = RAID5 Parity Stripes
|
||||||
@ -35,37 +35,37 @@ Major Changes in this version:
|
|||||||
panfs_layout_total_num_comps - The total number of StorageBlades a file
|
panfs_layout_total_num_comps - The total number of StorageBlades a file
|
||||||
is striped across.
|
is striped across.
|
||||||
panfs_layout_parity_stripe_width - If the layout type is RAID5 Parity
|
panfs_layout_parity_stripe_width - If the layout type is RAID5 Parity
|
||||||
Stripes, this hint specifies the
|
Stripes, this hint specifies the
|
||||||
number of StorageBlades in a parity
|
number of StorageBlades in a parity
|
||||||
stripe.
|
stripe.
|
||||||
panfs_layout_parity_stripe_depth - If the layout type is RAID5 Parity
|
panfs_layout_parity_stripe_depth - If the layout type is RAID5 Parity
|
||||||
Stripes, this hint specifies the
|
Stripes, this hint specifies the
|
||||||
number of contiguous parity stripes written
|
number of contiguous parity stripes written
|
||||||
across the same set of SBs.
|
across the same set of SBs.
|
||||||
panfs_layout_visit_policy - If the layout type is RAID5 Parity Stripes,
|
panfs_layout_visit_policy - If the layout type is RAID5 Parity Stripes,
|
||||||
the policy used to determine the parity
|
the policy used to determine the parity
|
||||||
stripe a given file offset is written to:
|
stripe a given file offset is written to:
|
||||||
1 = Round Robin
|
1 = Round Robin
|
||||||
|
|
||||||
PanFS supports the "concurrent write" (CW) mode, where groups of cooperating
|
PanFS supports the "concurrent write" (CW) mode, where groups of cooperating
|
||||||
clients can disable the PanFS consistency mechanisms and use their own
|
clients can disable the PanFS consistency mechanisms and use their own
|
||||||
consistency protocol. Clients participating in concurrent write mode use
|
consistency protocol. Clients participating in concurrent write mode use
|
||||||
application specific information to improve performance while maintaining
|
application specific information to improve performance while maintaining
|
||||||
file consistency. All clients accessing the file(s) must enable concurrent
|
file consistency. All clients accessing the file(s) must enable concurrent
|
||||||
write mode. If any client does not enable concurrent write mode, then the
|
write mode. If any client does not enable concurrent write mode, then the
|
||||||
PanFS consistency protocol will be invoked. Once a file is opened in CW mode
|
PanFS consistency protocol will be invoked. Once a file is opened in CW mode
|
||||||
on a machine, attempts to open a file in non-CW mode will fail with
|
on a machine, attempts to open a file in non-CW mode will fail with
|
||||||
EACCES. If a file is already opened in non-CW mode, attempts to open
|
EACCES. If a file is already opened in non-CW mode, attempts to open
|
||||||
the file in CW mode will fail with EACCES. The following hint is
|
the file in CW mode will fail with EACCES. The following hint is
|
||||||
used to enable concurrent write mode.
|
used to enable concurrent write mode.
|
||||||
|
|
||||||
panfs_concurrent_write - If set to 1 at file open time, the file
|
panfs_concurrent_write - If set to 1 at file open time, the file
|
||||||
is opened using the PanFS concurrent write
|
is opened using the PanFS concurrent write
|
||||||
mode flag. Concurrent write mode is not a
|
mode flag. Concurrent write mode is not a
|
||||||
persistent attribute of the file.
|
persistent attribute of the file.
|
||||||
|
|
||||||
Below is an example PanFS layout using the following parameters:
|
Below is an example PanFS layout using the following parameters:
|
||||||
|
|
||||||
- panfs_layout_type = 3
|
- panfs_layout_type = 3
|
||||||
- panfs_layout_total_num_comps = 100
|
- panfs_layout_total_num_comps = 100
|
||||||
- panfs_layout_parity_stripe_width = 10
|
- panfs_layout_parity_stripe_width = 10
|
||||||
@ -89,7 +89,7 @@ Major Changes in this version:
|
|||||||
...
|
...
|
||||||
|
|
||||||
* Initial support for the Globus GridFTP filesystem. Work contributed by Troy
|
* Initial support for the Globus GridFTP filesystem. Work contributed by Troy
|
||||||
Baer (troy@osc.edu).
|
Baer (troy@osc.edu).
|
||||||
|
|
||||||
Major Changes in Version 1.2.5:
|
Major Changes in Version 1.2.5:
|
||||||
------------------------------
|
------------------------------
|
||||||
@ -108,7 +108,7 @@ Major Changes in Version 1.2.5:
|
|||||||
|
|
||||||
Major Changes in Version 1.2.4:
|
Major Changes in Version 1.2.4:
|
||||||
------------------------------
|
------------------------------
|
||||||
* Added section describing ROMIO MPI_FILE_SYNC and MPI_FILE_CLOSE behavior to
|
* Added section describing ROMIO MPI_FILE_SYNC and MPI_FILE_CLOSE behavior to
|
||||||
User's Guide
|
User's Guide
|
||||||
|
|
||||||
* Bug removed from PVFS ADIO implementation regarding resize operations
|
* Bug removed from PVFS ADIO implementation regarding resize operations
|
||||||
@ -136,7 +136,7 @@ Major Changes in Version 1.2.3:
|
|||||||
Major Changes in Version 1.0.3:
|
Major Changes in Version 1.0.3:
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
* When used with MPICH 1.2.1, the MPI-IO functions return proper error codes
|
* When used with MPICH 1.2.1, the MPI-IO functions return proper error codes
|
||||||
and classes, and the status object is filled in.
|
and classes, and the status object is filled in.
|
||||||
|
|
||||||
* On SGI's XFS file system, ROMIO can use direct I/O even if the
|
* On SGI's XFS file system, ROMIO can use direct I/O even if the
|
||||||
@ -144,12 +144,12 @@ Major Changes in Version 1.0.3:
|
|||||||
direct I/O. ROMIO does this by doing part of the request with
|
direct I/O. ROMIO does this by doing part of the request with
|
||||||
buffered I/O (until all the restrictions are met) and doing the rest
|
buffered I/O (until all the restrictions are met) and doing the rest
|
||||||
with direct I/O. (This feature hasn't been tested rigorously. Please
|
with direct I/O. (This feature hasn't been tested rigorously. Please
|
||||||
check for errors.)
|
check for errors.)
|
||||||
|
|
||||||
By default, ROMIO will use only buffered I/O. Direct I/O can be
|
By default, ROMIO will use only buffered I/O. Direct I/O can be
|
||||||
enabled either by setting the environment variables MPIO_DIRECT_READ
|
enabled either by setting the environment variables MPIO_DIRECT_READ
|
||||||
and/or MPIO_DIRECT_WRITE to TRUE, or on a per-file basis by using
|
and/or MPIO_DIRECT_WRITE to TRUE, or on a per-file basis by using
|
||||||
the info keys "direct_read" and "direct_write".
|
the info keys "direct_read" and "direct_write".
|
||||||
|
|
||||||
Direct I/O will result in higher performance only if you are
|
Direct I/O will result in higher performance only if you are
|
||||||
accessing a high-bandwidth disk system. Otherwise, buffered I/O is
|
accessing a high-bandwidth disk system. Otherwise, buffered I/O is
|
||||||
@ -166,51 +166,51 @@ Major Changes Version 1.0.2:
|
|||||||
components of the MPI I/O chapter not yet implemented are
|
components of the MPI I/O chapter not yet implemented are
|
||||||
file interoperability and error handling.
|
file interoperability and error handling.
|
||||||
|
|
||||||
* Added support for using "direct I/O" on SGI's XFS file system.
|
* Added support for using "direct I/O" on SGI's XFS file system.
|
||||||
Direct I/O is an optional feature of XFS in which data is moved
|
Direct I/O is an optional feature of XFS in which data is moved
|
||||||
directly between the user's buffer and the storage devices, bypassing
|
directly between the user's buffer and the storage devices, bypassing
|
||||||
the file-system cache. This can improve performance significantly on
|
the file-system cache. This can improve performance significantly on
|
||||||
systems with high disk bandwidth. Without high disk bandwidth,
|
systems with high disk bandwidth. Without high disk bandwidth,
|
||||||
regular I/O (that uses the file-system cache) perfoms better.
|
regular I/O (that uses the file-system cache) perfoms better.
|
||||||
ROMIO, therefore, does not use direct I/O by default. The user can
|
ROMIO, therefore, does not use direct I/O by default. The user can
|
||||||
turn on direct I/O (separately for reading and writing) either by
|
turn on direct I/O (separately for reading and writing) either by
|
||||||
using environment variables or by using MPI's hints mechanism (info).
|
using environment variables or by using MPI's hints mechanism (info).
|
||||||
To use the environment-variables method, do
|
To use the environment-variables method, do
|
||||||
setenv MPIO_DIRECT_READ TRUE
|
setenv MPIO_DIRECT_READ TRUE
|
||||||
setenv MPIO_DIRECT_WRITE TRUE
|
setenv MPIO_DIRECT_WRITE TRUE
|
||||||
To use the hints method, the two keys are "direct_read" and "direct_write".
|
To use the hints method, the two keys are "direct_read" and "direct_write".
|
||||||
By default their values are "false". To turn on direct I/O, set the values
|
By default their values are "false". To turn on direct I/O, set the values
|
||||||
to "true". The environment variables have priority over the info keys.
|
to "true". The environment variables have priority over the info keys.
|
||||||
In other words, if the environment variables are set to TRUE, direct I/O
|
In other words, if the environment variables are set to TRUE, direct I/O
|
||||||
will be used even if the info keys say "false", and vice versa.
|
will be used even if the info keys say "false", and vice versa.
|
||||||
Note that direct I/O must be turned on separately for reading
|
Note that direct I/O must be turned on separately for reading
|
||||||
and writing.
|
and writing.
|
||||||
The environment-variables method assumes that the environment
|
The environment-variables method assumes that the environment
|
||||||
variables can be read by each process in the MPI job. This is
|
variables can be read by each process in the MPI job. This is
|
||||||
not guaranteed by the MPI Standard, but it works with SGI's MPI
|
not guaranteed by the MPI Standard, but it works with SGI's MPI
|
||||||
and the ch_shmem device of MPICH.
|
and the ch_shmem device of MPICH.
|
||||||
|
|
||||||
* Added support (new ADIO device, ad_pvfs) for the PVFS parallel
|
* Added support (new ADIO device, ad_pvfs) for the PVFS parallel
|
||||||
file system for Linux clusters, developed at Clemson University
|
file system for Linux clusters, developed at Clemson University
|
||||||
(see http://www.parl.clemson.edu/pvfs ). To use it, you must first install
|
(see http://www.parl.clemson.edu/pvfs ). To use it, you must first install
|
||||||
PVFS and then when configuring ROMIO, specify "-file_system=pvfs" in
|
PVFS and then when configuring ROMIO, specify "-file_system=pvfs" in
|
||||||
addition to any other options to "configure". (As usual, you can configure
|
addition to any other options to "configure". (As usual, you can configure
|
||||||
for multiple file systems by using "+"; for example,
|
for multiple file systems by using "+"; for example,
|
||||||
"-file_system=pvfs+ufs+nfs".) You will need to specify the path
|
"-file_system=pvfs+ufs+nfs".) You will need to specify the path
|
||||||
to the PVFS include files via the "-cflags" option to configure,
|
to the PVFS include files via the "-cflags" option to configure,
|
||||||
for example, "configure -cflags=-I/usr/pvfs/include". You
|
for example, "configure -cflags=-I/usr/pvfs/include". You
|
||||||
will also need to specify the full path name of the PVFS library.
|
will also need to specify the full path name of the PVFS library.
|
||||||
The best way to do this is via the "-lib" option to MPICH's
|
The best way to do this is via the "-lib" option to MPICH's
|
||||||
configure script (assuming you are using ROMIO from within MPICH).
|
configure script (assuming you are using ROMIO from within MPICH).
|
||||||
|
|
||||||
* Uses weak symbols (where available) for building the profiling version,
|
* Uses weak symbols (where available) for building the profiling version,
|
||||||
i.e., the PMPI routines. As a result, the size of the library is reduced
|
i.e., the PMPI routines. As a result, the size of the library is reduced
|
||||||
considerably.
|
considerably.
|
||||||
|
|
||||||
* The Makefiles use "virtual paths" if supported by the make utility. GNU make
|
* The Makefiles use "virtual paths" if supported by the make utility. GNU make
|
||||||
supports it, for example. This feature allows you to untar the
|
supports it, for example. This feature allows you to untar the
|
||||||
distribution in some directory, say a slow NFS directory,
|
distribution in some directory, say a slow NFS directory,
|
||||||
and compile the library (the .o files) in another
|
and compile the library (the .o files) in another
|
||||||
directory, say on a faster local disk. For example, if the tar file
|
directory, say on a faster local disk. For example, if the tar file
|
||||||
has been untarred in an NFS directory called /home/thakur/romio,
|
has been untarred in an NFS directory called /home/thakur/romio,
|
||||||
one can compile it in a different directory, say /tmp/thakur, as follows:
|
one can compile it in a different directory, say /tmp/thakur, as follows:
|
||||||
@ -228,8 +228,8 @@ Major Changes Version 1.0.2:
|
|||||||
|
|
||||||
* This version is included in MPICH 1.2.0. If you are using MPICH, you
|
* This version is included in MPICH 1.2.0. If you are using MPICH, you
|
||||||
need not download ROMIO separately; it gets built as part of MPICH.
|
need not download ROMIO separately; it gets built as part of MPICH.
|
||||||
The previous version of ROMIO is included in LAM, HP MPI, SGI MPI, and
|
The previous version of ROMIO is included in LAM, HP MPI, SGI MPI, and
|
||||||
NEC MPI. NEC has also implemented the MPI-IO functions missing
|
NEC MPI. NEC has also implemented the MPI-IO functions missing
|
||||||
in ROMIO, and therefore NEC MPI has a complete implementation
|
in ROMIO, and therefore NEC MPI has a complete implementation
|
||||||
of MPI-IO.
|
of MPI-IO.
|
||||||
|
|
||||||
@ -242,10 +242,10 @@ Major Changes in Version 1.0.1:
|
|||||||
* Added support for NEC SX-4 and created a new device ad_sfs for
|
* Added support for NEC SX-4 and created a new device ad_sfs for
|
||||||
NEC SFS file system.
|
NEC SFS file system.
|
||||||
|
|
||||||
* New devices ad_hfs for HP/Convex HFS file system and ad_xfs for
|
* New devices ad_hfs for HP/Convex HFS file system and ad_xfs for
|
||||||
SGI XFS file system.
|
SGI XFS file system.
|
||||||
|
|
||||||
* Users no longer need to prefix the filename with the type of
|
* Users no longer need to prefix the filename with the type of
|
||||||
file system; ROMIO determines the file-system type on its own.
|
file system; ROMIO determines the file-system type on its own.
|
||||||
|
|
||||||
* Added support for 64-bit file sizes on IBM PIOFS, SGI XFS,
|
* Added support for 64-bit file sizes on IBM PIOFS, SGI XFS,
|
||||||
@ -254,27 +254,27 @@ Major Changes in Version 1.0.1:
|
|||||||
* MPI_Offset is an 8-byte integer on machines that support 8-byte integers.
|
* MPI_Offset is an 8-byte integer on machines that support 8-byte integers.
|
||||||
It is of type "long long" in C and "integer*8" in Fortran.
|
It is of type "long long" in C and "integer*8" in Fortran.
|
||||||
With a Fortran 90 compiler, you can use either integer*8 or
|
With a Fortran 90 compiler, you can use either integer*8 or
|
||||||
integer(kind=MPI_OFFSET_KIND).
|
integer(kind=MPI_OFFSET_KIND).
|
||||||
If you printf an MPI_Offset in C, remember to use %lld
|
If you printf an MPI_Offset in C, remember to use %lld
|
||||||
or %ld as required by your compiler. (See what is used in the test
|
or %ld as required by your compiler. (See what is used in the test
|
||||||
program romio/test/misc.c.)
|
program romio/test/misc.c.)
|
||||||
|
|
||||||
* On some machines, ROMIO detects at configure time that "long long" is
|
* On some machines, ROMIO detects at configure time that "long long" is
|
||||||
either not supported by the C compiler or it doesn't work properly.
|
either not supported by the C compiler or it doesn't work properly.
|
||||||
In such cases, configure sets MPI_Offset to long in C and integer in
|
In such cases, configure sets MPI_Offset to long in C and integer in
|
||||||
Fortran. This happens on Intel Paragon, Sun4, and FreeBSD.
|
Fortran. This happens on Intel Paragon, Sun4, and FreeBSD.
|
||||||
|
|
||||||
* Added support for passing hints to the implementation via the MPI_Info
|
* Added support for passing hints to the implementation via the MPI_Info
|
||||||
parameter. ROMIO understands the following hints (keys in MPI_Info object):
|
parameter. ROMIO understands the following hints (keys in MPI_Info object):
|
||||||
|
|
||||||
/* on all file systems */
|
/* on all file systems */
|
||||||
cb_buffer_size - buffer size for collective I/O
|
cb_buffer_size - buffer size for collective I/O
|
||||||
cb_nodes - no. of processes that actually perform I/O in collective I/O
|
cb_nodes - no. of processes that actually perform I/O in collective I/O
|
||||||
ind_rd_buffer_size - buffer size for data sieving in independent reads
|
ind_rd_buffer_size - buffer size for data sieving in independent reads
|
||||||
|
|
||||||
/* on all file systems except IBM PIOFS */
|
/* on all file systems except IBM PIOFS */
|
||||||
ind_wr_buffer_size - buffer size for data sieving in independent writes
|
ind_wr_buffer_size - buffer size for data sieving in independent writes
|
||||||
/* ind_wr_buffer_size is ignored on PIOFS because data sieving
|
/* ind_wr_buffer_size is ignored on PIOFS because data sieving
|
||||||
cannot be done for writes since PIOFS doesn't support file locking */
|
cannot be done for writes since PIOFS doesn't support file locking */
|
||||||
|
|
||||||
/* on Intel PFS and IBM PIOFS only. These hints are understood only if
|
/* on Intel PFS and IBM PIOFS only. These hints are understood only if
|
||||||
@ -285,16 +285,16 @@ Major Changes in Version 1.0.1:
|
|||||||
striping (between 0 and (striping_factor-1))
|
striping (between 0 and (striping_factor-1))
|
||||||
|
|
||||||
/* on Intel PFS only. */
|
/* on Intel PFS only. */
|
||||||
pfs_svr_buf - turn on or off PFS server buffering by setting the value
|
pfs_svr_buf - turn on or off PFS server buffering by setting the value
|
||||||
to "true" or "false", case-sensitive.
|
to "true" or "false", case-sensitive.
|
||||||
|
|
||||||
If ROMIO doesn't understand a hint, or if the value is invalid, the hint
|
If ROMIO doesn't understand a hint, or if the value is invalid, the hint
|
||||||
will be ignored. The values of hints being used by ROMIO at any time
|
will be ignored. The values of hints being used by ROMIO at any time
|
||||||
can be obtained via MPI_File_get_info.
|
can be obtained via MPI_File_get_info.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
General Information
|
General Information
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
ROMIO is a high-performance, portable implementation of MPI-IO (the
|
ROMIO is a high-performance, portable implementation of MPI-IO (the
|
||||||
@ -311,7 +311,7 @@ accessing arrays stored in files. The functions MPI_File_f2c and
|
|||||||
MPI_File_c2f (Sec. 4.12.4) are also implemented.
|
MPI_File_c2f (Sec. 4.12.4) are also implemented.
|
||||||
|
|
||||||
C, Fortran, and profiling interfaces are provided for all functions
|
C, Fortran, and profiling interfaces are provided for all functions
|
||||||
that have been implemented.
|
that have been implemented.
|
||||||
|
|
||||||
Please read the limitations of this version of ROMIO that are listed
|
Please read the limitations of this version of ROMIO that are listed
|
||||||
below (e.g., MPIO_Request object, restriction to homogeneous
|
below (e.g., MPIO_Request object, restriction to homogeneous
|
||||||
@ -326,7 +326,7 @@ SFS, PVFS, NFS, and any Unix file system (UFS).
|
|||||||
|
|
||||||
This version of ROMIO is included in MPICH 1.2.3; an earlier version
|
This version of ROMIO is included in MPICH 1.2.3; an earlier version
|
||||||
is included in at least the following MPI implementations: LAM, HP
|
is included in at least the following MPI implementations: LAM, HP
|
||||||
MPI, SGI MPI, and NEC MPI.
|
MPI, SGI MPI, and NEC MPI.
|
||||||
|
|
||||||
Note that proper I/O error codes and classes are returned and the
|
Note that proper I/O error codes and classes are returned and the
|
||||||
status variable is filled only when used with MPICH 1.2.1 or later.
|
status variable is filled only when used with MPICH 1.2.1 or later.
|
||||||
@ -358,16 +358,16 @@ performance, but it is necessary for correct behavior.
|
|||||||
|
|
||||||
The following are some instructions we received from Ian Wells of HP
|
The following are some instructions we received from Ian Wells of HP
|
||||||
for setting the noac option on NFS. We have not tried them
|
for setting the noac option on NFS. We have not tried them
|
||||||
ourselves. We are including them here because you may find
|
ourselves. We are including them here because you may find
|
||||||
them useful. Note that some of the steps may be specific to HP
|
them useful. Note that some of the steps may be specific to HP
|
||||||
systems, and you may need root permission to execute some of the
|
systems, and you may need root permission to execute some of the
|
||||||
commands.
|
commands.
|
||||||
|
|
||||||
>1. first confirm you are running nfs version 3
|
>1. first confirm you are running nfs version 3
|
||||||
>
|
>
|
||||||
>rpcnfo -p `hostname` | grep nfs
|
>rpcnfo -p `hostname` | grep nfs
|
||||||
>
|
>
|
||||||
>ie
|
>ie
|
||||||
> goedel >rpcinfo -p goedel | grep nfs
|
> goedel >rpcinfo -p goedel | grep nfs
|
||||||
> 100003 2 udp 2049 nfs
|
> 100003 2 udp 2049 nfs
|
||||||
> 100003 3 udp 2049 nfs
|
> 100003 3 udp 2049 nfs
|
||||||
@ -379,11 +379,11 @@ commands.
|
|||||||
> Here is an example of a correct fstab entry for /epm1:
|
> Here is an example of a correct fstab entry for /epm1:
|
||||||
>
|
>
|
||||||
> ie grep epm1 /etc/fstab
|
> ie grep epm1 /etc/fstab
|
||||||
>
|
>
|
||||||
> ROOOOT 11>grep epm1 /etc/fstab
|
> ROOOOT 11>grep epm1 /etc/fstab
|
||||||
> gershwin:/epm1 /rmt/gershwin/epm1 nfs bg,intr,noac 0 0
|
> gershwin:/epm1 /rmt/gershwin/epm1 nfs bg,intr,noac 0 0
|
||||||
>
|
>
|
||||||
> if the noac option is not present, add it
|
> if the noac option is not present, add it
|
||||||
> and then remount this directory
|
> and then remount this directory
|
||||||
> on each of the machines that will be used to share MPIO files
|
> on each of the machines that will be used to share MPIO files
|
||||||
>
|
>
|
||||||
@ -394,7 +394,7 @@ commands.
|
|||||||
>
|
>
|
||||||
>3. Confirm that the directory is mounted noac:
|
>3. Confirm that the directory is mounted noac:
|
||||||
>
|
>
|
||||||
>ROOOOT >grep gershwin /etc/mnttab
|
>ROOOOT >grep gershwin /etc/mnttab
|
||||||
>gershwin:/epm1 /rmt/gershwin/epm1 nfs
|
>gershwin:/epm1 /rmt/gershwin/epm1 nfs
|
||||||
>noac,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0 0 0 899911504
|
>noac,acregmin=0,acregmax=0,acdirmin=0,acdirmax=0 0 0 899911504
|
||||||
|
|
||||||
@ -424,8 +424,8 @@ THEN
|
|||||||
make
|
make
|
||||||
|
|
||||||
Some example programs and a Makefile are provided in the romio/test directory.
|
Some example programs and a Makefile are provided in the romio/test directory.
|
||||||
Run the examples the way you would run any MPI program. Each program takes
|
Run the examples the way you would run any MPI program. Each program takes
|
||||||
the filename as a command-line argument "-fname filename".
|
the filename as a command-line argument "-fname filename".
|
||||||
|
|
||||||
The configure script by default configures ROMIO for the file systems
|
The configure script by default configures ROMIO for the file systems
|
||||||
most likely to be used on the given machine. If you wish, you can
|
most likely to be used on the given machine. If you wish, you can
|
||||||
@ -440,7 +440,7 @@ For the entire list of options to configure do
|
|||||||
./configure -h | more
|
./configure -h | more
|
||||||
|
|
||||||
After building a specific version as above, you can install it in a
|
After building a specific version as above, you can install it in a
|
||||||
particular directory with
|
particular directory with
|
||||||
|
|
||||||
make install PREFIX=/usr/local/romio (or whatever directory you like)
|
make install PREFIX=/usr/local/romio (or whatever directory you like)
|
||||||
|
|
||||||
@ -448,14 +448,14 @@ or just
|
|||||||
|
|
||||||
make install (if you used -prefix at configure time)
|
make install (if you used -prefix at configure time)
|
||||||
|
|
||||||
If you intend to leave ROMIO where you built it, you should NOT install it
|
If you intend to leave ROMIO where you built it, you should NOT install it
|
||||||
(install is used only to move the necessary parts of a built ROMIO to
|
(install is used only to move the necessary parts of a built ROMIO to
|
||||||
another location). The installed copy will have the include files,
|
another location). The installed copy will have the include files,
|
||||||
libraries, man pages, and a few other odds and ends, but not the whole
|
libraries, man pages, and a few other odds and ends, but not the whole
|
||||||
source tree. It will have a test directory for testing the
|
source tree. It will have a test directory for testing the
|
||||||
installation and a location-independent Makefile built during
|
installation and a location-independent Makefile built during
|
||||||
installation, which users can copy and modify to compile and link
|
installation, which users can copy and modify to compile and link
|
||||||
against the installed copy.
|
against the installed copy.
|
||||||
|
|
||||||
To rebuild ROMIO with a different set of configure options, do
|
To rebuild ROMIO with a different set of configure options, do
|
||||||
|
|
||||||
@ -471,7 +471,7 @@ Testing ROMIO
|
|||||||
|
|
||||||
To test if the installation works, do
|
To test if the installation works, do
|
||||||
|
|
||||||
make testing
|
make testing
|
||||||
|
|
||||||
in the romio/test directory. This calls a script that runs the test
|
in the romio/test directory. This calls a script that runs the test
|
||||||
programs and compares the results with what they should be. By
|
programs and compares the results with what they should be. By
|
||||||
@ -489,15 +489,15 @@ Compiling and Running MPI-IO Programs
|
|||||||
|
|
||||||
If ROMIO is not already included in the MPI implementation, you need
|
If ROMIO is not already included in the MPI implementation, you need
|
||||||
to include the file mpio.h for C or mpiof.h for Fortran in your MPI-IO
|
to include the file mpio.h for C or mpiof.h for Fortran in your MPI-IO
|
||||||
program.
|
program.
|
||||||
|
|
||||||
Note that on HP machines running HPUX and on NEC SX-4, you need to
|
Note that on HP machines running HPUX and on NEC SX-4, you need to
|
||||||
compile Fortran programs with mpifort, because the f77 compilers on
|
compile Fortran programs with mpifort, because the f77 compilers on
|
||||||
these machines don't support 8-byte integers.
|
these machines don't support 8-byte integers.
|
||||||
|
|
||||||
With MPICH, HP MPI, or NEC MPI, you can compile MPI-IO programs as
|
With MPICH, HP MPI, or NEC MPI, you can compile MPI-IO programs as
|
||||||
mpicc foo.c
|
mpicc foo.c
|
||||||
or
|
or
|
||||||
mpif77 foo.f
|
mpif77 foo.f
|
||||||
or
|
or
|
||||||
mpifort foo.f
|
mpifort foo.f
|
||||||
@ -505,14 +505,14 @@ or
|
|||||||
As mentioned above, mpifort is preferred over mpif77 on HPUX and NEC
|
As mentioned above, mpifort is preferred over mpif77 on HPUX and NEC
|
||||||
because the f77 compilers on those machines do not support 8-byte integers.
|
because the f77 compilers on those machines do not support 8-byte integers.
|
||||||
|
|
||||||
With SGI MPI, you can compile MPI-IO programs as
|
With SGI MPI, you can compile MPI-IO programs as
|
||||||
cc foo.c -lmpi
|
cc foo.c -lmpi
|
||||||
or
|
or
|
||||||
f77 foo.f -lmpi
|
f77 foo.f -lmpi
|
||||||
or
|
or
|
||||||
f90 foo.f -lmpi
|
f90 foo.f -lmpi
|
||||||
|
|
||||||
With LAM, you can compile MPI-IO programs as
|
With LAM, you can compile MPI-IO programs as
|
||||||
hcc foo.c -lmpi
|
hcc foo.c -lmpi
|
||||||
or
|
or
|
||||||
hf77 foo.f -lmpi
|
hf77 foo.f -lmpi
|
||||||
@ -530,7 +530,7 @@ an SGI machine, make sure that you use MPICH's mpirun and not SGI's
|
|||||||
mpirun.
|
mpirun.
|
||||||
|
|
||||||
The Makefile in the romio/test directory illustrates how to compile
|
The Makefile in the romio/test directory illustrates how to compile
|
||||||
and link MPI-IO programs.
|
and link MPI-IO programs.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -552,7 +552,7 @@ int MPIO_Test(MPIO_Request *request, int *flag, MPI_Status *status);
|
|||||||
int MPIO_Wait(MPIO_Request *request, MPI_Status *status);
|
int MPIO_Wait(MPIO_Request *request, MPI_Status *status);
|
||||||
|
|
||||||
The usual functions MPI_Test, MPI_Wait, MPI_Testany, etc., will not
|
The usual functions MPI_Test, MPI_Wait, MPI_Testany, etc., will not
|
||||||
work for nonblocking I/O.
|
work for nonblocking I/O.
|
||||||
|
|
||||||
* This version works only on a homogeneous cluster of machines,
|
* This version works only on a homogeneous cluster of machines,
|
||||||
and only the "native" file data representation is supported.
|
and only the "native" file data representation is supported.
|
||||||
@ -582,11 +582,11 @@ message from SGI MPI: ``MPI has run out of internal datatype
|
|||||||
entries. Please set the environment variable MPI_TYPE_MAX for
|
entries. Please set the environment variable MPI_TYPE_MAX for
|
||||||
additional space.'' If you get this error message, add this line to
|
additional space.'' If you get this error message, add this line to
|
||||||
your .cshrc file:
|
your .cshrc file:
|
||||||
setenv MPI_TYPE_MAX 65536
|
setenv MPI_TYPE_MAX 65536
|
||||||
Use a larger number if you still get the error message.
|
Use a larger number if you still get the error message.
|
||||||
|
|
||||||
* If a Fortran program uses a file handle created using ROMIO's C
|
* If a Fortran program uses a file handle created using ROMIO's C
|
||||||
interface, or vice-versa, you must use the functions MPI_File_c2f
|
interface, or vice-versa, you must use the functions MPI_File_c2f
|
||||||
or MPI_File_f2c. Such a situation occurs,
|
or MPI_File_f2c. Such a situation occurs,
|
||||||
for example, if a Fortran program uses an I/O library written in C
|
for example, if a Fortran program uses an I/O library written in C
|
||||||
with MPI-IO calls. Similar functions MPIO_Request_f2c and
|
with MPI-IO calls. Similar functions MPIO_Request_f2c and
|
||||||
@ -595,12 +595,12 @@ MPIO_Request_c2f are also provided.
|
|||||||
* For Fortran programs on the Intel Paragon, you may need
|
* For Fortran programs on the Intel Paragon, you may need
|
||||||
to provide the complete path to mpif.h in the include statement, e.g.,
|
to provide the complete path to mpif.h in the include statement, e.g.,
|
||||||
include '/usr/local/mpich/include/mpif.h'
|
include '/usr/local/mpich/include/mpif.h'
|
||||||
instead of
|
instead of
|
||||||
include 'mpif.h'
|
include 'mpif.h'
|
||||||
This is because the -I option to the Paragon Fortran compiler if77
|
This is because the -I option to the Paragon Fortran compiler if77
|
||||||
doesn't work correctly. It always looks in the default directories first
|
doesn't work correctly. It always looks in the default directories first
|
||||||
and, therefore, picks up Intel's mpif.h, which is actually the
|
and, therefore, picks up Intel's mpif.h, which is actually the
|
||||||
mpif.h of an older version of MPICH.
|
mpif.h of an older version of MPICH.
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -7,8 +7,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2001 University of Chicago.
|
* Copyright (C) 2001 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
#include "ad_gpfs.h"
|
#include "ad_gpfs.h"
|
||||||
@ -56,6 +56,8 @@ struct ADIOI_Fns_struct ADIO_GPFS_operations = {
|
|||||||
#elif PEPLATFORM
|
#elif PEPLATFORM
|
||||||
"GPFS+PE: IBM GPFS for PE",
|
"GPFS+PE: IBM GPFS for PE",
|
||||||
#else
|
#else
|
||||||
"GPFS: IBM GPFS"
|
"GPFS: IBM GPFS",
|
||||||
#endif
|
#endif
|
||||||
|
ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
|
||||||
|
ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
|
||||||
};
|
};
|
@ -7,8 +7,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -24,7 +24,9 @@
|
|||||||
#ifdef HAVE_SIGNAL_H
|
#ifdef HAVE_SIGNAL_H
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_AIO_H
|
#ifdef HAVE_AIO_LITE_H
|
||||||
|
#include <aio-lite.h>
|
||||||
|
#elif defined HAVE_AIO_H
|
||||||
#include <aio.h>
|
#include <aio.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -719,9 +719,9 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
|
|||||||
others_req[i].lens =
|
others_req[i].lens =
|
||||||
ADIOI_Malloc(count_others_req_per_proc[i]*sizeof(ADIO_Offset));
|
ADIOI_Malloc(count_others_req_per_proc[i]*sizeof(ADIO_Offset));
|
||||||
|
|
||||||
if ( (MPIR_Upint)others_req[i].offsets < (MPIR_Upint)recvBufForOffsets )
|
if ( (MPIU_Upint)others_req[i].offsets < (MPIU_Upint)recvBufForOffsets )
|
||||||
recvBufForOffsets = others_req[i].offsets;
|
recvBufForOffsets = others_req[i].offsets;
|
||||||
if ( (MPIR_Upint)others_req[i].lens < (MPIR_Upint)recvBufForLens )
|
if ( (MPIU_Upint)others_req[i].lens < (MPIU_Upint)recvBufForLens )
|
||||||
recvBufForLens = others_req[i].lens;
|
recvBufForLens = others_req[i].lens;
|
||||||
|
|
||||||
others_req[i].mem_ptrs = (MPI_Aint *)
|
others_req[i].mem_ptrs = (MPI_Aint *)
|
||||||
@ -750,13 +750,13 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
|
|||||||
for (i=0; i<nprocs; i++)
|
for (i=0; i<nprocs; i++)
|
||||||
{
|
{
|
||||||
if ( (my_req[i].count) &&
|
if ( (my_req[i].count) &&
|
||||||
((MPIR_Upint)my_req[i].offsets <= (MPIR_Upint)sendBufForOffsets) )
|
((MPIU_Upint)my_req[i].offsets <= (MPIU_Upint)sendBufForOffsets) )
|
||||||
{
|
{
|
||||||
sendBufForOffsets = my_req[i].offsets;
|
sendBufForOffsets = my_req[i].offsets;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (my_req[i].count) &&
|
if ( (my_req[i].count) &&
|
||||||
((MPIR_Upint)my_req[i].lens <= (MPIR_Upint)sendBufForLens) )
|
((MPIU_Upint)my_req[i].lens <= (MPIU_Upint)sendBufForLens) )
|
||||||
{
|
{
|
||||||
sendBufForLens = my_req[i].lens;
|
sendBufForLens = my_req[i].lens;
|
||||||
}
|
}
|
||||||
@ -775,9 +775,9 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
|
|||||||
sdispls[i] = 0;
|
sdispls[i] = 0;
|
||||||
else
|
else
|
||||||
sdispls[i] = (int)
|
sdispls[i] = (int)
|
||||||
( ( (MPIR_Upint)my_req[i].offsets -
|
( ( (MPIU_Upint)my_req[i].offsets -
|
||||||
(MPIR_Upint)sendBufForOffsets ) /
|
(MPIU_Upint)sendBufForOffsets ) /
|
||||||
(MPIR_Upint)sizeof(ADIO_Offset) );
|
(MPIU_Upint)sizeof(ADIO_Offset) );
|
||||||
|
|
||||||
/* Receive these offsets from process i.*/
|
/* Receive these offsets from process i.*/
|
||||||
rcounts[i] = count_others_req_per_proc[i];
|
rcounts[i] = count_others_req_per_proc[i];
|
||||||
@ -785,9 +785,9 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
|
|||||||
rdispls[i] = 0;
|
rdispls[i] = 0;
|
||||||
else
|
else
|
||||||
rdispls[i] = (int)
|
rdispls[i] = (int)
|
||||||
( ( (MPIR_Upint)others_req[i].offsets -
|
( ( (MPIU_Upint)others_req[i].offsets -
|
||||||
(MPIR_Upint)recvBufForOffsets ) /
|
(MPIU_Upint)recvBufForOffsets ) /
|
||||||
(MPIR_Upint)sizeof(ADIO_Offset) );
|
(MPIU_Upint)sizeof(ADIO_Offset) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exchange the offsets */
|
/* Exchange the offsets */
|
||||||
@ -809,9 +809,9 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
|
|||||||
sdispls[i] = 0;
|
sdispls[i] = 0;
|
||||||
else
|
else
|
||||||
sdispls[i] = (int)
|
sdispls[i] = (int)
|
||||||
( ( (MPIR_Upint)my_req[i].lens -
|
( ( (MPIU_Upint)my_req[i].lens -
|
||||||
(MPIR_Upint)sendBufForLens ) /
|
(MPIU_Upint)sendBufForLens ) /
|
||||||
(MPIR_Upint) sizeof(ADIO_Offset) );
|
(MPIU_Upint) sizeof(ADIO_Offset) );
|
||||||
|
|
||||||
/* Receive these offsets from process i. */
|
/* Receive these offsets from process i. */
|
||||||
rcounts[i] = count_others_req_per_proc[i];
|
rcounts[i] = count_others_req_per_proc[i];
|
||||||
@ -819,9 +819,9 @@ void ADIOI_GPFS_Calc_others_req(ADIO_File fd, int count_my_req_procs,
|
|||||||
rdispls[i] = 0;
|
rdispls[i] = 0;
|
||||||
else
|
else
|
||||||
rdispls[i] = (int)
|
rdispls[i] = (int)
|
||||||
( ( (MPIR_Upint)others_req[i].lens -
|
( ( (MPIU_Upint)others_req[i].lens -
|
||||||
(MPIR_Upint)recvBufForLens ) /
|
(MPIU_Upint)recvBufForLens ) /
|
||||||
(MPIR_Upint) sizeof(ADIO_Offset) );
|
(MPIU_Upint) sizeof(ADIO_Offset) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Exchange the lengths */
|
/* Exchange the lengths */
|
@ -7,8 +7,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
@ -7,9 +7,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
@ -7,8 +7,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -151,6 +151,6 @@ void ADIOI_GPFS_Open(ADIO_File fd, int *error_code)
|
|||||||
}
|
}
|
||||||
else *error_code = MPI_SUCCESS;
|
else *error_code = MPI_SUCCESS;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
*vim: ts=8 sts=4 sw=4 noexpandtab
|
*vim: ts=8 sts=4 sw=4 noexpandtab
|
||||||
*/
|
*/
|
@ -7,9 +7,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
datatype, int nprocs,
|
datatype, int nprocs,
|
||||||
int myrank, ADIOI_Access
|
int myrank, ADIOI_Access
|
||||||
*others_req, ADIO_Offset *offset_list,
|
*others_req, ADIO_Offset *offset_list,
|
||||||
ADIO_Offset *len_list, int contig_access_count,
|
ADIO_Offset *len_list, int contig_access_count,
|
||||||
ADIO_Offset
|
ADIO_Offset
|
||||||
min_st_offset, ADIO_Offset fd_size,
|
min_st_offset, ADIO_Offset fd_size,
|
||||||
ADIO_Offset *fd_start, ADIO_Offset *fd_end,
|
ADIO_Offset *fd_start, ADIO_Offset *fd_end,
|
||||||
@ -42,16 +42,16 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
||||||
*flat_buf, ADIO_Offset *offset_list, ADIO_Offset
|
*flat_buf, ADIO_Offset *offset_list, ADIO_Offset
|
||||||
*len_list, int *send_size, int *recv_size,
|
*len_list, int *send_size, int *recv_size,
|
||||||
int *count, int *start_pos,
|
int *count, int *start_pos,
|
||||||
int *partial_send,
|
int *partial_send,
|
||||||
int *recd_from_proc, int nprocs,
|
int *recd_from_proc, int nprocs,
|
||||||
int myrank, int
|
int myrank, int
|
||||||
buftype_is_contig, int contig_access_count,
|
buftype_is_contig, int contig_access_count,
|
||||||
ADIO_Offset min_st_offset,
|
ADIO_Offset min_st_offset,
|
||||||
ADIO_Offset fd_size,
|
ADIO_Offset fd_size,
|
||||||
ADIO_Offset *fd_start, ADIO_Offset *fd_end,
|
ADIO_Offset *fd_start, ADIO_Offset *fd_end,
|
||||||
ADIOI_Access *others_req,
|
ADIOI_Access *others_req,
|
||||||
int iter,
|
int iter,
|
||||||
MPI_Aint buftype_extent, int *buf_idx);
|
MPI_Aint buftype_extent, int *buf_idx);
|
||||||
static void ADIOI_R_Exchange_data_alltoallv(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
static void ADIOI_R_Exchange_data_alltoallv(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
||||||
*flat_buf, ADIO_Offset *offset_list, ADIO_Offset
|
*flat_buf, ADIO_Offset *offset_list, ADIO_Offset
|
||||||
@ -68,14 +68,14 @@ static void ADIOI_R_Exchange_data_alltoallv(ADIO_File fd, void *buf, ADIOI_Flatl
|
|||||||
int iter,
|
int iter,
|
||||||
MPI_Aint buftype_extent, int *buf_idx);
|
MPI_Aint buftype_extent, int *buf_idx);
|
||||||
static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
||||||
*flat_buf, char **recv_buf, ADIO_Offset
|
*flat_buf, char **recv_buf, ADIO_Offset
|
||||||
*offset_list, ADIO_Offset *len_list,
|
*offset_list, ADIO_Offset *len_list,
|
||||||
unsigned *recv_size,
|
unsigned *recv_size,
|
||||||
MPI_Request *requests, MPI_Status *statuses,
|
MPI_Request *requests, MPI_Status *statuses,
|
||||||
int *recd_from_proc, int nprocs,
|
int *recd_from_proc, int nprocs,
|
||||||
int contig_access_count,
|
int contig_access_count,
|
||||||
ADIO_Offset min_st_offset,
|
ADIO_Offset min_st_offset,
|
||||||
ADIO_Offset fd_size, ADIO_Offset *fd_start,
|
ADIO_Offset fd_size, ADIO_Offset *fd_start,
|
||||||
ADIO_Offset *fd_end,
|
ADIO_Offset *fd_end,
|
||||||
MPI_Aint buftype_extent);
|
MPI_Aint buftype_extent);
|
||||||
|
|
||||||
@ -94,15 +94,15 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
*error_code)
|
*error_code)
|
||||||
{
|
{
|
||||||
/* Uses a generalized version of the extended two-phase method described
|
/* Uses a generalized version of the extended two-phase method described
|
||||||
in "An Extended Two-Phase Method for Accessing Sections of
|
in "An Extended Two-Phase Method for Accessing Sections of
|
||||||
Out-of-Core Arrays", Rajeev Thakur and Alok Choudhary,
|
Out-of-Core Arrays", Rajeev Thakur and Alok Choudhary,
|
||||||
Scientific Programming, (5)4:301--317, Winter 1996.
|
Scientific Programming, (5)4:301--317, Winter 1996.
|
||||||
http://www.mcs.anl.gov/home/thakur/ext2ph.ps */
|
http://www.mcs.anl.gov/home/thakur/ext2ph.ps */
|
||||||
|
|
||||||
ADIOI_Access *my_req;
|
ADIOI_Access *my_req;
|
||||||
/* array of nprocs structures, one for each other process in
|
/* array of nprocs structures, one for each other process in
|
||||||
whose file domain this process's request lies */
|
whose file domain this process's request lies */
|
||||||
|
|
||||||
ADIOI_Access *others_req;
|
ADIOI_Access *others_req;
|
||||||
/* array of nprocs structures, one for each other process
|
/* array of nprocs structures, one for each other process
|
||||||
whose request lies in this process's file domain. */
|
whose request lies in this process's file domain. */
|
||||||
@ -114,6 +114,7 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
ADIO_Offset *offset_list = NULL, *st_offsets = NULL, *fd_start = NULL,
|
ADIO_Offset *offset_list = NULL, *st_offsets = NULL, *fd_start = NULL,
|
||||||
*fd_end = NULL, *end_offsets = NULL;
|
*fd_end = NULL, *end_offsets = NULL;
|
||||||
ADIO_Offset *gpfs_offsets0 = NULL, *gpfs_offsets = NULL;
|
ADIO_Offset *gpfs_offsets0 = NULL, *gpfs_offsets = NULL;
|
||||||
|
ADIO_Offset *count_sizes;
|
||||||
int ii;
|
int ii;
|
||||||
ADIO_Offset *len_list = NULL;
|
ADIO_Offset *len_list = NULL;
|
||||||
int *buf_idx = NULL;
|
int *buf_idx = NULL;
|
||||||
@ -127,7 +128,7 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
#if 0
|
#if 0
|
||||||
/* From common code - not implemented for bg. */
|
/* From common code - not implemented for bg. */
|
||||||
if (fd->hints->cb_pfr != ADIOI_HINT_DISABLE) {
|
if (fd->hints->cb_pfr != ADIOI_HINT_DISABLE) {
|
||||||
ADIOI_IOStridedColl (fd, buf, count, ADIOI_READ, datatype,
|
ADIOI_IOStridedColl (fd, buf, count, ADIOI_READ, datatype,
|
||||||
file_ptr_type, offset, status, error_code);
|
file_ptr_type, offset, status, error_code);
|
||||||
return;
|
return;
|
||||||
} */
|
} */
|
||||||
@ -162,19 +163,48 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
|
|
||||||
#ifdef RDCOLL_DEBUG
|
#ifdef RDCOLL_DEBUG
|
||||||
for (i=0; i<contig_access_count; i++) {
|
for (i=0; i<contig_access_count; i++) {
|
||||||
DBG_FPRINTF(stderr, "rank %d off %lld len %lld\n",
|
DBG_FPRINTF(stderr, "rank %d off %lld len %lld\n",
|
||||||
myrank, offset_list[i], len_list[i]);
|
myrank, offset_list[i], len_list[i]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* each process communicates its start and end offsets to other
|
/* each process communicates its start and end offsets to other
|
||||||
processes. The result is an array each of start and end offsets
|
processes. The result is an array each of start and end offsets
|
||||||
stored in order of process rank. */
|
stored in order of process rank. */
|
||||||
|
|
||||||
st_offsets = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
|
st_offsets = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
|
||||||
end_offsets = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
|
end_offsets = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
|
||||||
|
|
||||||
|
ADIO_Offset my_count_size=0;
|
||||||
|
/* One-sided aggregation needs the amount of data per rank as well because the difference in
|
||||||
|
* starting and ending offsets for 1 byte is 0 the same as 0 bytes so it cannot be distiguished.
|
||||||
|
*/
|
||||||
|
if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
|
||||||
|
count_sizes = (ADIO_Offset *) ADIOI_Malloc(nprocs*sizeof(ADIO_Offset));
|
||||||
|
MPI_Count buftype_size;
|
||||||
|
MPI_Type_size_x(datatype, &buftype_size);
|
||||||
|
my_count_size = (ADIO_Offset) count * (ADIO_Offset)buftype_size;
|
||||||
|
}
|
||||||
if (gpfsmpio_tunegather) {
|
if (gpfsmpio_tunegather) {
|
||||||
|
if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
|
||||||
|
gpfs_offsets0 = (ADIO_Offset *) ADIOI_Malloc(3*nprocs*sizeof(ADIO_Offset));
|
||||||
|
gpfs_offsets = (ADIO_Offset *) ADIOI_Malloc(3*nprocs*sizeof(ADIO_Offset));
|
||||||
|
for (ii=0; ii<nprocs; ii++) {
|
||||||
|
gpfs_offsets0[ii*3] = 0;
|
||||||
|
gpfs_offsets0[ii*3+1] = 0;
|
||||||
|
gpfs_offsets0[ii*3+2] = 0;
|
||||||
|
}
|
||||||
|
gpfs_offsets0[myrank*3] = start_offset;
|
||||||
|
gpfs_offsets0[myrank*3+1] = end_offset;
|
||||||
|
gpfs_offsets0[myrank*3+2] = my_count_size;
|
||||||
|
MPI_Allreduce( gpfs_offsets0, gpfs_offsets, nprocs*3, ADIO_OFFSET, MPI_MAX, fd->comm );
|
||||||
|
for (ii=0; ii<nprocs; ii++) {
|
||||||
|
st_offsets [ii] = gpfs_offsets[ii*3] ;
|
||||||
|
end_offsets[ii] = gpfs_offsets[ii*3+1];
|
||||||
|
count_sizes[ii] = gpfs_offsets[ii*3+2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
gpfs_offsets0 = (ADIO_Offset *) ADIOI_Malloc(2*nprocs*sizeof(ADIO_Offset));
|
gpfs_offsets0 = (ADIO_Offset *) ADIOI_Malloc(2*nprocs*sizeof(ADIO_Offset));
|
||||||
gpfs_offsets = (ADIO_Offset *) ADIOI_Malloc(2*nprocs*sizeof(ADIO_Offset));
|
gpfs_offsets = (ADIO_Offset *) ADIOI_Malloc(2*nprocs*sizeof(ADIO_Offset));
|
||||||
for (ii=0; ii<nprocs; ii++) {
|
for (ii=0; ii<nprocs; ii++) {
|
||||||
@ -190,6 +220,7 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
st_offsets [ii] = gpfs_offsets[ii*2] ;
|
st_offsets [ii] = gpfs_offsets[ii*2] ;
|
||||||
end_offsets[ii] = gpfs_offsets[ii*2+1];
|
end_offsets[ii] = gpfs_offsets[ii*2+1];
|
||||||
}
|
}
|
||||||
|
}
|
||||||
ADIOI_Free( gpfs_offsets0 );
|
ADIOI_Free( gpfs_offsets0 );
|
||||||
ADIOI_Free( gpfs_offsets );
|
ADIOI_Free( gpfs_offsets );
|
||||||
} else {
|
} else {
|
||||||
@ -197,13 +228,17 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
ADIO_OFFSET, fd->comm);
|
ADIO_OFFSET, fd->comm);
|
||||||
MPI_Allgather(&end_offset, 1, ADIO_OFFSET, end_offsets, 1,
|
MPI_Allgather(&end_offset, 1, ADIO_OFFSET, end_offsets, 1,
|
||||||
ADIO_OFFSET, fd->comm);
|
ADIO_OFFSET, fd->comm);
|
||||||
|
if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
|
||||||
|
MPI_Allgather(&count_sizes, 1, ADIO_OFFSET, count_sizes, 1,
|
||||||
|
ADIO_OFFSET, fd->comm);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GPFSMPIO_T_CIO_SET_GET( r, 1, 1, GPFSMPIO_CIO_T_PATANA, GPFSMPIO_CIO_T_GATHER )
|
GPFSMPIO_T_CIO_SET_GET( r, 1, 1, GPFSMPIO_CIO_T_PATANA, GPFSMPIO_CIO_T_GATHER )
|
||||||
|
|
||||||
/* are the accesses of different processes interleaved? */
|
/* are the accesses of different processes interleaved? */
|
||||||
for (i=1; i<nprocs; i++)
|
for (i=1; i<nprocs; i++)
|
||||||
if ((st_offsets[i] < end_offsets[i-1]) &&
|
if ((st_offsets[i] < end_offsets[i-1]) &&
|
||||||
(st_offsets[i] <= end_offsets[i]))
|
(st_offsets[i] <= end_offsets[i]))
|
||||||
interleave_count++;
|
interleave_count++;
|
||||||
/* This is a rudimentary check for interleaving, but should suffice
|
/* This is a rudimentary check for interleaving, but should suffice
|
||||||
@ -213,7 +248,7 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
|
ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
|
||||||
|
|
||||||
if (fd->hints->cb_read == ADIOI_HINT_DISABLE
|
if (fd->hints->cb_read == ADIOI_HINT_DISABLE
|
||||||
|| (!interleave_count && (fd->hints->cb_read == ADIOI_HINT_AUTO)))
|
|| (!interleave_count && (fd->hints->cb_read == ADIOI_HINT_AUTO)))
|
||||||
{
|
{
|
||||||
/* don't do aggregation */
|
/* don't do aggregation */
|
||||||
if (fd->hints->cb_read != ADIOI_HINT_DISABLE) {
|
if (fd->hints->cb_read != ADIOI_HINT_DISABLE) {
|
||||||
@ -259,18 +294,69 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
* needs to be mapped to an actual rank in the communicator later.
|
* needs to be mapped to an actual rank in the communicator later.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
if (gpfsmpio_tuneblocking)
|
int currentNonZeroDataIndex = 0;
|
||||||
|
if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
|
||||||
|
/* Take out the 0-data offsets by shifting the indexes with data to the
|
||||||
|
* front and keeping track of the non-zero data index for use as the
|
||||||
|
* length. By doing this we will optimally use all available aggs
|
||||||
|
* and spread the actual data across them instead of having offsets
|
||||||
|
* with empty data potentially dilute the file domains and create
|
||||||
|
* problems for the one-sided aggregation.
|
||||||
|
*/
|
||||||
|
for (i=0; i<nprocs; i++) {
|
||||||
|
if (count_sizes[i] > 0) {
|
||||||
|
st_offsets[currentNonZeroDataIndex] = st_offsets[i];
|
||||||
|
end_offsets[currentNonZeroDataIndex] = end_offsets[i];
|
||||||
|
currentNonZeroDataIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (gpfsmpio_tuneblocking) {
|
||||||
|
if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
|
||||||
|
ADIOI_GPFS_Calc_file_domains(fd, st_offsets, end_offsets, currentNonZeroDataIndex,
|
||||||
|
nprocs_for_coll, &min_st_offset,
|
||||||
|
&fd_start, &fd_end, &fd_size, fd->fs_ptr);
|
||||||
|
}
|
||||||
|
else {
|
||||||
ADIOI_GPFS_Calc_file_domains(fd, st_offsets, end_offsets, nprocs,
|
ADIOI_GPFS_Calc_file_domains(fd, st_offsets, end_offsets, nprocs,
|
||||||
nprocs_for_coll, &min_st_offset,
|
nprocs_for_coll, &min_st_offset,
|
||||||
&fd_start, &fd_end, &fd_size, fd->fs_ptr);
|
&fd_start, &fd_end, &fd_size, fd->fs_ptr);
|
||||||
else
|
}
|
||||||
ADIOI_Calc_file_domains(st_offsets, end_offsets, nprocs,
|
}
|
||||||
|
else {
|
||||||
|
if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
|
||||||
|
ADIOI_Calc_file_domains(st_offsets, end_offsets, currentNonZeroDataIndex,
|
||||||
nprocs_for_coll, &min_st_offset,
|
nprocs_for_coll, &min_st_offset,
|
||||||
&fd_start, &fd_end,
|
&fd_start, &fd_end,
|
||||||
fd->hints->min_fdomain_size, &fd_size,
|
fd->hints->min_fdomain_size, &fd_size,
|
||||||
fd->hints->striping_unit);
|
fd->hints->striping_unit);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ADIOI_Calc_file_domains(st_offsets, end_offsets, nprocs,
|
||||||
|
nprocs_for_coll, &min_st_offset,
|
||||||
|
&fd_start, &fd_end,
|
||||||
|
fd->hints->min_fdomain_size, &fd_size,
|
||||||
|
fd->hints->striping_unit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GPFSMPIO_T_CIO_SET_GET( r, 1, 1, GPFSMPIO_CIO_T_MYREQ, GPFSMPIO_CIO_T_FD_PART );
|
GPFSMPIO_T_CIO_SET_GET( r, 1, 1, GPFSMPIO_CIO_T_MYREQ, GPFSMPIO_CIO_T_FD_PART );
|
||||||
|
if ((gpfsmpio_read_aggmethod == 1) || (gpfsmpio_read_aggmethod == 2)) {
|
||||||
|
/* If the user has specified to use a one-sided aggregation method then do that at
|
||||||
|
* this point instead of the two-phase I/O.
|
||||||
|
*/
|
||||||
|
ADIOI_OneSidedReadAggregation(fd, offset_list, len_list, contig_access_count, buf,
|
||||||
|
datatype,error_code, st_offsets, end_offsets, currentNonZeroDataIndex, fd_start, fd_end);
|
||||||
|
GPFSMPIO_T_CIO_REPORT( 0, fd, myrank, nprocs)
|
||||||
|
ADIOI_Free(offset_list);
|
||||||
|
ADIOI_Free(len_list);
|
||||||
|
ADIOI_Free(st_offsets);
|
||||||
|
ADIOI_Free(end_offsets);
|
||||||
|
ADIOI_Free(fd_start);
|
||||||
|
ADIOI_Free(fd_end);
|
||||||
|
ADIOI_Free(count_sizes);
|
||||||
|
goto fn_exit;
|
||||||
|
}
|
||||||
if (gpfsmpio_p2pcontig==1) {
|
if (gpfsmpio_p2pcontig==1) {
|
||||||
/* For some simple yet common(?) workloads, full-on two-phase I/O is
|
/* For some simple yet common(?) workloads, full-on two-phase I/O is
|
||||||
* overkill. We can establish sub-groups of processes and their
|
* overkill. We can establish sub-groups of processes and their
|
||||||
@ -304,7 +390,7 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* calculate where the portions of the access requests of this process
|
/* calculate where the portions of the access requests of this process
|
||||||
* are located in terms of the file domains. this could be on the same
|
* are located in terms of the file domains. this could be on the same
|
||||||
* process or on other processes. this function fills in:
|
* process or on other processes. this function fills in:
|
||||||
* count_my_req_procs - number of processes (including this one) for which
|
* count_my_req_procs - number of processes (including this one) for which
|
||||||
@ -319,13 +405,13 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
if (gpfsmpio_tuneblocking)
|
if (gpfsmpio_tuneblocking)
|
||||||
ADIOI_GPFS_Calc_my_req(fd, offset_list, len_list, contig_access_count,
|
ADIOI_GPFS_Calc_my_req(fd, offset_list, len_list, contig_access_count,
|
||||||
min_st_offset, fd_start, fd_end, fd_size,
|
min_st_offset, fd_start, fd_end, fd_size,
|
||||||
nprocs, &count_my_req_procs,
|
nprocs, &count_my_req_procs,
|
||||||
&count_my_req_per_proc, &my_req,
|
&count_my_req_per_proc, &my_req,
|
||||||
&buf_idx);
|
&buf_idx);
|
||||||
else
|
else
|
||||||
ADIOI_Calc_my_req(fd, offset_list, len_list, contig_access_count,
|
ADIOI_Calc_my_req(fd, offset_list, len_list, contig_access_count,
|
||||||
min_st_offset, fd_start, fd_end, fd_size,
|
min_st_offset, fd_start, fd_end, fd_size,
|
||||||
nprocs, &count_my_req_procs,
|
nprocs, &count_my_req_procs,
|
||||||
&count_my_req_per_proc, &my_req,
|
&count_my_req_per_proc, &my_req,
|
||||||
&buf_idx);
|
&buf_idx);
|
||||||
|
|
||||||
@ -345,15 +431,15 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
&others_req);
|
&others_req);
|
||||||
|
|
||||||
else
|
else
|
||||||
ADIOI_Calc_others_req(fd, count_my_req_procs,
|
ADIOI_Calc_others_req(fd, count_my_req_procs,
|
||||||
count_my_req_per_proc, my_req,
|
count_my_req_per_proc, my_req,
|
||||||
nprocs, myrank, &count_others_req_procs,
|
nprocs, myrank, &count_others_req_procs,
|
||||||
&others_req);
|
&others_req);
|
||||||
|
|
||||||
GPFSMPIO_T_CIO_SET_GET( r, 1, 1, GPFSMPIO_CIO_T_DEXCH, GPFSMPIO_CIO_T_OTHREQ )
|
GPFSMPIO_T_CIO_SET_GET( r, 1, 1, GPFSMPIO_CIO_T_DEXCH, GPFSMPIO_CIO_T_OTHREQ )
|
||||||
|
|
||||||
/* my_req[] and count_my_req_per_proc aren't needed at this point, so
|
/* my_req[] and count_my_req_per_proc aren't needed at this point, so
|
||||||
* let's free the memory
|
* let's free the memory
|
||||||
*/
|
*/
|
||||||
ADIOI_Free(count_my_req_per_proc);
|
ADIOI_Free(count_my_req_per_proc);
|
||||||
for (i=0; i<nprocs; i++) {
|
for (i=0; i<nprocs; i++) {
|
||||||
@ -365,8 +451,8 @@ void ADIOI_GPFS_ReadStridedColl(ADIO_File fd, void *buf, int count,
|
|||||||
ADIOI_Free(my_req);
|
ADIOI_Free(my_req);
|
||||||
|
|
||||||
|
|
||||||
/* read data in sizes of no more than ADIOI_Coll_bufsize,
|
/* read data in sizes of no more than ADIOI_Coll_bufsize,
|
||||||
* communicate, and fill user buf.
|
* communicate, and fill user buf.
|
||||||
*/
|
*/
|
||||||
ADIOI_Read_and_exch(fd, buf, datatype, nprocs, myrank,
|
ADIOI_Read_and_exch(fd, buf, datatype, nprocs, myrank,
|
||||||
others_req, offset_list,
|
others_req, offset_list,
|
||||||
@ -403,8 +489,8 @@ fn_exit:
|
|||||||
MPI_Type_size_x(datatype, &size);
|
MPI_Type_size_x(datatype, &size);
|
||||||
bufsize = size * count;
|
bufsize = size * count;
|
||||||
MPIR_Status_set_bytes(status, datatype, bufsize);
|
MPIR_Status_set_bytes(status, datatype, bufsize);
|
||||||
/* This is a temporary way of filling in status. The right way is to
|
/* This is a temporary way of filling in status. The right way is to
|
||||||
keep track of how much data was actually read and placed in buf
|
keep track of how much data was actually read and placed in buf
|
||||||
during collective I/O. */
|
during collective I/O. */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -421,7 +507,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
int *buf_idx, int *error_code)
|
int *buf_idx, int *error_code)
|
||||||
{
|
{
|
||||||
/* Read in sizes of no more than coll_bufsize, an info parameter.
|
/* Read in sizes of no more than coll_bufsize, an info parameter.
|
||||||
Send data to appropriate processes.
|
Send data to appropriate processes.
|
||||||
Place recd. data in user buf.
|
Place recd. data in user buf.
|
||||||
The idea is to reduce the amount of extra memory required for
|
The idea is to reduce the amount of extra memory required for
|
||||||
collective I/O. If all data were read all at once, which is much
|
collective I/O. If all data were read all at once, which is much
|
||||||
@ -447,7 +533,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
#endif
|
#endif
|
||||||
*error_code = MPI_SUCCESS; /* changed below if error */
|
*error_code = MPI_SUCCESS; /* changed below if error */
|
||||||
/* only I/O errors are currently reported */
|
/* only I/O errors are currently reported */
|
||||||
|
|
||||||
/* calculate the number of reads of size coll_bufsize
|
/* calculate the number of reads of size coll_bufsize
|
||||||
to be done by each process and the max among all processes.
|
to be done by each process and the max among all processes.
|
||||||
That gives the no. of communication phases as well.
|
That gives the no. of communication phases as well.
|
||||||
@ -486,11 +572,11 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
ntimes = (int) ((end_loc - st_loc + coll_bufsize)/coll_bufsize);
|
ntimes = (int) ((end_loc - st_loc + coll_bufsize)/coll_bufsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
MPI_Allreduce(&ntimes, &max_ntimes, 1, MPI_INT, MPI_MAX, fd->comm);
|
MPI_Allreduce(&ntimes, &max_ntimes, 1, MPI_INT, MPI_MAX, fd->comm);
|
||||||
|
|
||||||
read_buf = fd->io_buf;
|
read_buf = fd->io_buf;
|
||||||
|
|
||||||
curr_offlen_ptr = (int *) ADIOI_Calloc(nprocs, sizeof(int));
|
curr_offlen_ptr = (int *) ADIOI_Calloc(nprocs, sizeof(int));
|
||||||
/* its use is explained below. calloc initializes to 0. */
|
/* its use is explained below. calloc initializes to 0. */
|
||||||
|
|
||||||
count = (int *) ADIOI_Malloc(nprocs * sizeof(int));
|
count = (int *) ADIOI_Malloc(nprocs * sizeof(int));
|
||||||
@ -498,7 +584,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
in an iteration. */
|
in an iteration. */
|
||||||
|
|
||||||
partial_send = (int *) ADIOI_Calloc(nprocs, sizeof(int));
|
partial_send = (int *) ADIOI_Calloc(nprocs, sizeof(int));
|
||||||
/* if only a portion of the last off-len pair is sent to a process
|
/* if only a portion of the last off-len pair is sent to a process
|
||||||
in a particular iteration, the length sent is stored here.
|
in a particular iteration, the length sent is stored here.
|
||||||
calloc initializes to 0. */
|
calloc initializes to 0. */
|
||||||
|
|
||||||
@ -514,14 +600,12 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
ADIOI_Fill_user_buffer. initialized to 0 here. */
|
ADIOI_Fill_user_buffer. initialized to 0 here. */
|
||||||
|
|
||||||
start_pos = (int *) ADIOI_Malloc(nprocs*sizeof(int));
|
start_pos = (int *) ADIOI_Malloc(nprocs*sizeof(int));
|
||||||
/* used to store the starting value of curr_offlen_ptr[i] in
|
/* used to store the starting value of curr_offlen_ptr[i] in
|
||||||
this iteration */
|
this iteration */
|
||||||
|
|
||||||
ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
|
ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
|
||||||
if (!buftype_is_contig) {
|
if (!buftype_is_contig) {
|
||||||
ADIOI_Flatten_datatype(datatype);
|
flat_buf = ADIOI_Flatten_and_find(datatype);
|
||||||
flat_buf = ADIOI_Flatlist;
|
|
||||||
while (flat_buf->type != datatype) flat_buf = flat_buf->next;
|
|
||||||
}
|
}
|
||||||
MPI_Type_get_extent(datatype, &buftype_lb, &buftype_extent);
|
MPI_Type_get_extent(datatype, &buftype_lb, &buftype_extent);
|
||||||
|
|
||||||
@ -540,9 +624,9 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
/* go through all others_req and check if any are satisfied
|
/* go through all others_req and check if any are satisfied
|
||||||
by the current read */
|
by the current read */
|
||||||
|
|
||||||
/* since MPI guarantees that displacements in filetypes are in
|
/* since MPI guarantees that displacements in filetypes are in
|
||||||
monotonically nondecreasing order, I can maintain a pointer
|
monotonically nondecreasing order, I can maintain a pointer
|
||||||
(curr_offlen_ptr) to
|
(curr_offlen_ptr) to
|
||||||
current off-len pair for each process in others_req and scan
|
current off-len pair for each process in others_req and scan
|
||||||
further only from there. There is still a problem of filetypes
|
further only from there. There is still a problem of filetypes
|
||||||
such as: (1, 2, 3 are not process nos. They are just numbers for
|
such as: (1, 2, 3 are not process nos. They are just numbers for
|
||||||
@ -552,7 +636,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
2 -----!----
|
2 -----!----
|
||||||
3 --!-----
|
3 --!-----
|
||||||
|
|
||||||
where ! indicates where the current read_size limitation cuts
|
where ! indicates where the current read_size limitation cuts
|
||||||
through the filetype. I resolve this by reading up to !, but
|
through the filetype. I resolve this by reading up to !, but
|
||||||
filling the communication buffer only for 1. I copy the portion
|
filling the communication buffer only for 1. I copy the portion
|
||||||
left over for 2 into a tmp_buf for use in the next
|
left over for 2 into a tmp_buf for use in the next
|
||||||
@ -561,22 +645,22 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
other end, as only one off-len pair with incomplete data
|
other end, as only one off-len pair with incomplete data
|
||||||
will be sent. I also don't need to send the individual
|
will be sent. I also don't need to send the individual
|
||||||
offsets and lens along with the data, as the data is being
|
offsets and lens along with the data, as the data is being
|
||||||
sent in a particular order. */
|
sent in a particular order. */
|
||||||
|
|
||||||
/* off = start offset in the file for the data actually read in
|
/* off = start offset in the file for the data actually read in
|
||||||
this iteration
|
this iteration
|
||||||
size = size of data read corresponding to off
|
size = size of data read corresponding to off
|
||||||
real_off = off minus whatever data was retained in memory from
|
real_off = off minus whatever data was retained in memory from
|
||||||
previous iteration for cases like 2, 3 illustrated above
|
previous iteration for cases like 2, 3 illustrated above
|
||||||
real_size = size plus the extra corresponding to real_off
|
real_size = size plus the extra corresponding to real_off
|
||||||
req_off = off in file for a particular contiguous request
|
req_off = off in file for a particular contiguous request
|
||||||
minus what was satisfied in previous iteration
|
minus what was satisfied in previous iteration
|
||||||
req_size = size corresponding to req_off */
|
req_size = size corresponding to req_off */
|
||||||
|
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
MPE_Log_event(13, 0, "start computation");
|
MPE_Log_event(13, 0, "start computation");
|
||||||
#endif
|
#endif
|
||||||
size = ADIOI_MIN((unsigned)coll_bufsize, end_loc-st_loc+1-done);
|
size = ADIOI_MIN((unsigned)coll_bufsize, end_loc-st_loc+1-done);
|
||||||
real_off = off - for_curr_iter;
|
real_off = off - for_curr_iter;
|
||||||
real_size = size + for_curr_iter;
|
real_size = size + for_curr_iter;
|
||||||
|
|
||||||
@ -585,7 +669,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
|
|
||||||
for (i=0; i<nprocs; i++) {
|
for (i=0; i<nprocs; i++) {
|
||||||
#ifdef RDCOLL_DEBUG
|
#ifdef RDCOLL_DEBUG
|
||||||
DBG_FPRINTF(stderr, "rank %d, i %d, others_count %d\n", rank, i, others_req[i].count);
|
DBG_FPRINTF(stderr, "rank %d, i %d, others_count %d\n", rank, i, others_req[i].count);
|
||||||
#endif
|
#endif
|
||||||
if (others_req[i].count) {
|
if (others_req[i].count) {
|
||||||
start_pos[i] = curr_offlen_ptr[i];
|
start_pos[i] = curr_offlen_ptr[i];
|
||||||
@ -595,7 +679,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
/* this request may have been partially
|
/* this request may have been partially
|
||||||
satisfied in the previous iteration. */
|
satisfied in the previous iteration. */
|
||||||
req_off = others_req[i].offsets[j] +
|
req_off = others_req[i].offsets[j] +
|
||||||
partial_send[i];
|
partial_send[i];
|
||||||
req_len = others_req[i].lens[j] -
|
req_len = others_req[i].lens[j] -
|
||||||
partial_send[i];
|
partial_send[i];
|
||||||
partial_send[i] = 0;
|
partial_send[i] = 0;
|
||||||
@ -609,23 +693,23 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
}
|
}
|
||||||
if (req_off < real_off + real_size) {
|
if (req_off < real_off + real_size) {
|
||||||
count[i]++;
|
count[i]++;
|
||||||
ADIOI_Assert((((ADIO_Offset)(MPIR_Upint)read_buf)+req_off-real_off) == (ADIO_Offset)(MPIR_Upint)(read_buf+req_off-real_off));
|
ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)read_buf)+req_off-real_off) == (ADIO_Offset)(MPIU_Upint)(read_buf+req_off-real_off));
|
||||||
MPI_Get_address(read_buf+req_off-real_off,
|
MPI_Get_address(read_buf+req_off-real_off,
|
||||||
&(others_req[i].mem_ptrs[j]));
|
&(others_req[i].mem_ptrs[j]));
|
||||||
ADIOI_Assert((real_off + real_size - req_off) == (int)(real_off + real_size - req_off));
|
ADIOI_Assert((real_off + real_size - req_off) == (int)(real_off + real_size - req_off));
|
||||||
send_size[i] += (int)(ADIOI_MIN(real_off + real_size - req_off,
|
send_size[i] += (int)(ADIOI_MIN(real_off + real_size - req_off,
|
||||||
(ADIO_Offset)(unsigned)req_len));
|
(ADIO_Offset)(unsigned)req_len));
|
||||||
|
|
||||||
if (real_off+real_size-req_off < (ADIO_Offset)(unsigned)req_len) {
|
if (real_off+real_size-req_off < (ADIO_Offset)(unsigned)req_len) {
|
||||||
partial_send[i] = (int) (real_off + real_size - req_off);
|
partial_send[i] = (int) (real_off + real_size - req_off);
|
||||||
if ((j+1 < others_req[i].count) &&
|
if ((j+1 < others_req[i].count) &&
|
||||||
(others_req[i].offsets[j+1] <
|
(others_req[i].offsets[j+1] <
|
||||||
real_off+real_size)) {
|
real_off+real_size)) {
|
||||||
/* this is the case illustrated in the
|
/* this is the case illustrated in the
|
||||||
figure above. */
|
figure above. */
|
||||||
for_next_iter = ADIOI_MAX(for_next_iter,
|
for_next_iter = ADIOI_MAX(for_next_iter,
|
||||||
real_off + real_size - others_req[i].offsets[j+1]);
|
real_off + real_size - others_req[i].offsets[j+1]);
|
||||||
/* max because it must cover requests
|
/* max because it must cover requests
|
||||||
from different processes */
|
from different processes */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -659,17 +743,17 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
|
|
||||||
if (*error_code != MPI_SUCCESS) return;
|
if (*error_code != MPI_SUCCESS) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for_curr_iter = for_next_iter;
|
for_curr_iter = for_next_iter;
|
||||||
|
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
MPE_Log_event(7, 0, "start communication");
|
MPE_Log_event(7, 0, "start communication");
|
||||||
#endif
|
#endif
|
||||||
if (gpfsmpio_comm == 1)
|
if (gpfsmpio_comm == 1)
|
||||||
ADIOI_R_Exchange_data(fd, buf, flat_buf, offset_list, len_list,
|
ADIOI_R_Exchange_data(fd, buf, flat_buf, offset_list, len_list,
|
||||||
send_size, recv_size, count,
|
send_size, recv_size, count,
|
||||||
start_pos, partial_send, recd_from_proc, nprocs,
|
start_pos, partial_send, recd_from_proc, nprocs,
|
||||||
myrank,
|
myrank,
|
||||||
buftype_is_contig, contig_access_count,
|
buftype_is_contig, contig_access_count,
|
||||||
min_st_offset, fd_size, fd_start, fd_end,
|
min_st_offset, fd_size, fd_start, fd_end,
|
||||||
others_req,
|
others_req,
|
||||||
@ -693,7 +777,7 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
|
|
||||||
if (for_next_iter) {
|
if (for_next_iter) {
|
||||||
tmp_buf = (char *) ADIOI_Malloc(for_next_iter);
|
tmp_buf = (char *) ADIOI_Malloc(for_next_iter);
|
||||||
ADIOI_Assert((((ADIO_Offset)(MPIR_Upint)read_buf)+real_size-for_next_iter) == (ADIO_Offset)(MPIR_Upint)(read_buf+real_size-for_next_iter));
|
ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)read_buf)+real_size-for_next_iter) == (ADIO_Offset)(MPIU_Upint)(read_buf+real_size-for_next_iter));
|
||||||
ADIOI_Assert((for_next_iter+coll_bufsize) == (size_t)(for_next_iter+coll_bufsize));
|
ADIOI_Assert((for_next_iter+coll_bufsize) == (size_t)(for_next_iter+coll_bufsize));
|
||||||
memcpy(tmp_buf, read_buf+real_size-for_next_iter, for_next_iter);
|
memcpy(tmp_buf, read_buf+real_size-for_next_iter, for_next_iter);
|
||||||
ADIOI_Free(fd->io_buf);
|
ADIOI_Free(fd->io_buf);
|
||||||
@ -711,27 +795,27 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
MPE_Log_event(7, 0, "start communication");
|
MPE_Log_event(7, 0, "start communication");
|
||||||
#endif
|
#endif
|
||||||
for (m=ntimes; m<max_ntimes; m++)
|
for (m=ntimes; m<max_ntimes; m++)
|
||||||
/* nothing to send, but check for recv. */
|
/* nothing to send, but check for recv. */
|
||||||
|
|
||||||
if (gpfsmpio_comm == 1)
|
if (gpfsmpio_comm == 1)
|
||||||
ADIOI_R_Exchange_data(fd, buf, flat_buf, offset_list, len_list,
|
ADIOI_R_Exchange_data(fd, buf, flat_buf, offset_list, len_list,
|
||||||
send_size, recv_size, count,
|
send_size, recv_size, count,
|
||||||
start_pos, partial_send, recd_from_proc, nprocs,
|
start_pos, partial_send, recd_from_proc, nprocs,
|
||||||
myrank,
|
myrank,
|
||||||
buftype_is_contig, contig_access_count,
|
buftype_is_contig, contig_access_count,
|
||||||
min_st_offset, fd_size, fd_start, fd_end,
|
min_st_offset, fd_size, fd_start, fd_end,
|
||||||
others_req, m,
|
others_req, m,
|
||||||
buftype_extent, buf_idx);
|
buftype_extent, buf_idx);
|
||||||
else /* strncmp( env_switch, "alltoall", 8 ) == 0 */
|
else /* strncmp( env_switch, "alltoall", 8 ) == 0 */
|
||||||
if (gpfsmpio_comm == 0)
|
if (gpfsmpio_comm == 0)
|
||||||
ADIOI_R_Exchange_data_alltoallv(fd, buf, flat_buf, offset_list, len_list,
|
ADIOI_R_Exchange_data_alltoallv(fd, buf, flat_buf, offset_list, len_list,
|
||||||
send_size, recv_size, count,
|
send_size, recv_size, count,
|
||||||
start_pos, partial_send, recd_from_proc, nprocs,
|
start_pos, partial_send, recd_from_proc, nprocs,
|
||||||
myrank,
|
myrank,
|
||||||
buftype_is_contig, contig_access_count,
|
buftype_is_contig, contig_access_count,
|
||||||
min_st_offset, fd_size, fd_start, fd_end,
|
min_st_offset, fd_size, fd_start, fd_end,
|
||||||
others_req,
|
others_req,
|
||||||
m, buftype_extent, buf_idx);
|
m, buftype_extent, buf_idx);
|
||||||
|
|
||||||
#ifdef PROFILE
|
#ifdef PROFILE
|
||||||
@ -752,17 +836,17 @@ static void ADIOI_Read_and_exch(ADIO_File fd, void *buf, MPI_Datatype
|
|||||||
static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
||||||
*flat_buf, ADIO_Offset *offset_list, ADIO_Offset
|
*flat_buf, ADIO_Offset *offset_list, ADIO_Offset
|
||||||
*len_list, int *send_size, int *recv_size,
|
*len_list, int *send_size, int *recv_size,
|
||||||
int *count, int *start_pos, int *partial_send,
|
int *count, int *start_pos, int *partial_send,
|
||||||
int *recd_from_proc, int nprocs,
|
int *recd_from_proc, int nprocs,
|
||||||
int myrank, int
|
int myrank, int
|
||||||
buftype_is_contig, int contig_access_count,
|
buftype_is_contig, int contig_access_count,
|
||||||
ADIO_Offset min_st_offset, ADIO_Offset fd_size,
|
ADIO_Offset min_st_offset, ADIO_Offset fd_size,
|
||||||
ADIO_Offset *fd_start, ADIO_Offset *fd_end,
|
ADIO_Offset *fd_start, ADIO_Offset *fd_end,
|
||||||
ADIOI_Access *others_req,
|
ADIOI_Access *others_req,
|
||||||
int iter, MPI_Aint buftype_extent, int *buf_idx)
|
int iter, MPI_Aint buftype_extent, int *buf_idx)
|
||||||
{
|
{
|
||||||
int i, j, k=0, tmp=0, nprocs_recv, nprocs_send;
|
int i, j, k=0, tmp=0, nprocs_recv, nprocs_send;
|
||||||
char **recv_buf = NULL;
|
char **recv_buf = NULL;
|
||||||
MPI_Request *requests;
|
MPI_Request *requests;
|
||||||
MPI_Datatype send_type;
|
MPI_Datatype send_type;
|
||||||
MPI_Status *statuses;
|
MPI_Status *statuses;
|
||||||
@ -791,9 +875,9 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
|
|
||||||
if (buftype_is_contig) {
|
if (buftype_is_contig) {
|
||||||
j = 0;
|
j = 0;
|
||||||
for (i=0; i < nprocs; i++)
|
for (i=0; i < nprocs; i++)
|
||||||
if (recv_size[i]) {
|
if (recv_size[i]) {
|
||||||
MPI_Irecv(((char *) buf) + buf_idx[i], recv_size[i],
|
MPI_Irecv(((char *) buf) + buf_idx[i], recv_size[i],
|
||||||
MPI_BYTE, i, myrank+i+100*iter, fd->comm, requests+j);
|
MPI_BYTE, i, myrank+i+100*iter, fd->comm, requests+j);
|
||||||
j++;
|
j++;
|
||||||
buf_idx[i] += recv_size[i];
|
buf_idx[i] += recv_size[i];
|
||||||
@ -802,19 +886,19 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
else {
|
else {
|
||||||
/* allocate memory for recv_buf and post receives */
|
/* allocate memory for recv_buf and post receives */
|
||||||
recv_buf = (char **) ADIOI_Malloc(nprocs * sizeof(char*));
|
recv_buf = (char **) ADIOI_Malloc(nprocs * sizeof(char*));
|
||||||
for (i=0; i < nprocs; i++)
|
for (i=0; i < nprocs; i++)
|
||||||
if (recv_size[i]) recv_buf[i] =
|
if (recv_size[i]) recv_buf[i] =
|
||||||
(char *) ADIOI_Malloc(recv_size[i]);
|
(char *) ADIOI_Malloc(recv_size[i]);
|
||||||
|
|
||||||
j = 0;
|
j = 0;
|
||||||
for (i=0; i < nprocs; i++)
|
for (i=0; i < nprocs; i++)
|
||||||
if (recv_size[i]) {
|
if (recv_size[i]) {
|
||||||
MPI_Irecv(recv_buf[i], recv_size[i], MPI_BYTE, i,
|
MPI_Irecv(recv_buf[i], recv_size[i], MPI_BYTE, i,
|
||||||
myrank+i+100*iter, fd->comm, requests+j);
|
myrank+i+100*iter, fd->comm, requests+j);
|
||||||
j++;
|
j++;
|
||||||
#ifdef RDCOLL_DEBUG
|
#ifdef RDCOLL_DEBUG
|
||||||
DBG_FPRINTF(stderr, "node %d, recv_size %d, tag %d \n",
|
DBG_FPRINTF(stderr, "node %d, recv_size %d, tag %d \n",
|
||||||
myrank, recv_size[i], myrank+i+100*iter);
|
myrank, recv_size[i], myrank+i+100*iter);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -832,7 +916,7 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
}
|
}
|
||||||
ADIOI_Type_create_hindexed_x(count[i],
|
ADIOI_Type_create_hindexed_x(count[i],
|
||||||
&(others_req[i].lens[start_pos[i]]),
|
&(others_req[i].lens[start_pos[i]]),
|
||||||
&(others_req[i].mem_ptrs[start_pos[i]]),
|
&(others_req[i].mem_ptrs[start_pos[i]]),
|
||||||
MPI_BYTE, &send_type);
|
MPI_BYTE, &send_type);
|
||||||
/* absolute displacement; use MPI_BOTTOM in send */
|
/* absolute displacement; use MPI_BOTTOM in send */
|
||||||
MPI_Type_commit(&send_type);
|
MPI_Type_commit(&send_type);
|
||||||
@ -845,7 +929,7 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
}
|
}
|
||||||
|
|
||||||
statuses = (MPI_Status *) ADIOI_Malloc((nprocs_send+nprocs_recv+1) * \
|
statuses = (MPI_Status *) ADIOI_Malloc((nprocs_send+nprocs_recv+1) * \
|
||||||
sizeof(MPI_Status));
|
sizeof(MPI_Status));
|
||||||
/* +1 to avoid a 0-size malloc */
|
/* +1 to avoid a 0-size malloc */
|
||||||
|
|
||||||
/* wait on the receives */
|
/* wait on the receives */
|
||||||
@ -858,10 +942,10 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* if noncontiguous, to the copies from the recv buffers */
|
/* if noncontiguous, to the copies from the recv buffers */
|
||||||
if (!buftype_is_contig)
|
if (!buftype_is_contig)
|
||||||
ADIOI_Fill_user_buffer(fd, buf, flat_buf, recv_buf,
|
ADIOI_Fill_user_buffer(fd, buf, flat_buf, recv_buf,
|
||||||
offset_list, len_list, (unsigned*)recv_size,
|
offset_list, len_list, (unsigned*)recv_size,
|
||||||
requests, statuses, recd_from_proc,
|
requests, statuses, recd_from_proc,
|
||||||
nprocs, contig_access_count,
|
nprocs, contig_access_count,
|
||||||
min_st_offset, fd_size, fd_start, fd_end,
|
min_st_offset, fd_size, fd_start, fd_end,
|
||||||
buftype_extent);
|
buftype_extent);
|
||||||
@ -874,7 +958,7 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
ADIOI_Free(requests);
|
ADIOI_Free(requests);
|
||||||
|
|
||||||
if (!buftype_is_contig) {
|
if (!buftype_is_contig) {
|
||||||
for (i=0; i < nprocs; i++)
|
for (i=0; i < nprocs; i++)
|
||||||
if (recv_size[i]) ADIOI_Free(recv_buf[i]);
|
if (recv_size[i]) ADIOI_Free(recv_buf[i]);
|
||||||
ADIOI_Free(recv_buf);
|
ADIOI_Free(recv_buf);
|
||||||
}
|
}
|
||||||
@ -908,7 +992,7 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
{ \
|
{ \
|
||||||
while (size) { \
|
while (size) { \
|
||||||
size_in_buf = ADIOI_MIN(size, flat_buf_sz); \
|
size_in_buf = ADIOI_MIN(size, flat_buf_sz); \
|
||||||
ADIOI_Assert((((ADIO_Offset)(MPIR_Upint)buf) + user_buf_idx) == (ADIO_Offset)(MPIR_Upint)(buf + user_buf_idx)); \
|
ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + user_buf_idx) == (ADIO_Offset)(MPIU_Upint)(buf + user_buf_idx)); \
|
||||||
ADIOI_Assert(size_in_buf == (size_t)size_in_buf); \
|
ADIOI_Assert(size_in_buf == (size_t)size_in_buf); \
|
||||||
memcpy(((char *) buf) + user_buf_idx, \
|
memcpy(((char *) buf) + user_buf_idx, \
|
||||||
&(recv_buf[p][recv_buf_idx[p]]), size_in_buf); \
|
&(recv_buf[p][recv_buf_idx[p]]), size_in_buf); \
|
||||||
@ -932,14 +1016,14 @@ static void ADIOI_R_Exchange_data(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
||||||
*flat_buf, char **recv_buf, ADIO_Offset
|
*flat_buf, char **recv_buf, ADIO_Offset
|
||||||
*offset_list, ADIO_Offset *len_list,
|
*offset_list, ADIO_Offset *len_list,
|
||||||
unsigned *recv_size,
|
unsigned *recv_size,
|
||||||
MPI_Request *requests, MPI_Status *statuses,
|
MPI_Request *requests, MPI_Status *statuses,
|
||||||
int *recd_from_proc, int nprocs,
|
int *recd_from_proc, int nprocs,
|
||||||
int contig_access_count,
|
int contig_access_count,
|
||||||
ADIO_Offset min_st_offset,
|
ADIO_Offset min_st_offset,
|
||||||
ADIO_Offset fd_size, ADIO_Offset *fd_start,
|
ADIO_Offset fd_size, ADIO_Offset *fd_start,
|
||||||
ADIO_Offset *fd_end,
|
ADIO_Offset *fd_end,
|
||||||
MPI_Aint buftype_extent)
|
MPI_Aint buftype_extent)
|
||||||
{
|
{
|
||||||
@ -958,9 +1042,9 @@ static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
|
|
||||||
/* curr_from_proc[p] = amount of data recd from proc. p that has already
|
/* curr_from_proc[p] = amount of data recd from proc. p that has already
|
||||||
been accounted for so far
|
been accounted for so far
|
||||||
done_from_proc[p] = amount of data already recd from proc. p and
|
done_from_proc[p] = amount of data already recd from proc. p and
|
||||||
filled into user buffer in previous iterations
|
filled into user buffer in previous iterations
|
||||||
user_buf_idx = current location in user buffer
|
user_buf_idx = current location in user buffer
|
||||||
recv_buf_idx[p] = current location in recv_buf of proc. p */
|
recv_buf_idx[p] = current location in recv_buf of proc. p */
|
||||||
curr_from_proc = (unsigned *) ADIOI_Malloc(nprocs * sizeof(unsigned));
|
curr_from_proc = (unsigned *) ADIOI_Malloc(nprocs * sizeof(unsigned));
|
||||||
done_from_proc = (unsigned *) ADIOI_Malloc(nprocs * sizeof(unsigned));
|
done_from_proc = (unsigned *) ADIOI_Malloc(nprocs * sizeof(unsigned));
|
||||||
@ -977,10 +1061,10 @@ static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
flat_buf_sz = flat_buf->blocklens[0];
|
flat_buf_sz = flat_buf->blocklens[0];
|
||||||
|
|
||||||
/* flat_buf_idx = current index into flattened buftype
|
/* flat_buf_idx = current index into flattened buftype
|
||||||
flat_buf_sz = size of current contiguous component in
|
flat_buf_sz = size of current contiguous component in
|
||||||
flattened buf */
|
flattened buf */
|
||||||
|
|
||||||
for (i=0; i<contig_access_count; i++) {
|
for (i=0; i<contig_access_count; i++) {
|
||||||
off = offset_list[i];
|
off = offset_list[i];
|
||||||
rem_len = len_list[i];
|
rem_len = len_list[i];
|
||||||
|
|
||||||
@ -1002,7 +1086,7 @@ static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
if (recv_buf_idx[p] < recv_size[p]) {
|
if (recv_buf_idx[p] < recv_size[p]) {
|
||||||
if (curr_from_proc[p]+len > done_from_proc[p]) {
|
if (curr_from_proc[p]+len > done_from_proc[p]) {
|
||||||
if (done_from_proc[p] > curr_from_proc[p]) {
|
if (done_from_proc[p] > curr_from_proc[p]) {
|
||||||
size = ADIOI_MIN(curr_from_proc[p] + len -
|
size = ADIOI_MIN(curr_from_proc[p] + len -
|
||||||
done_from_proc[p], recv_size[p]-recv_buf_idx[p]);
|
done_from_proc[p], recv_size[p]-recv_buf_idx[p]);
|
||||||
buf_incr = done_from_proc[p] - curr_from_proc[p];
|
buf_incr = done_from_proc[p] - curr_from_proc[p];
|
||||||
ADIOI_BUF_INCR
|
ADIOI_BUF_INCR
|
||||||
@ -1034,7 +1118,7 @@ static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
rem_len -= len;
|
rem_len -= len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (i=0; i < nprocs; i++)
|
for (i=0; i < nprocs; i++)
|
||||||
if (recv_size[i]) recd_from_proc[i] = curr_from_proc[i];
|
if (recv_size[i]) recd_from_proc[i] = curr_from_proc[i];
|
||||||
|
|
||||||
ADIOI_Free(curr_from_proc);
|
ADIOI_Free(curr_from_proc);
|
||||||
@ -1045,16 +1129,16 @@ static void ADIOI_Fill_user_buffer(ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
|||||||
static void ADIOI_R_Exchange_data_alltoallv(
|
static void ADIOI_R_Exchange_data_alltoallv(
|
||||||
ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
ADIO_File fd, void *buf, ADIOI_Flatlist_node
|
||||||
*flat_buf, ADIO_Offset *offset_list, ADIO_Offset
|
*flat_buf, ADIO_Offset *offset_list, ADIO_Offset
|
||||||
*len_list, int *send_size, int *recv_size,
|
*len_list, int *send_size, int *recv_size,
|
||||||
int *count, int *start_pos, int *partial_send,
|
int *count, int *start_pos, int *partial_send,
|
||||||
int *recd_from_proc, int nprocs,
|
int *recd_from_proc, int nprocs,
|
||||||
int myrank, int
|
int myrank, int
|
||||||
buftype_is_contig, int contig_access_count,
|
buftype_is_contig, int contig_access_count,
|
||||||
ADIO_Offset min_st_offset, ADIO_Offset fd_size,
|
ADIO_Offset min_st_offset, ADIO_Offset fd_size,
|
||||||
ADIO_Offset *fd_start, ADIO_Offset *fd_end,
|
ADIO_Offset *fd_start, ADIO_Offset *fd_end,
|
||||||
ADIOI_Access *others_req,
|
ADIOI_Access *others_req,
|
||||||
int iter, MPI_Aint buftype_extent, int *buf_idx)
|
int iter, MPI_Aint buftype_extent, int *buf_idx)
|
||||||
{
|
{
|
||||||
int i, j, k=0, tmp=0, nprocs_recv, nprocs_send;
|
int i, j, k=0, tmp=0, nprocs_recv, nprocs_send;
|
||||||
char **recv_buf = NULL;
|
char **recv_buf = NULL;
|
||||||
MPI_Request *requests=NULL;
|
MPI_Request *requests=NULL;
|
||||||
@ -1068,13 +1152,13 @@ static void ADIOI_R_Exchange_data_alltoallv(
|
|||||||
/* exchange send_size info so that each process knows how much to
|
/* exchange send_size info so that each process knows how much to
|
||||||
receive from whom and how much memory to allocate. */
|
receive from whom and how much memory to allocate. */
|
||||||
MPI_Alltoall(send_size, 1, MPI_INT, recv_size, 1, MPI_INT, fd->comm);
|
MPI_Alltoall(send_size, 1, MPI_INT, recv_size, 1, MPI_INT, fd->comm);
|
||||||
|
|
||||||
nprocs_recv = 0;
|
nprocs_recv = 0;
|
||||||
for (i=0; i<nprocs; i++) if (recv_size[i]) { nprocs_recv++; break; }
|
for (i=0; i<nprocs; i++) if (recv_size[i]) { nprocs_recv++; break; }
|
||||||
|
|
||||||
nprocs_send = 0;
|
nprocs_send = 0;
|
||||||
for (i=0; i<nprocs; i++) if (send_size[i]) { nprocs_send++; break; }
|
for (i=0; i<nprocs; i++) if (send_size[i]) { nprocs_send++; break; }
|
||||||
|
|
||||||
/* receiver side data structures */
|
/* receiver side data structures */
|
||||||
rdispls = (int *) ADIOI_Malloc( nprocs * sizeof(int) );
|
rdispls = (int *) ADIOI_Malloc( nprocs * sizeof(int) );
|
||||||
rtail = 0;
|
rtail = 0;
|
||||||
@ -1128,21 +1212,21 @@ static void ADIOI_R_Exchange_data_alltoallv(
|
|||||||
//for (i=1; i<nprocs; i++) if(all_send_buf[(i-1)*131072]!=all_send_buf[i*131072]){ DBG_FPRINTF(stderr, "\t\t[%d]%2d,", i, all_send_buf [i*131072] ); }
|
//for (i=1; i<nprocs; i++) if(all_send_buf[(i-1)*131072]!=all_send_buf[i*131072]){ DBG_FPRINTF(stderr, "\t\t[%d]%2d,", i, all_send_buf [i*131072] ); }
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* alltoallv */
|
/* alltoallv */
|
||||||
MPI_Alltoallv(
|
MPI_Alltoallv(
|
||||||
all_send_buf, send_size, sdispls, MPI_BYTE,
|
all_send_buf, send_size, sdispls, MPI_BYTE,
|
||||||
all_recv_buf, recv_size, rdispls, MPI_BYTE,
|
all_recv_buf, recv_size, rdispls, MPI_BYTE,
|
||||||
fd->comm );
|
fd->comm );
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
DBG_FPRINTF(stderr, "\tall_recv_buf = " );
|
DBG_FPRINTF(stderr, "\tall_recv_buf = " );
|
||||||
for (i=131072; i<131073; i++) { DBG_FPRINTF(stderr, "%2d,", all_recv_buf [i] ); }
|
for (i=131072; i<131073; i++) { DBG_FPRINTF(stderr, "%2d,", all_recv_buf [i] ); }
|
||||||
DBG_FPRINTF(stderr, "\n" );
|
DBG_FPRINTF(stderr, "\n" );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* unpack at the receiver side */
|
/* unpack at the receiver side */
|
||||||
if (nprocs_recv) {
|
if (nprocs_recv) {
|
||||||
if (!buftype_is_contig)
|
if (!buftype_is_contig)
|
||||||
ADIOI_Fill_user_buffer(fd, buf, flat_buf, recv_buf,
|
ADIOI_Fill_user_buffer(fd, buf, flat_buf, recv_buf,
|
||||||
offset_list, len_list, (unsigned*)recv_size,
|
offset_list, len_list, (unsigned*)recv_size,
|
||||||
@ -1161,11 +1245,11 @@ static void ADIOI_R_Exchange_data_alltoallv(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ADIOI_Free( all_send_buf );
|
ADIOI_Free( all_send_buf );
|
||||||
ADIOI_Free( all_recv_buf );
|
ADIOI_Free( all_recv_buf );
|
||||||
ADIOI_Free( recv_buf );
|
ADIOI_Free( recv_buf );
|
||||||
ADIOI_Free( sdispls );
|
ADIOI_Free( sdispls );
|
||||||
ADIOI_Free( rdispls );
|
ADIOI_Free( rdispls );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
@ -37,9 +37,14 @@ long bglocklessmpio_f_type;
|
|||||||
int gpfsmpio_bg_nagg_pset;
|
int gpfsmpio_bg_nagg_pset;
|
||||||
int gpfsmpio_pthreadio;
|
int gpfsmpio_pthreadio;
|
||||||
int gpfsmpio_p2pcontig;
|
int gpfsmpio_p2pcontig;
|
||||||
|
int gpfsmpio_write_aggmethod;
|
||||||
|
int gpfsmpio_read_aggmethod;
|
||||||
int gpfsmpio_balancecontig;
|
int gpfsmpio_balancecontig;
|
||||||
int gpfsmpio_devnullio;
|
int gpfsmpio_devnullio;
|
||||||
int gpfsmpio_bridgeringagg;
|
int gpfsmpio_bridgeringagg;
|
||||||
|
int gpfsmpio_onesided_no_rmw;
|
||||||
|
int gpfsmpio_onesided_always_rmw;
|
||||||
|
int gpfsmpio_onesided_inform_rmw;
|
||||||
|
|
||||||
double gpfsmpio_prof_cw [GPFSMPIO_CIO_LAST+1];
|
double gpfsmpio_prof_cw [GPFSMPIO_CIO_LAST+1];
|
||||||
double gpfsmpio_prof_cr [GPFSMPIO_CIO_LAST+1];
|
double gpfsmpio_prof_cr [GPFSMPIO_CIO_LAST+1];
|
||||||
@ -105,6 +110,40 @@ double gpfsmpio_prof_cr [GPFSMPIO_CIO_LAST+1];
|
|||||||
* 3.) There are no gaps between the offsets.
|
* 3.) There are no gaps between the offsets.
|
||||||
* 4.) No single rank has a data size which spans multiple file domains.
|
* 4.) No single rank has a data size which spans multiple file domains.
|
||||||
*
|
*
|
||||||
|
* - GPFSMPIO_WRITE_AGGMETHOD/GPFSMPIO_READ_AGGMETHOD - Replaces the two-phase
|
||||||
|
* collective IO aggregation
|
||||||
|
* with a one-sided algorithm, significantly reducing communication and
|
||||||
|
* memory overhead. Fully
|
||||||
|
* supports all datasets and datatypes, the only caveat is that any holes in the data
|
||||||
|
* when writing to a pre-existing file are ignored -- there is no read-modify-write
|
||||||
|
* support to maintain the correctness of regions of pre-existing data so every byte
|
||||||
|
* must be explicitly written to maintain correctness. Users must beware of middle-ware
|
||||||
|
* libraries like PNETCDF which may count on read-modify-write functionality for certain
|
||||||
|
* features (like fill values). Possible values:
|
||||||
|
* - 0 - Normal two-phase collective IO is used.
|
||||||
|
* - 1 - A separate one-sided MPI_Put or MPI_Get is used for each contigous chunk of data
|
||||||
|
* for a compute to write to or read from the collective buffer on the aggregator.
|
||||||
|
* - 2 - An MPI derived datatype is created using all the contigous chunks and just one
|
||||||
|
* call to MPI_Put or MPI_Get is done with the derived datatype. On Blue Gene /Q
|
||||||
|
* optimal performance for this is achieved when paired with PAMID_TYPED_ONESIDED=1.
|
||||||
|
* - Default is 0
|
||||||
|
*
|
||||||
|
* - GPFSMPIO_ONESIDED_NO_RMW - For one-sided aggregation (GPFSMPIO_WRITE_AGGMETHOD = 1 or 2)
|
||||||
|
* disable the detection of holes in the data when writing to a pre-existing
|
||||||
|
* file requiring a read-modify-write, thereby avoiding the communication
|
||||||
|
* overhead for this detection.
|
||||||
|
* - 0 (hole detection enabled) or 1 (hole detection disabled)
|
||||||
|
* - Default is 0
|
||||||
|
*
|
||||||
|
* - GPFSMPIO_ONESIDED_INFORM_RMW - For one-sided aggregation
|
||||||
|
* (GPFSMPIO_AGGMETHOD = 1 or 2) generate an informational message informing
|
||||||
|
* the user whether holes exist in the data when writing to a pre-existing
|
||||||
|
* file requiring a read-modify-write, thereby educating the user to set
|
||||||
|
* GPFSMPIO_ONESIDED_NO_RMW=1 on a future run to avoid the communication
|
||||||
|
* overhead for this detection.
|
||||||
|
* - 0 (disabled) or 1 (enabled)
|
||||||
|
* - Default is 0
|
||||||
|
*
|
||||||
* - GPFSMPIO_BALANCECONTIG - Relevant only to BGQ. File domain blocks are assigned
|
* - GPFSMPIO_BALANCECONTIG - Relevant only to BGQ. File domain blocks are assigned
|
||||||
* to aggregators in a breadth-first fashion relative to the ions - additionally,
|
* to aggregators in a breadth-first fashion relative to the ions - additionally,
|
||||||
* file domains on the aggregators sharing the same bridgeset and ion have contiguous
|
* file domains on the aggregators sharing the same bridgeset and ion have contiguous
|
||||||
@ -165,6 +204,14 @@ void ad_gpfs_get_env_vars() {
|
|||||||
x = getenv( "GPFSMPIO_P2PCONTIG" );
|
x = getenv( "GPFSMPIO_P2PCONTIG" );
|
||||||
if (x) gpfsmpio_p2pcontig = atoi(x);
|
if (x) gpfsmpio_p2pcontig = atoi(x);
|
||||||
|
|
||||||
|
gpfsmpio_write_aggmethod = 0;
|
||||||
|
x = getenv( "GPFSMPIO_WRITE_AGGMETHOD" );
|
||||||
|
if (x) gpfsmpio_write_aggmethod = atoi(x);
|
||||||
|
|
||||||
|
gpfsmpio_read_aggmethod = 0;
|
||||||
|
x = getenv( "GPFSMPIO_READ_AGGMETHOD" );
|
||||||
|
if (x) gpfsmpio_read_aggmethod = atoi(x);
|
||||||
|
|
||||||
gpfsmpio_balancecontig = 0;
|
gpfsmpio_balancecontig = 0;
|
||||||
x = getenv( "GPFSMPIO_BALANCECONTIG" );
|
x = getenv( "GPFSMPIO_BALANCECONTIG" );
|
||||||
if (x) gpfsmpio_balancecontig = atoi(x);
|
if (x) gpfsmpio_balancecontig = atoi(x);
|
||||||
@ -176,6 +223,20 @@ void ad_gpfs_get_env_vars() {
|
|||||||
gpfsmpio_bridgeringagg = 0;
|
gpfsmpio_bridgeringagg = 0;
|
||||||
x = getenv( "GPFSMPIO_BRIDGERINGAGG" );
|
x = getenv( "GPFSMPIO_BRIDGERINGAGG" );
|
||||||
if (x) gpfsmpio_bridgeringagg = atoi(x);
|
if (x) gpfsmpio_bridgeringagg = atoi(x);
|
||||||
|
|
||||||
|
gpfsmpio_onesided_no_rmw = 0;
|
||||||
|
x = getenv( "GPFSMPIO_ONESIDED_NO_RMW" );
|
||||||
|
if (x) gpfsmpio_onesided_no_rmw = atoi(x);
|
||||||
|
|
||||||
|
gpfsmpio_onesided_always_rmw = 0;
|
||||||
|
x = getenv( "GPFSMPIO_ONESIDED_ALWAYS_RMW" );
|
||||||
|
if (x) gpfsmpio_onesided_always_rmw = atoi(x);
|
||||||
|
if (gpfsmpio_onesided_always_rmw)
|
||||||
|
gpfsmpio_onesided_no_rmw = 1;
|
||||||
|
|
||||||
|
gpfsmpio_onesided_inform_rmw = 0;
|
||||||
|
x = getenv( "GPFSMPIO_ONESIDED_INFORM_RMW" );
|
||||||
|
if (x) gpfsmpio_onesided_inform_rmw = atoi(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* report timing breakdown for MPI I/O collective call */
|
/* report timing breakdown for MPI I/O collective call */
|
@ -23,6 +23,7 @@
|
|||||||
* Global variables for the control of
|
* Global variables for the control of
|
||||||
* 1. timing
|
* 1. timing
|
||||||
* 2. select specific optimizations
|
* 2. select specific optimizations
|
||||||
|
* 3. global flags for certain optimizations
|
||||||
*-----------------------------------------*/
|
*-----------------------------------------*/
|
||||||
|
|
||||||
/* timing fields */
|
/* timing fields */
|
||||||
@ -56,7 +57,6 @@ enum {
|
|||||||
extern double gpfsmpio_prof_cw [GPFSMPIO_CIO_LAST+1];
|
extern double gpfsmpio_prof_cw [GPFSMPIO_CIO_LAST+1];
|
||||||
extern double gpfsmpio_prof_cr [GPFSMPIO_CIO_LAST+1];
|
extern double gpfsmpio_prof_cr [GPFSMPIO_CIO_LAST+1];
|
||||||
|
|
||||||
|
|
||||||
/* corresponds to environment variables to select optimizations and timing level */
|
/* corresponds to environment variables to select optimizations and timing level */
|
||||||
extern int gpfsmpio_timing;
|
extern int gpfsmpio_timing;
|
||||||
extern int gpfsmpio_timing_cw_level;
|
extern int gpfsmpio_timing_cw_level;
|
||||||
@ -66,9 +66,14 @@ extern int gpfsmpio_tuneblocking;
|
|||||||
extern long bglocklessmpio_f_type;
|
extern long bglocklessmpio_f_type;
|
||||||
extern int gpfsmpio_pthreadio;
|
extern int gpfsmpio_pthreadio;
|
||||||
extern int gpfsmpio_p2pcontig;
|
extern int gpfsmpio_p2pcontig;
|
||||||
|
extern int gpfsmpio_write_aggmethod;
|
||||||
|
extern int gpfsmpio_read_aggmethod;
|
||||||
extern int gpfsmpio_balancecontig;
|
extern int gpfsmpio_balancecontig;
|
||||||
extern int gpfsmpio_devnullio;
|
extern int gpfsmpio_devnullio;
|
||||||
extern int gpfsmpio_bridgeringagg;
|
extern int gpfsmpio_bridgeringagg;
|
||||||
|
extern int gpfsmpio_onesided_no_rmw;
|
||||||
|
extern int gpfsmpio_onesided_always_rmw;
|
||||||
|
extern int gpfsmpio_onesided_inform_rmw;
|
||||||
|
|
||||||
/* Default is, well, kind of complicated. Blue Gene /L and /P had "psets": one
|
/* Default is, well, kind of complicated. Blue Gene /L and /P had "psets": one
|
||||||
* i/o node and all compute nodes wired to it. On Blue Gene /Q that
|
* i/o node and all compute nodes wired to it. On Blue Gene /Q that
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
@ -13,6 +13,6 @@ noinst_HEADERS += \
|
|||||||
|
|
||||||
romio_other_sources += \
|
romio_other_sources += \
|
||||||
adio/ad_gpfs/bg/ad_bg_aggrs.c \
|
adio/ad_gpfs/bg/ad_bg_aggrs.c \
|
||||||
adio/ad_gpfs/bg/ad_bg_pset.c
|
adio/ad_gpfs/bg/ad_bg_pset.c
|
||||||
|
|
||||||
endif BUILD_AD_BG
|
endif BUILD_AD_BG
|
@ -7,8 +7,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997-2001 University of Chicago.
|
* Copyright (C) 1997-2001 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -46,14 +46,14 @@
|
|||||||
*
|
*
|
||||||
* The last three of these were originally in ad_read_coll.c, but they are
|
* The last three of these were originally in ad_read_coll.c, but they are
|
||||||
* also shared with ad_write_coll.c. I felt that they were better kept with
|
* also shared with ad_write_coll.c. I felt that they were better kept with
|
||||||
* the rest of the shared aggregation code.
|
* the rest of the shared aggregation code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Discussion of values available from above:
|
/* Discussion of values available from above:
|
||||||
*
|
*
|
||||||
* ADIO_Offset st_offsets[0..nprocs-1]
|
* ADIO_Offset st_offsets[0..nprocs-1]
|
||||||
* ADIO_Offset end_offsets[0..nprocs-1]
|
* ADIO_Offset end_offsets[0..nprocs-1]
|
||||||
* These contain a list of start and end offsets for each process in
|
* These contain a list of start and end offsets for each process in
|
||||||
* the communicator. For example, an access at loc 10, size 10 would
|
* the communicator. For example, an access at loc 10, size 10 would
|
||||||
* have a start offset of 10 and end offset of 19.
|
* have a start offset of 10 and end offset of 19.
|
||||||
* int nprocs
|
* int nprocs
|
||||||
@ -63,26 +63,26 @@
|
|||||||
* starting location of "file domain"; region that a given process will
|
* starting location of "file domain"; region that a given process will
|
||||||
* perform aggregation for (i.e. actually do I/O)
|
* perform aggregation for (i.e. actually do I/O)
|
||||||
* ADIO_Offset fd_end[0..nprocs_for_coll-1]
|
* ADIO_Offset fd_end[0..nprocs_for_coll-1]
|
||||||
* start + size - 1 roughly, but it can be less, or 0, in the case of
|
* start + size - 1 roughly, but it can be less, or 0, in the case of
|
||||||
* uneven distributions
|
* uneven distributions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* forward declaration */
|
/* forward declaration */
|
||||||
static void
|
static void
|
||||||
ADIOI_BG_compute_agg_ranklist_serial ( ADIO_File fd,
|
ADIOI_BG_compute_agg_ranklist_serial ( ADIO_File fd,
|
||||||
const ADIOI_BG_ConfInfo_t *confInfo,
|
const ADIOI_BG_ConfInfo_t *confInfo,
|
||||||
ADIOI_BG_ProcInfo_t *all_procInfo);
|
ADIOI_BG_ProcInfo_t *all_procInfo);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compute the aggregator-related parameters that are required in 2-phase collective IO of ADIO.
|
* Compute the aggregator-related parameters that are required in 2-phase collective IO of ADIO.
|
||||||
* The parameters are
|
* The parameters are
|
||||||
* . the number of aggregators (proxies) : fd->hints->cb_nodes
|
* . the number of aggregators (proxies) : fd->hints->cb_nodes
|
||||||
* . the ranks of the aggregators : fd->hints->ranklist
|
* . the ranks of the aggregators : fd->hints->ranklist
|
||||||
* By compute these two parameters in a BG-PSET-aware way, the default 2-phase collective IO of
|
* By compute these two parameters in a BG-PSET-aware way, the default 2-phase collective IO of
|
||||||
* ADIO can work more efficiently.
|
* ADIO can work more efficiently.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
ADIOI_BG_gen_agg_ranklist(ADIO_File fd, int n_aggrs_per_pset)
|
ADIOI_BG_gen_agg_ranklist(ADIO_File fd, int n_aggrs_per_pset)
|
||||||
{
|
{
|
||||||
int r, s;
|
int r, s;
|
||||||
ADIOI_BG_ProcInfo_t *procInfo, *all_procInfo;
|
ADIOI_BG_ProcInfo_t *procInfo, *all_procInfo;
|
||||||
@ -101,13 +101,13 @@ ADIOI_BG_gen_agg_ranklist(ADIO_File fd, int n_aggrs_per_pset)
|
|||||||
/* if (r == 0) */
|
/* if (r == 0) */
|
||||||
all_procInfo = ADIOI_BG_ProcInfo_new_n (s);
|
all_procInfo = ADIOI_BG_ProcInfo_new_n (s);
|
||||||
|
|
||||||
MPI_Gather( (void *)procInfo, sizeof(ADIOI_BG_ProcInfo_t), MPI_BYTE,
|
MPI_Gather( (void *)procInfo, sizeof(ADIOI_BG_ProcInfo_t), MPI_BYTE,
|
||||||
(void *)all_procInfo, sizeof(ADIOI_BG_ProcInfo_t), MPI_BYTE,
|
(void *)all_procInfo, sizeof(ADIOI_BG_ProcInfo_t), MPI_BYTE,
|
||||||
0,
|
0,
|
||||||
fd->comm );
|
fd->comm );
|
||||||
|
|
||||||
/* Compute a list of the ranks of chosen IO proxy CN on process 0 */
|
/* Compute a list of the ranks of chosen IO proxy CN on process 0 */
|
||||||
if (r == 0) {
|
if (r == 0) {
|
||||||
ADIOI_BG_compute_agg_ranklist_serial (fd, confInfo, all_procInfo);
|
ADIOI_BG_compute_agg_ranklist_serial (fd, confInfo, all_procInfo);
|
||||||
/* ADIOI_BG_ProcInfo_free (all_procInfo);*/
|
/* ADIOI_BG_ProcInfo_free (all_procInfo);*/
|
||||||
}
|
}
|
||||||
@ -156,7 +156,7 @@ ADIOI_BG_gen_agg_ranklist(ADIO_File fd, int n_aggrs_per_pset)
|
|||||||
/* Maybe find which bridge node is closer (manhattan distance) and try to
|
/* Maybe find which bridge node is closer (manhattan distance) and try to
|
||||||
* distribute evenly.
|
* distribute evenly.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* Pick IO aggregators based on the under PSET organization and stores the ranks of the proxy CNs in tmp_ranklist.
|
* Pick IO aggregators based on the under PSET organization and stores the ranks of the proxy CNs in tmp_ranklist.
|
||||||
* The first order of tmp_ranklist is : PSET number
|
* The first order of tmp_ranklist is : PSET number
|
||||||
* The secondary order of the list is determined in ADIOI_BG_select_agg_in_pset() and thus adjustable.
|
* The secondary order of the list is determined in ADIOI_BG_select_agg_in_pset() and thus adjustable.
|
||||||
@ -181,9 +181,9 @@ static int intsort(const void *p1, const void *p2)
|
|||||||
return(i1->bridge - i2->bridge);
|
return(i1->bridge - i2->bridge);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ADIOI_BG_compute_agg_ranklist_serial_do (const ADIOI_BG_ConfInfo_t *confInfo,
|
ADIOI_BG_compute_agg_ranklist_serial_do (const ADIOI_BG_ConfInfo_t *confInfo,
|
||||||
ADIOI_BG_ProcInfo_t *all_procInfo,
|
ADIOI_BG_ProcInfo_t *all_procInfo,
|
||||||
int *tmp_ranklist)
|
int *tmp_ranklist)
|
||||||
{
|
{
|
||||||
TRACE_ERR("Entering ADIOI_BG_compute_agg_ranklist_serial_do\n");
|
TRACE_ERR("Entering ADIOI_BG_compute_agg_ranklist_serial_do\n");
|
||||||
@ -281,6 +281,14 @@ ADIOI_BG_compute_agg_ranklist_serial_do (const ADIOI_BG_ConfInfo_t *confInfo,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
currentNumHops++;
|
currentNumHops++;
|
||||||
|
/* Handle the case where the numAggs is more than exists starting
|
||||||
|
* at gpfsmpio_bridgeringagg hops, wrap back and restart at 0 to
|
||||||
|
* assign the overrun - it is up to the user to realize this
|
||||||
|
* situation and adjust numAggs and gpfsmpio_bridgeringagg
|
||||||
|
* accordingly.
|
||||||
|
*/
|
||||||
|
if (currentNumHops > 16)
|
||||||
|
currentNumHops = 0;
|
||||||
/* If 3 rounds go by without selecting an agg abort to avoid
|
/* If 3 rounds go by without selecting an agg abort to avoid
|
||||||
infinite loop.
|
infinite loop.
|
||||||
*/
|
*/
|
||||||
@ -313,7 +321,7 @@ ADIOI_BG_compute_agg_ranklist_serial_do (const ADIOI_BG_ConfInfo_t *confInfo,
|
|||||||
bridgelist[i].rank = i;
|
bridgelist[i].rank = i;
|
||||||
TRACE_ERR("bridgelist[%d].bridge: %d .rank: %d\n", i, bridgelist[i].bridge, i);
|
TRACE_ERR("bridgelist[%d].bridge: %d .rank: %d\n", i, bridgelist[i].bridge, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This list contains rank->bridge info. Now, we need to sort this list. */
|
/* This list contains rank->bridge info. Now, we need to sort this list. */
|
||||||
qsort(bridgelist, confInfo->nProcs, sizeof(sortstruct), intsort);
|
qsort(bridgelist, confInfo->nProcs, sizeof(sortstruct), intsort);
|
||||||
|
|
||||||
@ -324,7 +332,7 @@ ADIOI_BG_compute_agg_ranklist_serial_do (const ADIOI_BG_ConfInfo_t *confInfo,
|
|||||||
if(numAggs == 1)
|
if(numAggs == 1)
|
||||||
aggTotal = 1;
|
aggTotal = 1;
|
||||||
else
|
else
|
||||||
/* the number of aggregators is (numAggs per bridgenode) plus each
|
/* the number of aggregators is (numAggs per bridgenode) plus each
|
||||||
* bridge node is an aggregator */
|
* bridge node is an aggregator */
|
||||||
aggTotal = confInfo->numBridgeRanks * (numAggs+1);
|
aggTotal = confInfo->numBridgeRanks * (numAggs+1);
|
||||||
|
|
||||||
@ -350,7 +358,7 @@ ADIOI_BG_compute_agg_ranklist_serial_do (const ADIOI_BG_ConfInfo_t *confInfo,
|
|||||||
if(lastBridge == bridgelist[procIndex].bridge)
|
if(lastBridge == bridgelist[procIndex].bridge)
|
||||||
{
|
{
|
||||||
psetSize++;
|
psetSize++;
|
||||||
if(procIndex) continue;
|
if(procIndex) continue;
|
||||||
else procIndex--;/* procIndex == 0 */
|
else procIndex--;/* procIndex == 0 */
|
||||||
}
|
}
|
||||||
/* Sets up a list of nodes which will act as aggregators. numAggs
|
/* Sets up a list of nodes which will act as aggregators. numAggs
|
||||||
@ -377,7 +385,7 @@ ADIOI_BG_compute_agg_ranklist_serial_do (const ADIOI_BG_ConfInfo_t *confInfo,
|
|||||||
aggList[nextAggr] = bridgelist[procIndex+j*distance+1].rank;
|
aggList[nextAggr] = bridgelist[procIndex+j*distance+1].rank;
|
||||||
TRACE_ERR("agglist[%d] -> bridgelist[%d] = %d\n", nextAggr, procIndex+j*distance+1,aggList[nextAggr]);
|
TRACE_ERR("agglist[%d] -> bridgelist[%d] = %d\n", nextAggr, procIndex+j*distance+1,aggList[nextAggr]);
|
||||||
if(aggList[nextAggr]==lastBridge) /* can't have bridge in the list twice */
|
if(aggList[nextAggr]==lastBridge) /* can't have bridge in the list twice */
|
||||||
{
|
{
|
||||||
aggList[nextAggr] = bridgelist[procIndex+psetSize].rank; /* take the last one in the pset */
|
aggList[nextAggr] = bridgelist[procIndex+psetSize].rank; /* take the last one in the pset */
|
||||||
TRACE_ERR("replacement agglist[%d] -> bridgelist[%d] = %d\n", nextAggr, procIndex+psetSize,aggList[nextAggr]);
|
TRACE_ERR("replacement agglist[%d] -> bridgelist[%d] = %d\n", nextAggr, procIndex+psetSize,aggList[nextAggr]);
|
||||||
}
|
}
|
||||||
@ -409,17 +417,17 @@ ADIOI_BG_compute_agg_ranklist_serial_do (const ADIOI_BG_ConfInfo_t *confInfo,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* compute aggregators ranklist and put it into fd->hints struct
|
* compute aggregators ranklist and put it into fd->hints struct
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
ADIOI_BG_compute_agg_ranklist_serial ( ADIO_File fd,
|
ADIOI_BG_compute_agg_ranklist_serial ( ADIO_File fd,
|
||||||
const ADIOI_BG_ConfInfo_t *confInfo,
|
const ADIOI_BG_ConfInfo_t *confInfo,
|
||||||
ADIOI_BG_ProcInfo_t *all_procInfo)
|
ADIOI_BG_ProcInfo_t *all_procInfo)
|
||||||
{
|
{
|
||||||
TRACE_ERR("Entering ADIOI_BG_compute_agg_ranklist_serial\n");
|
TRACE_ERR("Entering ADIOI_BG_compute_agg_ranklist_serial\n");
|
||||||
int i;
|
int i;
|
||||||
int naggs;
|
int naggs;
|
||||||
int size;
|
int size;
|
||||||
int *tmp_ranklist;
|
int *tmp_ranklist;
|
||||||
|
|
||||||
@ -428,23 +436,22 @@ ADIOI_BG_compute_agg_ranklist_serial ( ADIO_File fd,
|
|||||||
|
|
||||||
# if AGG_DEBUG
|
# if AGG_DEBUG
|
||||||
for (i=0; i<confInfo->nProcs; i++) {
|
for (i=0; i<confInfo->nProcs; i++) {
|
||||||
DBG_FPRINTF(stderr, "\tcpuid %1d, rank = %6d\n", all_procInfo[i].coreID, all_procInfo[i].rank );
|
DBG_FPRINTF(stderr, "\trank = %6d\n", all_procInfo[i].rank );
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
naggs=
|
naggs=
|
||||||
ADIOI_BG_compute_agg_ranklist_serial_do (confInfo, all_procInfo, tmp_ranklist);
|
ADIOI_BG_compute_agg_ranklist_serial_do (confInfo, all_procInfo, tmp_ranklist);
|
||||||
|
|
||||||
# define VERIFY 1
|
# define VERIFY 1
|
||||||
# if VERIFY
|
# if VERIFY
|
||||||
DBG_FPRINTF(stderr, "\tconfInfo = min: %3d, max: %3d, naggrs: %3d, bridge: %3d, nprocs: %3d, vpset: %3d, tsize: %3d, ratio: %.4f; naggs = %d\n",
|
DBG_FPRINTF(stderr, "\tconfInfo = min: %3d, max: %3d, naggrs: %3d, bridge: %3d, nprocs: %3d, vpset: %3d, ratio: %.4f; naggs = %d\n",
|
||||||
confInfo->ioMinSize ,
|
confInfo->ioMinSize ,
|
||||||
confInfo->ioMaxSize ,
|
confInfo->ioMaxSize ,
|
||||||
confInfo->nAggrs ,
|
confInfo->nAggrs ,
|
||||||
confInfo->numBridgeRanks ,
|
confInfo->numBridgeRanks ,
|
||||||
confInfo->nProcs ,
|
confInfo->nProcs ,
|
||||||
confInfo->ioMaxSize /*virtualPsetSize*/ ,
|
confInfo->ioMaxSize /*virtualPsetSize*/ ,
|
||||||
confInfo->cpuIDsize,
|
|
||||||
confInfo->aggRatio ,
|
confInfo->aggRatio ,
|
||||||
naggs );
|
naggs );
|
||||||
# endif
|
# endif
|
||||||
@ -462,7 +469,7 @@ ADIOI_BG_compute_agg_ranklist_serial ( ADIO_File fd,
|
|||||||
tmp_ranklist[i] = 0;
|
tmp_ranklist[i] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# if AGG_DEBUG
|
# if AGG_DEBUG
|
||||||
for (i=0; i<naggs; i++) {
|
for (i=0; i<naggs; i++) {
|
||||||
DBG_FPRINTF(stderr, "\taggr %-4d = %6d\n", i, tmp_ranklist[i] );
|
DBG_FPRINTF(stderr, "\taggr %-4d = %6d\n", i, tmp_ranklist[i] );
|
@ -6,7 +6,7 @@
|
|||||||
* \brief ???
|
* \brief ???
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Declares functions specific for the BlueGene platform within the GPFS
|
* Declares functions specific for the BlueGene platform within the GPFS
|
||||||
* parallel I/O solution. Implements aligned file-domain partitioning
|
* parallel I/O solution. Implements aligned file-domain partitioning
|
@ -3,12 +3,12 @@
|
|||||||
/* ---------------------------------------------------------------- */
|
/* ---------------------------------------------------------------- */
|
||||||
/**
|
/**
|
||||||
* \file ad_bg_pset.c
|
* \file ad_bg_pset.c
|
||||||
* \brief Definition of functions associated to structs ADIOI_BG_ProcInfo_t and ADIOI_BG_ConfInfo_t
|
* \brief Definition of functions associated to structs ADIOI_BG_ProcInfo_t and ADIOI_BG_ConfInfo_t
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -16,14 +16,14 @@
|
|||||||
// #define bridgeringaggtrace 1
|
// #define bridgeringaggtrace 1
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include "../ad_gpfs.h"
|
#include "../ad_gpfs.h"
|
||||||
#include "ad_bg_pset.h"
|
#include "ad_bg_pset.h"
|
||||||
#include <spi/include/kernel/process.h>
|
#include <spi/include/kernel/process.h>
|
||||||
#include <firmware/include/personality.h>
|
#include <firmware/include/personality.h>
|
||||||
|
|
||||||
#ifdef HAVE_MPIX_H
|
#define BGQ_TORUS_MAX_DIMS 5
|
||||||
#include <mpix.h>
|
#define BGQ_FULL_TORUS_SIZE 512
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef TRACE_ERR
|
#ifndef TRACE_ERR
|
||||||
# define TRACE_ERR(fmt...)
|
# define TRACE_ERR(fmt...)
|
||||||
@ -81,8 +81,8 @@ static int intsort(const void *p1, const void *p2)
|
|||||||
return(i1->bridgeCoord - i2->bridgeCoord);
|
return(i1->bridgeCoord - i2->bridgeCoord);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned torusSize[MPIX_TORUS_MAX_DIMS];
|
unsigned torusSize[BGQ_TORUS_MAX_DIMS];
|
||||||
unsigned dimTorus[MPIX_TORUS_MAX_DIMS];
|
bool dimTorus[BGQ_TORUS_MAX_DIMS];
|
||||||
|
|
||||||
/* This function computes the number of hops between the torus coordinates of the
|
/* This function computes the number of hops between the torus coordinates of the
|
||||||
* aggCoords and bridgeCoords parameters.
|
* aggCoords and bridgeCoords parameters.
|
||||||
@ -91,7 +91,7 @@ static unsigned procManhattanDistance(unsigned *aggCoords, unsigned *bridgeCoord
|
|||||||
|
|
||||||
unsigned totalDistance = 0;
|
unsigned totalDistance = 0;
|
||||||
int i;
|
int i;
|
||||||
for (i=0;i<MPIX_TORUS_MAX_DIMS;i++) {
|
for (i=0;i<BGQ_TORUS_MAX_DIMS;i++) {
|
||||||
unsigned dimDistance = abs((int)aggCoords[i] - (int)bridgeCoords[i]);
|
unsigned dimDistance = abs((int)aggCoords[i] - (int)bridgeCoords[i]);
|
||||||
if (dimDistance > 0) { // could torus make it closer?
|
if (dimDistance > 0) { // could torus make it closer?
|
||||||
if (dimTorus[i]) {
|
if (dimTorus[i]) {
|
||||||
@ -111,10 +111,35 @@ static unsigned procManhattanDistance(unsigned *aggCoords, unsigned *bridgeCoord
|
|||||||
return totalDistance;
|
return totalDistance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int BGQ_IO_node_id ()
|
||||||
|
{
|
||||||
|
static unsigned long IO_node_id = ULONG_MAX;
|
||||||
|
|
||||||
void
|
if (IO_node_id != ULONG_MAX)
|
||||||
ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
return (int)(IO_node_id>>32);
|
||||||
ADIOI_BG_ProcInfo_t *proc,
|
|
||||||
|
int rc;
|
||||||
|
int fd;
|
||||||
|
char* uci_str;
|
||||||
|
char buffer[4096];
|
||||||
|
|
||||||
|
fd = open("/dev/bgpers", O_RDONLY, 0);
|
||||||
|
assert(fd>=0);
|
||||||
|
rc = read(fd, buffer, sizeof(buffer));
|
||||||
|
assert(rc>0);
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
uci_str = strstr(buffer, "BG_UCI=");
|
||||||
|
assert(uci_str);
|
||||||
|
uci_str += sizeof("BG_UCI=")-1;
|
||||||
|
|
||||||
|
IO_node_id = strtoul(uci_str, NULL, 16);
|
||||||
|
return (int)(IO_node_id>>32);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
||||||
|
ADIOI_BG_ProcInfo_t *proc,
|
||||||
int size, int rank, int n_aggrs, MPI_Comm comm)
|
int size, int rank, int n_aggrs, MPI_Comm comm)
|
||||||
{
|
{
|
||||||
int i, iambridge=0, bridgerank = -1, bridgeIndex;
|
int i, iambridge=0, bridgerank = -1, bridgeIndex;
|
||||||
@ -125,15 +150,13 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
TRACE_ERR("Entering BG_persInfo_init, size: %d, rank: %d, n_aggrs: %d, comm: %d\n", size, rank, n_aggrs, (int)comm);
|
TRACE_ERR("Entering BG_persInfo_init, size: %d, rank: %d, n_aggrs: %d, comm: %d\n", size, rank, n_aggrs, (int)comm);
|
||||||
|
|
||||||
Personality_t pers;
|
Personality_t pers;
|
||||||
MPIX_Hardware_t hw;
|
|
||||||
MPIX_Hardware(&hw);
|
|
||||||
TRACE_ERR("BG_persInfo_init, my coords{%u,%u,%u,%u,%u} rankInPset %u,sizeOfPset %u,idOfPset %u\n",hw.Coords[0],hw.Coords[1],hw.Coords[2],hw.Coords[3],hw.Coords[4],hw.rankInPset,hw.sizeOfPset,hw.idOfPset);
|
|
||||||
|
|
||||||
|
|
||||||
Kernel_GetPersonality(&pers, sizeof(pers));
|
Kernel_GetPersonality(&pers, sizeof(pers));
|
||||||
|
Personality_Networks_t *net = &pers.Network_Config;
|
||||||
|
|
||||||
|
TRACE_ERR("BG_persInfo_init, my coords{%u,%u,%u,%u,%u}\n",net->Acoord,net->Bcoord,net->Ccoord,net->Dcoord,net->Ecoord);
|
||||||
proc->rank = rank;
|
proc->rank = rank;
|
||||||
proc->coreID = hw.coreID;
|
|
||||||
|
|
||||||
if (gpfsmpio_bridgeringagg > 0) {
|
if (gpfsmpio_bridgeringagg > 0) {
|
||||||
#ifdef bridgeringaggtrace
|
#ifdef bridgeringaggtrace
|
||||||
@ -143,26 +166,44 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
|
|
||||||
/* Set the numNodesInPartition and nodeRank for this proc
|
/* Set the numNodesInPartition and nodeRank for this proc
|
||||||
*/
|
*/
|
||||||
proc->numNodesInPartition = 1;
|
unsigned dimMaxArray[BGQ_TORUS_MAX_DIMS];
|
||||||
|
dimMaxArray[0] = net->Anodes;
|
||||||
|
dimMaxArray[1] = net->Bnodes;
|
||||||
|
dimMaxArray[2] = net->Cnodes;
|
||||||
|
dimMaxArray[3] = net->Dnodes;
|
||||||
|
dimMaxArray[4] = net->Enodes;
|
||||||
|
|
||||||
|
unsigned hwCoordsArray[BGQ_TORUS_MAX_DIMS];
|
||||||
|
hwCoordsArray[0] = net->Acoord;
|
||||||
|
hwCoordsArray[1] = net->Bcoord;
|
||||||
|
hwCoordsArray[2] = net->Ccoord;
|
||||||
|
hwCoordsArray[3] = net->Dcoord;
|
||||||
|
hwCoordsArray[4] = net->Ecoord;
|
||||||
|
proc->numNodesInPartition = net->Anodes * net->Bnodes * net->Cnodes * net->Dnodes * net->Enodes;
|
||||||
proc->nodeRank = 0;
|
proc->nodeRank = 0;
|
||||||
for (i=0;i<MPIX_TORUS_MAX_DIMS;i++) {
|
/* Set the indicator for if a dimension in the partitions is a torus or not.
|
||||||
torusSize[i] = hw.Size[i];
|
*/
|
||||||
dimTorus[i] = hw.isTorus[i];
|
dimTorus[0] = (bool) (ND_ENABLE_TORUS_DIM_A & net->NetFlags);
|
||||||
proc->numNodesInPartition *= hw.Size[i];
|
dimTorus[1] = (bool) (ND_ENABLE_TORUS_DIM_B & net->NetFlags);
|
||||||
|
dimTorus[2] = (bool) (ND_ENABLE_TORUS_DIM_C & net->NetFlags);
|
||||||
|
dimTorus[3] = (bool) (ND_ENABLE_TORUS_DIM_D & net->NetFlags);
|
||||||
|
dimTorus[4] = (bool) (ND_ENABLE_TORUS_DIM_E & net->NetFlags);
|
||||||
|
for (i=0;i<BGQ_TORUS_MAX_DIMS;i++) {
|
||||||
|
torusSize[i] = dimMaxArray[i];
|
||||||
int baseNum = 1, j;
|
int baseNum = 1, j;
|
||||||
for (j=0;j<i;j++)
|
for (j=0;j<i;j++)
|
||||||
baseNum *= hw.Size[j];
|
baseNum *= dimMaxArray[j];
|
||||||
proc->nodeRank += (hw.Coords[i] * baseNum);
|
proc->nodeRank += (hwCoordsArray[i] * baseNum);
|
||||||
#ifdef bridgeringaggtrace
|
#ifdef bridgeringaggtrace
|
||||||
if (rank == 0)
|
if (rank == 0)
|
||||||
fprintf(stderr,"Dimension %d has %d elements wrap-around value is %d\n",i,torusSize[i],dimTorus[i]);
|
fprintf(stderr,"numNodesInPartition is %d Dimension %d has %d elements wrap-around value is %d\n",proc->numNodesInPartition,i,torusSize[i],dimTorus[i]);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MPI_Comm_size(comm, &commsize);
|
MPI_Comm_size(comm, &commsize);
|
||||||
|
|
||||||
proc->ionID = MPIX_IO_node_id ();
|
proc->ionID = BGQ_IO_node_id ();
|
||||||
|
|
||||||
if(size == 1)
|
if(size == 1)
|
||||||
{
|
{
|
||||||
@ -179,8 +220,6 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
conf->ioMaxSize = size;
|
conf->ioMaxSize = size;
|
||||||
conf->numBridgeRanks = 1;
|
conf->numBridgeRanks = 1;
|
||||||
conf->nProcs = size;
|
conf->nProcs = size;
|
||||||
conf->cpuIDsize = hw.ppn;
|
|
||||||
/*conf->virtualPsetSize = conf->ioMaxSize * conf->cpuIDsize;*/
|
|
||||||
conf->nAggrs = 1;
|
conf->nAggrs = 1;
|
||||||
conf->aggRatio = 1. * conf->nAggrs / conf->ioMinSize /*virtualPsetSize*/;
|
conf->aggRatio = 1. * conf->nAggrs / conf->ioMinSize /*virtualPsetSize*/;
|
||||||
if(conf->aggRatio > 1) conf->aggRatio = 1.;
|
if(conf->aggRatio > 1) conf->aggRatio = 1.;
|
||||||
@ -191,20 +230,20 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
/* Find the nearest bridge node coords. We don't know the
|
/* Find the nearest bridge node coords. We don't know the
|
||||||
rank in our comm so we will collective find/pick a bridge
|
rank in our comm so we will collective find/pick a bridge
|
||||||
rank later.
|
rank later.
|
||||||
*/
|
*/
|
||||||
int32_t bridgeCoords;
|
int32_t bridgeCoords;
|
||||||
bridgeCoords = pers.Network_Config.cnBridge_A << 24 |
|
bridgeCoords = pers.Network_Config.cnBridge_A << 24 |
|
||||||
pers.Network_Config.cnBridge_B << 18 |
|
pers.Network_Config.cnBridge_B << 18 |
|
||||||
pers.Network_Config.cnBridge_C << 12 |
|
pers.Network_Config.cnBridge_C << 12 |
|
||||||
pers.Network_Config.cnBridge_D << 6 |
|
pers.Network_Config.cnBridge_D << 6 |
|
||||||
pers.Network_Config.cnBridge_E << 2;
|
pers.Network_Config.cnBridge_E << 2;
|
||||||
ADIOI_Assert((bridgeCoords >= 0)); /* A dim is < 6 bits or sorting won't work */
|
ADIOI_Assert((bridgeCoords >= 0)); /* A dim is < 6 bits or sorting won't work */
|
||||||
|
|
||||||
if((hw.Coords[0] == pers.Network_Config.cnBridge_A) &&
|
if((net->Acoord == pers.Network_Config.cnBridge_A) &&
|
||||||
(hw.Coords[1] == pers.Network_Config.cnBridge_B) &&
|
(net->Bcoord == pers.Network_Config.cnBridge_B) &&
|
||||||
(hw.Coords[2] == pers.Network_Config.cnBridge_C) &&
|
(net->Ccoord == pers.Network_Config.cnBridge_C) &&
|
||||||
(hw.Coords[3] == pers.Network_Config.cnBridge_D) &&
|
(net->Dcoord == pers.Network_Config.cnBridge_D) &&
|
||||||
(hw.Coords[4] == pers.Network_Config.cnBridge_E)) {
|
(net->Ecoord == pers.Network_Config.cnBridge_E)) {
|
||||||
iambridge = 1; /* I am bridge */
|
iambridge = 1; /* I am bridge */
|
||||||
if (gpfsmpio_bridgeringagg > 0) {
|
if (gpfsmpio_bridgeringagg > 0) {
|
||||||
proc->manhattanDistanceToBridge = 0;
|
proc->manhattanDistanceToBridge = 0;
|
||||||
@ -212,16 +251,16 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
}
|
}
|
||||||
else { // calculate manhattan distance to bridge if gpfsmpio_bridgeringagg is set
|
else { // calculate manhattan distance to bridge if gpfsmpio_bridgeringagg is set
|
||||||
if (gpfsmpio_bridgeringagg > 0) {
|
if (gpfsmpio_bridgeringagg > 0) {
|
||||||
unsigned aggCoords[MPIX_TORUS_MAX_DIMS],manhattanBridgeCoords[MPIX_TORUS_MAX_DIMS];
|
unsigned aggCoords[BGQ_TORUS_MAX_DIMS],manhattanBridgeCoords[BGQ_TORUS_MAX_DIMS];
|
||||||
aggCoords[0] = hw.Coords[0];
|
aggCoords[0] = net->Acoord;
|
||||||
manhattanBridgeCoords[0] = pers.Network_Config.cnBridge_A;
|
manhattanBridgeCoords[0] = pers.Network_Config.cnBridge_A;
|
||||||
aggCoords[1] = hw.Coords[1];
|
aggCoords[1] = net->Bcoord;
|
||||||
manhattanBridgeCoords[1] = pers.Network_Config.cnBridge_B;
|
manhattanBridgeCoords[1] = pers.Network_Config.cnBridge_B;
|
||||||
aggCoords[2] = hw.Coords[2];
|
aggCoords[2] = net->Ccoord;
|
||||||
manhattanBridgeCoords[2] = pers.Network_Config.cnBridge_C;
|
manhattanBridgeCoords[2] = pers.Network_Config.cnBridge_C;
|
||||||
aggCoords[3] = hw.Coords[3];
|
aggCoords[3] = net->Dcoord;
|
||||||
manhattanBridgeCoords[3] = pers.Network_Config.cnBridge_D;
|
manhattanBridgeCoords[3] = pers.Network_Config.cnBridge_D;
|
||||||
aggCoords[4] = hw.Coords[4];
|
aggCoords[4] = net->Ecoord;
|
||||||
manhattanBridgeCoords[4] = pers.Network_Config.cnBridge_E;
|
manhattanBridgeCoords[4] = pers.Network_Config.cnBridge_E;
|
||||||
|
|
||||||
proc->manhattanDistanceToBridge= procManhattanDistance(aggCoords, manhattanBridgeCoords);
|
proc->manhattanDistanceToBridge= procManhattanDistance(aggCoords, manhattanBridgeCoords);
|
||||||
@ -238,16 +277,16 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
bridges = (sortstruct *) ADIOI_Malloc(sizeof(sortstruct) * size);
|
bridges = (sortstruct *) ADIOI_Malloc(sizeof(sortstruct) * size);
|
||||||
|
|
||||||
/* We're going to sort this structure by bridgeCoord:
|
/* We're going to sort this structure by bridgeCoord:
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int rank;
|
int rank;
|
||||||
int bridgeCoord;
|
int bridgeCoord;
|
||||||
} sortstruct;
|
} sortstruct;
|
||||||
|
|
||||||
and I want the rank that IS the bridge to sort first, so
|
and I want the rank that IS the bridge to sort first, so
|
||||||
OR in '1' on non-bridge ranks that use a bridge coord.
|
OR in '1' on non-bridge ranks that use a bridge coord.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* My input to the collective */
|
/* My input to the collective */
|
||||||
bridges[rank].rank = rank;
|
bridges[rank].rank = rank;
|
||||||
@ -268,18 +307,18 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
tempRank = bridges[0].rank;
|
tempRank = bridges[0].rank;
|
||||||
|
|
||||||
countPset=1;
|
countPset=1;
|
||||||
bridgeIndex = 0;
|
bridgeIndex = 0;
|
||||||
mincompute = size+1;
|
mincompute = size+1;
|
||||||
maxcompute = 1;
|
maxcompute = 1;
|
||||||
|
|
||||||
for(i=1; i<size; i++)
|
for(i=1; i<size; i++)
|
||||||
{
|
{
|
||||||
if((bridges[i].bridgeCoord & ~1) == tempCoords)
|
if((bridges[i].bridgeCoord & ~1) == tempCoords)
|
||||||
countPset++; /* same bridge (pset), count it */
|
countPset++; /* same bridge (pset), count it */
|
||||||
else /* new bridge found */
|
else /* new bridge found */
|
||||||
{
|
{
|
||||||
#ifdef TRACE_ON
|
#ifdef TRACE_ON
|
||||||
if(rank == 0)
|
if(rank == 0)
|
||||||
TRACE_ERR("Bridge set %u, bridge rank %d (%#8.8X) has %d ranks\n",
|
TRACE_ERR("Bridge set %u, bridge rank %d (%#8.8X) has %d ranks\n",
|
||||||
bridgeIndex, tempRank, tempCoords, countPset);
|
bridgeIndex, tempRank, tempCoords, countPset);
|
||||||
#endif
|
#endif
|
||||||
@ -294,7 +333,7 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
/* Am I the bridge rank? */
|
/* Am I the bridge rank? */
|
||||||
if(tempRank == rank)
|
if(tempRank == rank)
|
||||||
iambridge = 1;
|
iambridge = 1;
|
||||||
else
|
else
|
||||||
iambridge = 0; /* Another rank on my node may have taken over */
|
iambridge = 0; /* Another rank on my node may have taken over */
|
||||||
TRACE_ERR("Rank %u, bridge set %u, bridge rank %d (%#8.8X) has %d ranks, iambridge %u\n",
|
TRACE_ERR("Rank %u, bridge set %u, bridge rank %d (%#8.8X) has %d ranks, iambridge %u\n",
|
||||||
rank, bridgeIndex, tempRank, tempCoords, countPset,iambridge);
|
rank, bridgeIndex, tempRank, tempCoords, countPset,iambridge);
|
||||||
@ -312,7 +351,7 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
/* Process last bridge */
|
/* Process last bridge */
|
||||||
|
|
||||||
#ifdef TRACE_ON
|
#ifdef TRACE_ON
|
||||||
if(rank == 0)
|
if(rank == 0)
|
||||||
TRACE_ERR("Bridge set %u, bridge rank %d (%#8.8X) has %d ranks\n",
|
TRACE_ERR("Bridge set %u, bridge rank %d (%#8.8X) has %d ranks\n",
|
||||||
bridgeIndex, tempRank, tempCoords, countPset);
|
bridgeIndex, tempRank, tempCoords, countPset);
|
||||||
#endif
|
#endif
|
||||||
@ -327,32 +366,30 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
/* Am I the bridge rank? */
|
/* Am I the bridge rank? */
|
||||||
if(tempRank == rank)
|
if(tempRank == rank)
|
||||||
iambridge = 1;
|
iambridge = 1;
|
||||||
else
|
else
|
||||||
iambridge = 0; /* Another rank on my node may have taken over */
|
iambridge = 0; /* Another rank on my node may have taken over */
|
||||||
bridgerank = tempRank;
|
bridgerank = tempRank;
|
||||||
proc->myIOSize = countPset;
|
proc->myIOSize = countPset;
|
||||||
proc->ioNodeIndex = bridgeIndex;
|
proc->ioNodeIndex = bridgeIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(rank == 0)
|
if(rank == 0)
|
||||||
{
|
{
|
||||||
/* Only rank 0 has a conf structure, fill in stuff as appropriate */
|
/* Only rank 0 has a conf structure, fill in stuff as appropriate */
|
||||||
conf->ioMinSize = mincompute;
|
conf->ioMinSize = mincompute;
|
||||||
conf->ioMaxSize = maxcompute; /* equivalent to pset size */
|
conf->ioMaxSize = maxcompute; /* equivalent to pset size */
|
||||||
conf->numBridgeRanks = bridgeIndex+1;
|
conf->numBridgeRanks = bridgeIndex+1;
|
||||||
conf->nProcs = size;
|
conf->nProcs = size;
|
||||||
conf->cpuIDsize = hw.ppn;
|
|
||||||
/*conf->virtualPsetSize = maxcompute * conf->cpuIDsize;*/
|
|
||||||
|
|
||||||
conf->nAggrs = n_aggrs;
|
conf->nAggrs = n_aggrs;
|
||||||
/* First pass gets nAggrs = -1 */
|
/* First pass gets nAggrs = -1 */
|
||||||
if(conf->nAggrs <=0)
|
if(conf->nAggrs <=0)
|
||||||
conf->nAggrs = gpfsmpio_bg_nagg_pset;
|
conf->nAggrs = gpfsmpio_bg_nagg_pset;
|
||||||
if(conf->ioMinSize <= conf->nAggrs)
|
if(conf->ioMinSize <= conf->nAggrs)
|
||||||
conf->nAggrs = ADIOI_MAX(1,conf->ioMinSize-1); /* not including bridge itself */
|
conf->nAggrs = ADIOI_MAX(1,conf->ioMinSize-1); /* not including bridge itself */
|
||||||
/* if(conf->nAggrs > conf->numBridgeRanks)
|
/* if(conf->nAggrs > conf->numBridgeRanks)
|
||||||
conf->nAggrs = conf->numBridgeRanks;
|
conf->nAggrs = conf->numBridgeRanks;
|
||||||
*/
|
*/
|
||||||
conf->aggRatio = 1. * conf->nAggrs / conf->ioMinSize /*virtualPsetSize*/;
|
conf->aggRatio = 1. * conf->nAggrs / conf->ioMinSize /*virtualPsetSize*/;
|
||||||
/* if(conf->aggRatio > 1) conf->aggRatio = 1.; */
|
/* if(conf->aggRatio > 1) conf->aggRatio = 1.; */
|
||||||
@ -369,7 +406,7 @@ ADIOI_BG_persInfo_init(ADIOI_BG_ConfInfo_t *conf,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ADIOI_BG_persInfo_free( ADIOI_BG_ConfInfo_t *conf, ADIOI_BG_ProcInfo_t *proc )
|
ADIOI_BG_persInfo_free( ADIOI_BG_ConfInfo_t *conf, ADIOI_BG_ProcInfo_t *proc )
|
||||||
{
|
{
|
||||||
ADIOI_BG_ConfInfo_free( conf );
|
ADIOI_BG_ConfInfo_free( conf );
|
@ -17,9 +17,6 @@
|
|||||||
#ifndef AD_BG_PSET_H_
|
#ifndef AD_BG_PSET_H_
|
||||||
#define AD_BG_PSET_H_
|
#define AD_BG_PSET_H_
|
||||||
|
|
||||||
#ifdef HAVE_MPIX_H
|
|
||||||
#include <mpix.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Keeps specific information to each process, will be exchanged among processes */
|
/* Keeps specific information to each process, will be exchanged among processes */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -28,7 +25,6 @@ typedef struct {
|
|||||||
int ionID; /* ion id this cn is using */
|
int ionID; /* ion id this cn is using */
|
||||||
/* int myCoords[5]; */
|
/* int myCoords[5]; */
|
||||||
int bridgeRank; /* my bridge node (or proxy) rank */
|
int bridgeRank; /* my bridge node (or proxy) rank */
|
||||||
unsigned char coreID;
|
|
||||||
unsigned char threadID; /* unlikely to be useful but better than just padding */
|
unsigned char threadID; /* unlikely to be useful but better than just padding */
|
||||||
unsigned char __cpad[2];
|
unsigned char __cpad[2];
|
||||||
int myIOSize; /* number of ranks sharing my bridge/IO
|
int myIOSize; /* number of ranks sharing my bridge/IO
|
||||||
@ -73,6 +69,7 @@ typedef struct {
|
|||||||
|
|
||||||
|
|
||||||
/* public funcs for a pair of ADIOI_BG_ConfInfo_t and ADIOI_BG_ProcInfo_t objects */
|
/* public funcs for a pair of ADIOI_BG_ConfInfo_t and ADIOI_BG_ProcInfo_t objects */
|
||||||
|
int BGQ_IO_node_id ();
|
||||||
void ADIOI_BG_persInfo_init( ADIOI_BG_ConfInfo_t *conf,
|
void ADIOI_BG_persInfo_init( ADIOI_BG_ConfInfo_t *conf,
|
||||||
ADIOI_BG_ProcInfo_t *proc,
|
ADIOI_BG_ProcInfo_t *proc,
|
||||||
int s, int r, int n_aggrs, MPI_Comm comm);
|
int s, int r, int n_aggrs, MPI_Comm comm);
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -34,4 +34,6 @@ struct ADIOI_Fns_struct ADIO_GRIDFTP_operations = {
|
|||||||
ADIOI_GRIDFTP_Resize, /* Resize */
|
ADIOI_GRIDFTP_Resize, /* Resize */
|
||||||
ADIOI_GRIDFTP_Delete, /* Delete */
|
ADIOI_GRIDFTP_Delete, /* Delete */
|
||||||
ADIOI_GRIDFTP_Feature, /* Features */
|
ADIOI_GRIDFTP_Feature, /* Features */
|
||||||
|
ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
|
||||||
|
ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
|
||||||
};
|
};
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -26,32 +26,32 @@ extern globus_ftp_client_operationattr_t oattr[ADIO_GRIDFTP_HANDLES_MAX];
|
|||||||
/* TODO: weed out the now-unused prototypes */
|
/* TODO: weed out the now-unused prototypes */
|
||||||
void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code);
|
void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code);
|
||||||
void ADIOI_GRIDFTP_Close(ADIO_File fd, int *error_code);
|
void ADIOI_GRIDFTP_Close(ADIO_File fd, int *error_code);
|
||||||
void ADIOI_GRIDFTP_ReadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_GRIDFTP_ReadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_GRIDFTP_WriteContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_GRIDFTP_WriteContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_GRIDFTP_IwriteContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_GRIDFTP_IwriteContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Request *request, int
|
ADIO_Offset offset, ADIO_Request *request, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_GRIDFTP_IreadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_GRIDFTP_IreadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Request *request, int
|
ADIO_Offset offset, ADIO_Request *request, int
|
||||||
*error_code);
|
*error_code);
|
||||||
int ADIOI_GRIDFTP_ReadDone(ADIO_Request *request, ADIO_Status *status, int
|
int ADIOI_GRIDFTP_ReadDone(ADIO_Request *request, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
int ADIOI_GRIDFTP_WriteDone(ADIO_Request *request, ADIO_Status *status, int
|
int ADIOI_GRIDFTP_WriteDone(ADIO_Request *request, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_GRIDFTP_ReadComplete(ADIO_Request *request, ADIO_Status *status, int
|
void ADIOI_GRIDFTP_ReadComplete(ADIO_Request *request, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_GRIDFTP_WriteComplete(ADIO_Request *request, ADIO_Status *status,
|
void ADIOI_GRIDFTP_WriteComplete(ADIO_Request *request, ADIO_Status *status,
|
||||||
int *error_code);
|
int *error_code);
|
||||||
void ADIOI_GRIDFTP_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
|
void ADIOI_GRIDFTP_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
|
||||||
int *error_code);
|
int *error_code);
|
||||||
void ADIOI_GRIDFTP_WriteStrided(ADIO_File fd, void *buf, int count,
|
void ADIOI_GRIDFTP_WriteStrided(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status,
|
ADIO_Offset offset, ADIO_Status *status,
|
||||||
@ -79,10 +79,10 @@ void ADIOI_GRIDFTP_IwriteStrided(ADIO_File fd, void *buf, int count,
|
|||||||
void ADIOI_GRIDFTP_Flush(ADIO_File fd, int *error_code);
|
void ADIOI_GRIDFTP_Flush(ADIO_File fd, int *error_code);
|
||||||
void ADIOI_GRIDFTP_Resize(ADIO_File fd, ADIO_Offset size, int *error_code);
|
void ADIOI_GRIDFTP_Resize(ADIO_File fd, ADIO_Offset size, int *error_code);
|
||||||
void ADIOI_GRIDFTP_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code);
|
void ADIOI_GRIDFTP_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code);
|
||||||
void ADIOI_GRIDFTP_Get_shared_fp(ADIO_File fd, int size,
|
void ADIOI_GRIDFTP_Get_shared_fp(ADIO_File fd, int size,
|
||||||
ADIO_Offset *shared_fp,
|
ADIO_Offset *shared_fp,
|
||||||
int *error_code);
|
int *error_code);
|
||||||
void ADIOI_GRIDFTP_Set_shared_fp(ADIO_File fd, ADIO_Offset offset,
|
void ADIOI_GRIDFTP_Set_shared_fp(ADIO_File fd, ADIO_Offset offset,
|
||||||
int *error_code);
|
int *error_code);
|
||||||
void ADIOI_GRIDFTP_Delete(char *filename, int *error_code);
|
void ADIOI_GRIDFTP_Delete(char *filename, int *error_code);
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ static globus_cond_t cond;
|
|||||||
static globus_bool_t delete_done, delete_success;
|
static globus_bool_t delete_done, delete_success;
|
||||||
static void delete_cb(void *myarg, globus_ftp_client_handle_t *handle, globus_object_t *error)
|
static void delete_cb(void *myarg, globus_ftp_client_handle_t *handle, globus_object_t *error)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
|
FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
|
||||||
@ -39,7 +39,7 @@ void ADIOI_GRIDFTP_Delete(char *filename, int *error_code)
|
|||||||
|
|
||||||
globus_module_activate(GLOBUS_FTP_CLIENT_MODULE);
|
globus_module_activate(GLOBUS_FTP_CLIENT_MODULE);
|
||||||
result=globus_ftp_client_handle_init(&handle,GLOBUS_NULL);
|
result=globus_ftp_client_handle_init(&handle,GLOBUS_NULL);
|
||||||
|
|
||||||
if (result != GLOBUS_SUCCESS )
|
if (result != GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_handle_init",myname,result);
|
globus_err_handler("globus_ftp_client_handle_init",myname,result);
|
||||||
@ -47,11 +47,11 @@ void ADIOI_GRIDFTP_Delete(char *filename, int *error_code)
|
|||||||
MPIR_ERR_RECOVERABLE,
|
MPIR_ERR_RECOVERABLE,
|
||||||
myname, __LINE__,
|
myname, __LINE__,
|
||||||
MPI_ERR_IO,
|
MPI_ERR_IO,
|
||||||
"**io", "**io %s",
|
"**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete_done=GLOBUS_FALSE;
|
delete_done=GLOBUS_FALSE;
|
||||||
delete_success=GLOBUS_FALSE;
|
delete_success=GLOBUS_FALSE;
|
||||||
result=globus_ftp_client_delete(&handle,filename,GLOBUS_NULL,delete_cb,GLOBUS_NULL);
|
result=globus_ftp_client_delete(&handle,filename,GLOBUS_NULL,delete_cb,GLOBUS_NULL);
|
||||||
@ -78,7 +78,7 @@ void ADIOI_GRIDFTP_Delete(char *filename, int *error_code)
|
|||||||
MPIR_ERR_RECOVERABLE,
|
MPIR_ERR_RECOVERABLE,
|
||||||
myname, __LINE__,
|
myname, __LINE__,
|
||||||
MPI_ERR_IO,
|
MPI_ERR_IO,
|
||||||
"**io", "**io %s",
|
"**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -89,7 +89,7 @@ void ADIOI_GRIDFTP_Delete(char *filename, int *error_code)
|
|||||||
MPIR_ERR_RECOVERABLE,
|
MPIR_ERR_RECOVERABLE,
|
||||||
myname, __LINE__,
|
myname, __LINE__,
|
||||||
MPI_ERR_IO,
|
MPI_ERR_IO,
|
||||||
"**io", "**io %s",
|
"**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ void fcntl_size_cb(void *myargs, globus_ftp_client_handle_t *handle,
|
|||||||
globus_mutex_unlock(&fcntl_size_lock);
|
globus_mutex_unlock(&fcntl_size_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ADIOI_GRIDFTP_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
|
void ADIOI_GRIDFTP_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
|
||||||
int *error_code)
|
int *error_code)
|
||||||
{
|
{
|
||||||
MPI_Datatype copy_etype, copy_filetype;
|
MPI_Datatype copy_etype, copy_filetype;
|
||||||
@ -46,7 +46,7 @@ void ADIOI_GRIDFTP_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
|
|||||||
{
|
{
|
||||||
globus_result_t result;
|
globus_result_t result;
|
||||||
globus_off_t fsize=0;
|
globus_off_t fsize=0;
|
||||||
|
|
||||||
globus_mutex_init(&fcntl_size_lock,GLOBUS_NULL);
|
globus_mutex_init(&fcntl_size_lock,GLOBUS_NULL);
|
||||||
globus_cond_init(&fcntl_size_cond,GLOBUS_NULL);
|
globus_cond_init(&fcntl_size_cond,GLOBUS_NULL);
|
||||||
fcntl_size_done=GLOBUS_FALSE;
|
fcntl_size_done=GLOBUS_FALSE;
|
||||||
@ -61,7 +61,7 @@ void ADIOI_GRIDFTP_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct,
|
|||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE,
|
MPIR_ERR_RECOVERABLE,
|
||||||
myname, __LINE__, MPI_ERR_IO,
|
myname, __LINE__, MPI_ERR_IO,
|
||||||
"**io", "**io %s",
|
"**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1,11 +1,11 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
Valid hints for ftp:// and gsiftp:// URLs (aside from the std. ones):
|
Valid hints for ftp:// and gsiftp:// URLs (aside from the std. ones):
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Valid hints for ftp:// and gsiftp:// URLs (aside from the std. ones):
|
|||||||
|
|
||||||
tcp_buffer integer size of tcp stream buffers in bytes
|
tcp_buffer integer size of tcp stream buffers in bytes
|
||||||
|
|
||||||
transfer_type ascii or binary (default binary)
|
transfer_type ascii or binary (default binary)
|
||||||
|
|
||||||
These *must* be specified at open time currently.
|
These *must* be specified at open time currently.
|
||||||
*/
|
*/
|
||||||
@ -29,12 +29,12 @@ These *must* be specified at open time currently.
|
|||||||
|
|
||||||
void ADIOI_GRIDFTP_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
|
void ADIOI_GRIDFTP_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!(fd->info))
|
if (!(fd->info))
|
||||||
{
|
{
|
||||||
if ( users_info==MPI_INFO_NULL )
|
if ( users_info==MPI_INFO_NULL )
|
||||||
{
|
{
|
||||||
/* This must be part of the open call. */
|
/* This must be part of the open call. */
|
||||||
MPI_Info_create(&(fd->info));
|
MPI_Info_create(&(fd->info));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -46,7 +46,7 @@ void ADIOI_GRIDFTP_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
|
|||||||
{
|
{
|
||||||
int i,nkeys,valuelen,flag;
|
int i,nkeys,valuelen,flag;
|
||||||
char key[MPI_MAX_INFO_KEY], value[MPI_MAX_INFO_VAL];
|
char key[MPI_MAX_INFO_KEY], value[MPI_MAX_INFO_VAL];
|
||||||
|
|
||||||
if ( users_info!=MPI_INFO_NULL )
|
if ( users_info!=MPI_INFO_NULL )
|
||||||
{
|
{
|
||||||
MPI_Info_get_nkeys(users_info,&nkeys);
|
MPI_Info_get_nkeys(users_info,&nkeys);
|
||||||
@ -62,7 +62,7 @@ void ADIOI_GRIDFTP_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* let the generic ROMIO and MPI-I/O stuff happen... */
|
/* let the generic ROMIO and MPI-I/O stuff happen... */
|
||||||
ADIOI_GEN_SetInfo(fd, users_info, error_code);
|
ADIOI_GEN_SetInfo(fd, users_info, error_code);
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
@ -12,7 +12,7 @@ static globus_cond_t cond;
|
|||||||
|
|
||||||
static globus_bool_t file_exists,exists_done;
|
static globus_bool_t file_exists,exists_done;
|
||||||
static void exists_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error)
|
static void exists_cb(void *myargs, globus_ftp_client_handle_t *handle, globus_object_t *error)
|
||||||
{
|
{
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
|
FPRINTF(stderr, "%s\n", globus_object_printable_to_string(error));
|
||||||
@ -77,7 +77,7 @@ void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code)
|
|||||||
result=globus_ftp_client_handleattr_init(&hattr);
|
result=globus_ftp_client_handleattr_init(&hattr);
|
||||||
if ( result != GLOBUS_SUCCESS )
|
if ( result != GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
globus_err_handler("globus_ftp_client_handleattr_init",
|
globus_err_handler("globus_ftp_client_handleattr_init",
|
||||||
myname,result);
|
myname,result);
|
||||||
@ -114,41 +114,41 @@ void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code)
|
|||||||
|
|
||||||
/* Since we're (almost by definition) doing things that FTP S (stream)
|
/* Since we're (almost by definition) doing things that FTP S (stream)
|
||||||
control mode can't handle, default to E (extended block) control mode
|
control mode can't handle, default to E (extended block) control mode
|
||||||
for gsiftp:// URLs. ftp:// URLs use standard stream control mode
|
for gsiftp:// URLs. ftp:// URLs use standard stream control mode
|
||||||
by default. This behavior can be overridden by the ftp_control_mode
|
by default. This behavior can be overridden by the ftp_control_mode
|
||||||
hint. */
|
hint. */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if ( !strncmp(fd->filename,"gsiftp:",7) &&
|
if ( !strncmp(fd->filename,"gsiftp:",7) &&
|
||||||
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_EXTENDED_BLOCK))!=GLOBUS_SUCCESS )
|
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_EXTENDED_BLOCK))!=GLOBUS_SUCCESS )
|
||||||
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
||||||
else if ( !strncmp(fd->filename,"ftp:",4) &&
|
else if ( !strncmp(fd->filename,"ftp:",4) &&
|
||||||
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_STREAM))!=GLOBUS_SUCCESS )
|
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_STREAM))!=GLOBUS_SUCCESS )
|
||||||
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Set append mode if necessary */
|
/* Set append mode if necessary */
|
||||||
if ( (fd->access_mode&ADIO_APPEND) &&
|
if ( (fd->access_mode&ADIO_APPEND) &&
|
||||||
((result=globus_ftp_client_operationattr_set_append(&(oattr[fd->fd_sys]),GLOBUS_TRUE))!=GLOBUS_SUCCESS) )
|
((result=globus_ftp_client_operationattr_set_append(&(oattr[fd->fd_sys]),GLOBUS_TRUE))!=GLOBUS_SUCCESS) )
|
||||||
globus_err_handler("globus_ftp_client_operationattr_set_append",myname,result);
|
globus_err_handler("globus_ftp_client_operationattr_set_append",myname,result);
|
||||||
|
|
||||||
/* Other hint and amode processing that would affect hattr and/or
|
/* Other hint and amode processing that would affect hattr and/or
|
||||||
oattr[] (eg. parallelism, striping, etc.) goes here */
|
oattr[] (eg. parallelism, striping, etc.) goes here */
|
||||||
if ( fd->info!=MPI_INFO_NULL )
|
if ( fd->info!=MPI_INFO_NULL )
|
||||||
{
|
{
|
||||||
ADIOI_Info_get(fd->info,"ftp_control_mode",MPI_MAX_INFO_VAL,hintval,&keyfound);
|
ADIOI_Info_get(fd->info,"ftp_control_mode",MPI_MAX_INFO_VAL,hintval,&keyfound);
|
||||||
if ( keyfound )
|
if ( keyfound )
|
||||||
{
|
{
|
||||||
if ( ( !strcmp(hintval,"extended") || !strcmp(hintval,"extended_block") ) &&
|
if ( ( !strcmp(hintval,"extended") || !strcmp(hintval,"extended_block") ) &&
|
||||||
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_EXTENDED_BLOCK))!=GLOBUS_SUCCESS )
|
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_EXTENDED_BLOCK))!=GLOBUS_SUCCESS )
|
||||||
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
||||||
else if ( !strcmp(hintval,"block") &&
|
else if ( !strcmp(hintval,"block") &&
|
||||||
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_BLOCK))!=GLOBUS_SUCCESS )
|
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_BLOCK))!=GLOBUS_SUCCESS )
|
||||||
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
||||||
else if ( !strcmp(hintval,"compressed") &&
|
else if ( !strcmp(hintval,"compressed") &&
|
||||||
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_COMPRESSED))!=GLOBUS_SUCCESS )
|
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_COMPRESSED))!=GLOBUS_SUCCESS )
|
||||||
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
||||||
else if ( !strcmp(hintval,"stream") &&
|
else if ( !strcmp(hintval,"stream") &&
|
||||||
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_STREAM))!=GLOBUS_SUCCESS )
|
(result=globus_ftp_client_operationattr_set_mode(&(oattr[fd->fd_sys]),GLOBUS_FTP_CONTROL_MODE_STREAM))!=GLOBUS_SUCCESS )
|
||||||
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
globus_err_handler("globus_ftp_client_operationattr_set_mode",myname,result);
|
||||||
}
|
}
|
||||||
@ -157,7 +157,7 @@ void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code)
|
|||||||
if ( keyfound )
|
if ( keyfound )
|
||||||
{
|
{
|
||||||
int nftpthreads;
|
int nftpthreads;
|
||||||
|
|
||||||
if ( sscanf(hintval,"%d",&nftpthreads)==1 )
|
if ( sscanf(hintval,"%d",&nftpthreads)==1 )
|
||||||
{
|
{
|
||||||
globus_ftp_control_parallelism_t parallelism;
|
globus_ftp_control_parallelism_t parallelism;
|
||||||
@ -261,10 +261,10 @@ void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code)
|
|||||||
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_exists",myname,result);
|
globus_err_handler("globus_ftp_client_exists",myname,result);
|
||||||
fd->fd_sys = -1;
|
fd->fd_sys = -1;
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
|
||||||
myname, __LINE__, MPI_ERR_IO,
|
myname, __LINE__, MPI_ERR_IO,
|
||||||
"**io", "**io %s",
|
"**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -295,10 +295,10 @@ void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code)
|
|||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_put",myname,result);
|
globus_err_handler("globus_ftp_client_put",myname,result);
|
||||||
fd->fd_sys = -1;
|
fd->fd_sys = -1;
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE,
|
MPIR_ERR_RECOVERABLE,
|
||||||
myname, __LINE__, MPI_ERR_IO,
|
myname, __LINE__, MPI_ERR_IO,
|
||||||
"**io", "**io %s",
|
"**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -310,10 +310,10 @@ void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code)
|
|||||||
if ( result != GLOBUS_SUCCESS )
|
if ( result != GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_register_write",myname,result);
|
globus_err_handler("globus_ftp_client_register_write",myname,result);
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE,
|
MPIR_ERR_RECOVERABLE,
|
||||||
myname, __LINE__, MPI_ERR_IO,
|
myname, __LINE__, MPI_ERR_IO,
|
||||||
"**io", "**io %s",
|
"**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -328,7 +328,7 @@ void ADIOI_GRIDFTP_Open(ADIO_File fd, int *error_code)
|
|||||||
{
|
{
|
||||||
fd->fd_sys = -1;
|
fd->fd_sys = -1;
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
|
||||||
myname, __LINE__, MPI_ERR_IO,
|
myname, __LINE__, MPI_ERR_IO,
|
||||||
"**io", 0);
|
"**io", 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ static void readdiscontig_data_cb(void *myargs, globus_ftp_client_handle_t *hand
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ADIOI_GRIDFTP_ReadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_GRIDFTP_ReadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code)
|
*error_code)
|
||||||
@ -156,12 +156,12 @@ void ADIOI_GRIDFTP_ReadContig(ADIO_File fd, void *buf, int count,
|
|||||||
if ( result != GLOBUS_SUCCESS )
|
if ( result != GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_register_read",myname,result);
|
globus_err_handler("globus_ftp_client_register_read",myname,result);
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", "**io %s",
|
MPI_ERR_IO, "**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* The ctl callback won't start till the data callbacks complete, so it's
|
/* The ctl callback won't start till the data callbacks complete, so it's
|
||||||
@ -227,24 +227,21 @@ void ADIOI_GRIDFTP_ReadDiscontig(ADIO_File fd, void *buf, int count,
|
|||||||
MPI_Type_size_x(datatype,&btype_size);
|
MPI_Type_size_x(datatype,&btype_size);
|
||||||
MPI_Type_get_extent(datatype,&btype_lb,&btype_extent);
|
MPI_Type_get_extent(datatype,&btype_lb,&btype_extent);
|
||||||
ADIOI_Datatype_iscontig(datatype,&buf_contig);
|
ADIOI_Datatype_iscontig(datatype,&buf_contig);
|
||||||
|
|
||||||
if ( ( btype_extent!=btype_size ) || ( ! buf_contig ) )
|
if ( ( btype_extent!=btype_size ) || ( ! buf_contig ) )
|
||||||
{
|
{
|
||||||
FPRINTF(stderr,"[%d/%d] %s called with discontigous memory buffer\n",
|
FPRINTF(stderr,"[%d/%d] %s called with discontigous memory buffer\n",
|
||||||
myrank,nprocs,myname);
|
myrank,nprocs,myname);
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", 0 );
|
MPI_ERR_IO, "**io", 0 );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/* from here we can assume btype_extent==btype_size */
|
/* from here we can assume btype_extent==btype_size */
|
||||||
|
|
||||||
/* Flatten out fd->filetype so we know which blocks to skip */
|
/* Flatten out fd->filetype so we know which blocks to skip */
|
||||||
ADIOI_Flatten_datatype(fd->filetype);
|
flat_file = ADIOI_Flatten_and_find(fd->filetype);
|
||||||
flat_file = ADIOI_Flatlist;
|
|
||||||
while (flat_file->type != fd->filetype && flat_file->next!=NULL)
|
|
||||||
flat_file = flat_file->next;
|
|
||||||
|
|
||||||
/* Figure out how big the area to read is */
|
/* Figure out how big the area to read is */
|
||||||
start=(globus_off_t)(offset*etype_size);
|
start=(globus_off_t)(offset*etype_size);
|
||||||
@ -279,8 +276,8 @@ void ADIOI_GRIDFTP_ReadDiscontig(ADIO_File fd, void *buf, int count,
|
|||||||
FPRINTF(stderr,"[%d/%d] %s error in computing extent -- extent %d is smaller than total bytes requested %d!\n",
|
FPRINTF(stderr,"[%d/%d] %s error in computing extent -- extent %d is smaller than total bytes requested %d!\n",
|
||||||
myrank,nprocs,myname,extent,count*btype_size);
|
myrank,nprocs,myname,extent,count*btype_size);
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", 0);
|
MPI_ERR_IO, "**io", 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -301,9 +298,9 @@ void ADIOI_GRIDFTP_ReadDiscontig(ADIO_File fd, void *buf, int count,
|
|||||||
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_partial_get",myname,result);
|
globus_err_handler("globus_ftp_client_partial_get",myname,result);
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", "**io %s",
|
MPI_ERR_IO, "**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -391,15 +388,15 @@ void ADIOI_GRIDFTP_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
MPI_Comm_size(fd->comm, &nprocs);
|
MPI_Comm_size(fd->comm, &nprocs);
|
||||||
MPI_Comm_rank(fd->comm, &myrank);
|
MPI_Comm_rank(fd->comm, &myrank);
|
||||||
#ifdef PRINT_ERR_MSG
|
#ifdef PRINT_ERR_MSG
|
||||||
FPRINTF(stdout, "[%d/%d] ADIOI_GRIDFTP_ReadStrided called on %s\n", myrank,
|
FPRINTF(stdout, "[%d/%d] ADIOI_GRIDFTP_ReadStrided called on %s\n", myrank,
|
||||||
nprocs, fd->filename);
|
nprocs, fd->filename);
|
||||||
FPRINTF(stdout, "[%d/%d] calling ADIOI_GEN_ReadStrided\n", myrank,
|
FPRINTF(stdout, "[%d/%d] calling ADIOI_GEN_ReadStrided\n", myrank,
|
||||||
nprocs);
|
nprocs);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ADIOI_GEN_ReadStrided(fd, buf, count, datatype, file_ptr_type, offset,
|
ADIOI_GEN_ReadStrided(fd, buf, count, datatype, file_ptr_type, offset,
|
||||||
status, error_code);
|
status, error_code);
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char myname[]="ADIOI_GRIDFTP_ReadStrided";
|
char myname[]="ADIOI_GRIDFTP_ReadStrided";
|
||||||
@ -457,7 +454,7 @@ void ADIOI_GRIDFTP_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
|
|
||||||
ADIOI_Free(intermediate);
|
ADIOI_Free(intermediate);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Why did you bother calling ReadStrided?!?!?! */
|
/* Why did you bother calling ReadStrided?!?!?! */
|
||||||
ADIOI_GRIDFTP_ReadContig(fd, buf, count, datatype,
|
ADIOI_GRIDFTP_ReadContig(fd, buf, count, datatype,
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -113,9 +113,9 @@ void ADIOI_GRIDFTP_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
|
|||||||
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_partial_put",myname,result);
|
globus_err_handler("globus_ftp_client_partial_put",myname,result);
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", "**io %s",
|
MPI_ERR_IO, "**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -129,9 +129,9 @@ void ADIOI_GRIDFTP_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
|
|||||||
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_register_write",myname,result);
|
globus_err_handler("globus_ftp_client_register_write",myname,result);
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", "**io %s",
|
MPI_ERR_IO, "**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -161,9 +161,9 @@ void ADIOI_GRIDFTP_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
|
|||||||
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_move",myname,result);
|
globus_err_handler("globus_ftp_client_move",myname,result);
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", "**io %s",
|
MPI_ERR_IO, "**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -189,9 +189,9 @@ void ADIOI_GRIDFTP_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
|
|||||||
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_partial_third_party_transfer",myname,result);
|
globus_err_handler("globus_ftp_client_partial_third_party_transfer",myname,result);
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", "**io %s",
|
MPI_ERR_IO, "**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -213,9 +213,9 @@ void ADIOI_GRIDFTP_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
|
|||||||
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
GLOBUS_NULL))!=GLOBUS_SUCCESS )
|
||||||
{
|
{
|
||||||
globus_err_handler("globus_ftp_client_delete",myname,result);
|
globus_err_handler("globus_ftp_client_delete",myname,result);
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", "**io %s",
|
MPI_ERR_IO, "**io", "**io %s",
|
||||||
globus_object_printable_to_string(globus_error_get(result)));
|
globus_object_printable_to_string(globus_error_get(result)));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -101,12 +101,12 @@ static void writediscontig_data_cb(void *myargs, globus_ftp_client_handle_t *han
|
|||||||
eof,
|
eof,
|
||||||
writediscontig_data_cb,
|
writediscontig_data_cb,
|
||||||
(void *)(bytes_written));
|
(void *)(bytes_written));
|
||||||
FPRINTF(stderr,"wrote %Ld bytes...",(long long)length);
|
FPRINTF(stderr,"wrote %Ld bytes...",(long long)length);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ADIOI_GRIDFTP_WriteContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_GRIDFTP_WriteContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code)
|
*error_code)
|
||||||
@ -227,7 +227,7 @@ void ADIOI_GRIDFTP_WriteDiscontig(ADIO_File fd, void *buf, int count,
|
|||||||
MPI_Type_size_x(datatype,&btype_size);
|
MPI_Type_size_x(datatype,&btype_size);
|
||||||
MPI_Type_get_extent(datatype,&btype_lb,&btype_extent);
|
MPI_Type_get_extent(datatype,&btype_lb,&btype_extent);
|
||||||
ADIOI_Datatype_iscontig(datatype,&buf_contig);
|
ADIOI_Datatype_iscontig(datatype,&buf_contig);
|
||||||
|
|
||||||
if ( ( btype_extent!=btype_size ) || ( ! buf_contig ) )
|
if ( ( btype_extent!=btype_size ) || ( ! buf_contig ) )
|
||||||
{
|
{
|
||||||
FPRINTF(stderr,"[%d/%d] %s called with discontigous memory buffer\n",
|
FPRINTF(stderr,"[%d/%d] %s called with discontigous memory buffer\n",
|
||||||
@ -242,10 +242,7 @@ void ADIOI_GRIDFTP_WriteDiscontig(ADIO_File fd, void *buf, int count,
|
|||||||
/* from here we can assume btype_extent==btype_size */
|
/* from here we can assume btype_extent==btype_size */
|
||||||
|
|
||||||
/* Flatten out fd->filetype so we know which blocks to skip */
|
/* Flatten out fd->filetype so we know which blocks to skip */
|
||||||
ADIOI_Flatten_datatype(fd->filetype);
|
flat_file = ADIOI_Flatten_and_find(fd->filetype);
|
||||||
flat_file = ADIOI_Flatlist;
|
|
||||||
while (flat_file->type != fd->filetype && flat_file->next!=NULL)
|
|
||||||
flat_file = flat_file->next;
|
|
||||||
|
|
||||||
/* Figure out how big the area to write is */
|
/* Figure out how big the area to write is */
|
||||||
/* ASSUMPTION: ftype_size is an integer multiple of btype_size or vice versa. */
|
/* ASSUMPTION: ftype_size is an integer multiple of btype_size or vice versa. */
|
||||||
@ -348,7 +345,7 @@ void ADIOI_GRIDFTP_WriteDiscontig(ADIO_File fd, void *buf, int count,
|
|||||||
nblks++;
|
nblks++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* The ctl callback won't start till the data callbacks complete, so it's
|
/* The ctl callback won't start till the data callbacks complete, so it's
|
||||||
safe to wait on just the ctl callback */
|
safe to wait on just the ctl callback */
|
||||||
globus_mutex_lock(&writediscontig_ctl_lock);
|
globus_mutex_lock(&writediscontig_ctl_lock);
|
||||||
@ -392,7 +389,7 @@ void ADIOI_GRIDFTP_WriteStrided(ADIO_File fd, void *buf, int count,
|
|||||||
MPI_Comm_size(fd->comm, &nprocs);
|
MPI_Comm_size(fd->comm, &nprocs);
|
||||||
MPI_Comm_rank(fd->comm, &myrank);
|
MPI_Comm_rank(fd->comm, &myrank);
|
||||||
|
|
||||||
ADIOI_GEN_WriteStrided(fd, buf, count, datatype, file_ptr_type, offset,
|
ADIOI_GEN_WriteStrided(fd, buf, count, datatype, file_ptr_type, offset,
|
||||||
status, error_code);
|
status, error_code);
|
||||||
return;
|
return;
|
||||||
#else
|
#else
|
||||||
@ -460,7 +457,7 @@ void ADIOI_GRIDFTP_WriteStrided(ADIO_File fd, void *buf, int count,
|
|||||||
|
|
||||||
ADIOI_Free(intermediate);
|
ADIOI_Free(intermediate);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Why did you bother calling WriteStrided?!?!?! */
|
/* Why did you bother calling WriteStrided?!?!?! */
|
||||||
FPRINTF(stderr,"[%d/%d] Why the heck did you call %s with contiguous buffer *and* file types?\n",
|
FPRINTF(stderr,"[%d/%d] Why the heck did you call %s with contiguous buffer *and* file types?\n",
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
* Copyright (C) 2003 University of Chicago, Ohio Supercomputer Center.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2001 University of Chicago.
|
* Copyright (C) 2001 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -33,4 +33,6 @@ struct ADIOI_Fns_struct ADIO_HFS_operations = {
|
|||||||
ADIOI_GEN_Flush, /* Flush */
|
ADIOI_GEN_Flush, /* Flush */
|
||||||
ADIOI_HFS_Resize, /* Resize */
|
ADIOI_HFS_Resize, /* Resize */
|
||||||
ADIOI_GEN_Delete, /* Delete */
|
ADIOI_GEN_Delete, /* Delete */
|
||||||
|
ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
|
||||||
|
ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
|
||||||
};
|
};
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -19,16 +19,16 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void ADIOI_HFS_Open(ADIO_File fd, int *error_code);
|
void ADIOI_HFS_Open(ADIO_File fd, int *error_code);
|
||||||
void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_HFS_WriteContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_HFS_WriteContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_HFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
|
void ADIOI_HFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_HFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code);
|
void ADIOI_HFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code);
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -25,20 +25,20 @@ void ADIOI_HFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *er
|
|||||||
case ADIO_FCNTL_GET_FSIZE:
|
case ADIO_FCNTL_GET_FSIZE:
|
||||||
fcntl_struct->fsize = lseek64(fd->fd_sys, 0, SEEK_END);
|
fcntl_struct->fsize = lseek64(fd->fd_sys, 0, SEEK_END);
|
||||||
#ifdef HPUX
|
#ifdef HPUX
|
||||||
if (fd->fp_sys_posn != -1)
|
if (fd->fp_sys_posn != -1)
|
||||||
lseek64(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
|
lseek64(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
|
||||||
/* not required in SPPUX since there we use pread/pwrite */
|
/* not required in SPPUX since there we use pread/pwrite */
|
||||||
#endif
|
#endif
|
||||||
if (fcntl_struct->fsize == -1) {
|
if (fcntl_struct->fsize == -1) {
|
||||||
#ifdef MPICH
|
#ifdef MPICH
|
||||||
*error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
|
*error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
|
||||||
"**io %s", strerror(errno));
|
"**io %s", strerror(errno));
|
||||||
#elif defined(PRINT_ERR_MSG)
|
#elif defined(PRINT_ERR_MSG)
|
||||||
*error_code = MPI_ERR_UNKNOWN;
|
*error_code = MPI_ERR_UNKNOWN;
|
||||||
#else /* MPICH-1 */
|
#else /* MPICH-1 */
|
||||||
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
|
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
|
||||||
myname, "I/O Error", "%s", strerror(errno));
|
myname, "I/O Error", "%s", strerror(errno));
|
||||||
ADIOI_Error(fd, *error_code, myname);
|
ADIOI_Error(fd, *error_code, myname);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else *error_code = MPI_SUCCESS;
|
else *error_code = MPI_SUCCESS;
|
||||||
@ -52,7 +52,7 @@ void ADIOI_HFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *er
|
|||||||
/* prealloc64 works only if file is of zero length */
|
/* prealloc64 works only if file is of zero length */
|
||||||
if (err && (errno != ENOTEMPTY)) {
|
if (err && (errno != ENOTEMPTY)) {
|
||||||
#ifdef MPICH
|
#ifdef MPICH
|
||||||
*error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
|
*error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
|
||||||
"**io %s", strerror(errno));
|
"**io %s", strerror(errno));
|
||||||
#elif defined(PRINT_ERR_MSG)
|
#elif defined(PRINT_ERR_MSG)
|
||||||
*error_code = MPI_ERR_UNKNOWN;
|
*error_code = MPI_ERR_UNKNOWN;
|
||||||
@ -84,16 +84,16 @@ void ADIOI_HFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *er
|
|||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((fcntl_struct->diskspace > 2147483647) ||
|
if ((fcntl_struct->diskspace > 2147483647) ||
|
||||||
(err && (errno == ENOTEMPTY))) {
|
(err && (errno == ENOTEMPTY))) {
|
||||||
#endif
|
#endif
|
||||||
ADIOI_GEN_Prealloc(fd,fcntl_struct->diskspace, error_code);
|
ADIOI_GEN_Prealloc(fd,fcntl_struct->diskspace, error_code);
|
||||||
}
|
}
|
||||||
ADIOI_Free(buf);
|
ADIOI_Free(buf);
|
||||||
#ifdef HPUX
|
#ifdef HPUX
|
||||||
if (fd->fp_sys_posn != -1)
|
if (fd->fp_sys_posn != -1)
|
||||||
lseek64(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
|
lseek64(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
|
||||||
/* not required in SPPUX since there we use pread/pwrite */
|
/* not required in SPPUX since there we use pread/pwrite */
|
||||||
#endif
|
#endif
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -53,14 +53,14 @@ void ADIOI_HFS_Open(ADIO_File fd, int *error_code)
|
|||||||
|
|
||||||
if (fd->fd_sys == -1 ) {
|
if (fd->fd_sys == -1 ) {
|
||||||
#ifdef MPICH
|
#ifdef MPICH
|
||||||
*error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
|
*error_code = MPIR_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO, "**io",
|
||||||
"**io %s", strerror(errno));
|
"**io %s", strerror(errno));
|
||||||
#elif defined(PRINT_ERR_MSG)
|
#elif defined(PRINT_ERR_MSG)
|
||||||
*error_code = MPI_ERR_UNKNOWN;
|
*error_code = MPI_ERR_UNKNOWN;
|
||||||
#else /* MPICH-1 */
|
#else /* MPICH-1 */
|
||||||
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
|
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
|
||||||
myname, "I/O Error", "%s", strerror(errno));
|
myname, "I/O Error", "%s", strerror(errno));
|
||||||
ADIOI_Error(ADIO_FILE_NULL, *error_code, myname);
|
ADIOI_Error(ADIO_FILE_NULL, *error_code, myname);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else *error_code = MPI_SUCCESS;
|
else *error_code = MPI_SUCCESS;
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -11,7 +11,7 @@
|
|||||||
#define lseek64 lseek
|
#define lseek64 lseek
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int *error_code)
|
ADIO_Offset offset, ADIO_Status *status, int *error_code)
|
||||||
{
|
{
|
||||||
@ -26,7 +26,7 @@ void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
|
|||||||
#ifdef SPPUX
|
#ifdef SPPUX
|
||||||
fd->fp_sys_posn = -1; /* set it to null, since we are using pread */
|
fd->fp_sys_posn = -1; /* set it to null, since we are using pread */
|
||||||
|
|
||||||
if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
|
if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
|
||||||
err = pread64(fd->fd_sys, buf, len, offset);
|
err = pread64(fd->fd_sys, buf, len, offset);
|
||||||
else { /* read from curr. location of ind. file pointer */
|
else { /* read from curr. location of ind. file pointer */
|
||||||
err = pread64(fd->fd_sys, buf, len, fd->fp_ind);
|
err = pread64(fd->fd_sys, buf, len, fd->fp_ind);
|
||||||
@ -40,15 +40,15 @@ void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
|
|||||||
lseek64(fd->fd_sys, offset, SEEK_SET);
|
lseek64(fd->fd_sys, offset, SEEK_SET);
|
||||||
err = read(fd->fd_sys, buf, len);
|
err = read(fd->fd_sys, buf, len);
|
||||||
fd->fp_sys_posn = offset + err;
|
fd->fp_sys_posn = offset + err;
|
||||||
/* individual file pointer not updated */
|
/* individual file pointer not updated */
|
||||||
}
|
}
|
||||||
else { /* read from curr. location of ind. file pointer */
|
else { /* read from curr. location of ind. file pointer */
|
||||||
if (fd->fp_sys_posn != fd->fp_ind)
|
if (fd->fp_sys_posn != fd->fp_ind)
|
||||||
lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
|
lseek64(fd->fd_sys, fd->fp_ind, SEEK_SET);
|
||||||
err = read(fd->fd_sys, buf, len);
|
err = read(fd->fd_sys, buf, len);
|
||||||
fd->fp_ind += err;
|
fd->fp_ind += err;
|
||||||
fd->fp_sys_posn = fd->fp_ind;
|
fd->fp_sys_posn = fd->fp_ind;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_STATUS_SET_BYTES
|
#ifdef HAVE_STATUS_SET_BYTES
|
||||||
@ -64,7 +64,7 @@ void ADIOI_HFS_ReadContig(ADIO_File fd, void *buf, int count,
|
|||||||
#else /* MPICH-1 */
|
#else /* MPICH-1 */
|
||||||
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
|
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
|
||||||
myname, "I/O Error", "%s", strerror(errno));
|
myname, "I/O Error", "%s", strerror(errno));
|
||||||
ADIOI_Error(fd, *error_code, myname);
|
ADIOI_Error(fd, *error_code, myname);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else *error_code = MPI_SUCCESS;
|
else *error_code = MPI_SUCCESS;
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -13,7 +13,7 @@ void ADIOI_HFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
|
|||||||
#ifndef PRINT_ERR_MSG
|
#ifndef PRINT_ERR_MSG
|
||||||
static char myname[] = "ADIOI_HFS_RESIZE";
|
static char myname[] = "ADIOI_HFS_RESIZE";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
err = ftruncate64(fd->fd_sys, size);
|
err = ftruncate64(fd->fd_sys, size);
|
||||||
if (err == -1) {
|
if (err == -1) {
|
||||||
#ifdef MPICH
|
#ifdef MPICH
|
||||||
@ -24,7 +24,7 @@ void ADIOI_HFS_Resize(ADIO_File fd, ADIO_Offset size, int *error_code)
|
|||||||
#else /* MPICH-1 */
|
#else /* MPICH-1 */
|
||||||
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
|
*error_code = MPIR_Err_setmsg(MPI_ERR_IO, MPIR_ADIO_ERROR,
|
||||||
myname, "I/O Error", "%s", strerror(errno));
|
myname, "I/O Error", "%s", strerror(errno));
|
||||||
ADIOI_Error(fd, *error_code, myname);
|
ADIOI_Error(fd, *error_code, myname);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else *error_code = MPI_SUCCESS;
|
else *error_code = MPI_SUCCESS;
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -11,7 +11,7 @@
|
|||||||
#define lseek64 lseek
|
#define lseek64 lseek
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void ADIOI_HFS_WriteContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_HFS_WriteContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int *error_code)
|
ADIO_Offset offset, ADIO_Status *status, int *error_code)
|
||||||
{
|
{
|
||||||
@ -25,7 +25,7 @@ void ADIOI_HFS_WriteContig(ADIO_File fd, void *buf, int count,
|
|||||||
|
|
||||||
#ifdef SPPUX
|
#ifdef SPPUX
|
||||||
fd->fp_sys_posn = -1; /* set it to null, since we are using pwrite */
|
fd->fp_sys_posn = -1; /* set it to null, since we are using pwrite */
|
||||||
if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
|
if (file_ptr_type == ADIO_EXPLICIT_OFFSET)
|
||||||
err = pwrite64(fd->fd_sys, buf, len, offset);
|
err = pwrite64(fd->fd_sys, buf, len, offset);
|
||||||
else { /* write from curr. location of ind. file pointer */
|
else { /* write from curr. location of ind. file pointer */
|
||||||
err = pwrite64(fd->fd_sys, buf, len, fd->fp_ind);
|
err = pwrite64(fd->fd_sys, buf, len, fd->fp_ind);
|
||||||
@ -39,7 +39,7 @@ void ADIOI_HFS_WriteContig(ADIO_File fd, void *buf, int count,
|
|||||||
lseek64(fd->fd_sys, offset, SEEK_SET);
|
lseek64(fd->fd_sys, offset, SEEK_SET);
|
||||||
err = write(fd->fd_sys, buf, len);
|
err = write(fd->fd_sys, buf, len);
|
||||||
fd->fp_sys_posn = offset + err;
|
fd->fp_sys_posn = offset + err;
|
||||||
/* individual file pointer not updated */
|
/* individual file pointer not updated */
|
||||||
}
|
}
|
||||||
else { /* write from curr. location of ind. file pointer */
|
else { /* write from curr. location of ind. file pointer */
|
||||||
if (fd->fp_sys_posn != fd->fp_ind)
|
if (fd->fp_sys_posn != fd->fp_ind)
|
@ -1,11 +1,11 @@
|
|||||||
Upcoming soon:
|
Upcoming soon:
|
||||||
o Hierarchical striping as described in the paper from CCGrid2007
|
o Hierarchical striping as described in the paper from CCGrid2007
|
||||||
http://ft.ornl.gov/projects/io/pubs/CCGrid-2007-file-joining.pdf
|
http://ft.ornl.gov/projects/io/pubs/CCGrid-2007-file-joining.pdf
|
||||||
Further out:
|
Further out:
|
||||||
o To post the code for ParColl (Partitioned collective IO)
|
o To post the code for ParColl (Partitioned collective IO)
|
||||||
|
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
V05:
|
V05:
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
Improved data redistribution
|
Improved data redistribution
|
||||||
o Improve I/O pattern identification. Besides checking interleaving,
|
o Improve I/O pattern identification. Besides checking interleaving,
|
||||||
@ -20,12 +20,12 @@ Improved data redistribution
|
|||||||
more constant clients.
|
more constant clients.
|
||||||
|
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
V04:
|
V04:
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
o Direct IO and Lockless IO support
|
o Direct IO and Lockless IO support
|
||||||
|
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
V03:
|
V03:
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
o Correct detection of fs_type when lustre: prefix is not given
|
o Correct detection of fs_type when lustre: prefix is not given
|
||||||
o Further fix on stripe alignment
|
o Further fix on stripe alignment
|
||||||
@ -34,21 +34,21 @@ V03:
|
|||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
V02:
|
V02:
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
The Lustre ADIO driver has been cleaned up quite a lot. Compared
|
The Lustre ADIO driver has been cleaned up quite a lot. Compared
|
||||||
to the intital posting, here are the changes:
|
to the intital posting, here are the changes:
|
||||||
o Removal of dead/redundant code
|
o Removal of dead/redundant code
|
||||||
o Removal of asynchronous IO piece as it appears outdated
|
o Removal of asynchronous IO piece as it appears outdated
|
||||||
o Bug fixes for setting Lustre Hints
|
o Bug fixes for setting Lustre Hints
|
||||||
o Bug fixes for data sieving
|
o Bug fixes for data sieving
|
||||||
o Improved Setsize operation with one process calling ftruncate
|
o Improved Setsize operation with one process calling ftruncate
|
||||||
o Improved collective IO with domain partitioning on
|
o Improved collective IO with domain partitioning on
|
||||||
Lustre stripe boundary
|
Lustre stripe boundary
|
||||||
|
|
||||||
Contributing:
|
Contributing:
|
||||||
o You may contribute via many different ways, such as
|
o You may contribute via many different ways, such as
|
||||||
testing results, bug reports, and new feature patches.
|
testing results, bug reports, and new feature patches.
|
||||||
o We appreciate any courtesy reference of this work.
|
o We appreciate any courtesy reference of this work.
|
||||||
o Disclaimer: you are welcome to try the code, but at your own risk.
|
o Disclaimer: you are welcome to try the code, but at your own risk.
|
||||||
|
|
||||||
Contact info:
|
Contact info:
|
||||||
For more info, visit http://ft.ornl.gov/projects/io/
|
For more info, visit http://ft.ornl.gov/projects/io/
|
@ -41,4 +41,6 @@ struct ADIOI_Fns_struct ADIO_LUSTRE_operations = {
|
|||||||
ADIOI_GEN_Delete, /* Delete */
|
ADIOI_GEN_Delete, /* Delete */
|
||||||
ADIOI_GEN_Feature, /* Features */
|
ADIOI_GEN_Feature, /* Features */
|
||||||
"LUSTRE:",
|
"LUSTRE:",
|
||||||
|
ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
|
||||||
|
ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
|
||||||
};
|
};
|
@ -35,12 +35,16 @@
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_AIO_H
|
#ifdef HAVE_AIO_LITE_H
|
||||||
#include <aio.h>
|
#include <aio-lite.h>
|
||||||
#ifdef HAVE_SYS_AIO_H
|
#else
|
||||||
#include <sys/aio.h>
|
#ifdef HAVE_AIO_H
|
||||||
#endif
|
#include <aio.h>
|
||||||
#endif /* End of HAVE_SYS_AIO_H */
|
#endif
|
||||||
|
#ifdef HAVE_SYS_AIO_H
|
||||||
|
#include <sys/aio.h>
|
||||||
|
#endif
|
||||||
|
#endif /* End of HAVE_AIO_LITE_H */
|
||||||
|
|
||||||
void ADIOI_LUSTRE_Open(ADIO_File fd, int *error_code);
|
void ADIOI_LUSTRE_Open(ADIO_File fd, int *error_code);
|
||||||
void ADIOI_LUSTRE_Close(ADIO_File fd, int *error_code);
|
void ADIOI_LUSTRE_Close(ADIO_File fd, int *error_code);
|
@ -49,23 +49,23 @@ void ADIOI_LUSTRE_Get_striping_info(ADIO_File fd, int **striping_info_ptr,
|
|||||||
/* Calculate how many IO clients we need */
|
/* Calculate how many IO clients we need */
|
||||||
/* Algorithm courtesy Pascal Deveze (pascal.deveze@bull.net) */
|
/* Algorithm courtesy Pascal Deveze (pascal.deveze@bull.net) */
|
||||||
/* To avoid extent lock conflicts,
|
/* To avoid extent lock conflicts,
|
||||||
* avail_cb_nodes should either
|
* avail_cb_nodes should either
|
||||||
* - be a multiple of stripe_count,
|
* - be a multiple of stripe_count,
|
||||||
* - or divide stripe_count exactly
|
* - or divide stripe_count exactly
|
||||||
* so that each OST is accessed by a maximum of CO constant clients. */
|
* so that each OST is accessed by a maximum of CO constant clients. */
|
||||||
if (nprocs_for_coll >= stripe_count)
|
if (nprocs_for_coll >= stripe_count)
|
||||||
/* avail_cb_nodes should be a multiple of stripe_count and the number
|
/* avail_cb_nodes should be a multiple of stripe_count and the number
|
||||||
* of procs per OST should be limited to the minimum between
|
* of procs per OST should be limited to the minimum between
|
||||||
* nprocs_for_coll/stripe_count and CO
|
* nprocs_for_coll/stripe_count and CO
|
||||||
*
|
*
|
||||||
* e.g. if stripe_count=20, nprocs_for_coll=42 and CO=3 then
|
* e.g. if stripe_count=20, nprocs_for_coll=42 and CO=3 then
|
||||||
* avail_cb_nodes should be equal to 40 */
|
* avail_cb_nodes should be equal to 40 */
|
||||||
avail_cb_nodes =
|
avail_cb_nodes =
|
||||||
stripe_count * ADIOI_MIN(nprocs_for_coll/stripe_count, CO);
|
stripe_count * ADIOI_MIN(nprocs_for_coll/stripe_count, CO);
|
||||||
else {
|
else {
|
||||||
/* nprocs_for_coll is less than stripe_count */
|
/* nprocs_for_coll is less than stripe_count */
|
||||||
/* avail_cb_nodes should divide stripe_count */
|
/* avail_cb_nodes should divide stripe_count */
|
||||||
/* e.g. if stripe_count=60 and nprocs_for_coll=8 then
|
/* e.g. if stripe_count=60 and nprocs_for_coll=8 then
|
||||||
* avail_cb_nodes should be egal to 6 */
|
* avail_cb_nodes should be egal to 6 */
|
||||||
/* This could be done with :
|
/* This could be done with :
|
||||||
while (stripe_count % avail_cb_nodes != 0) avail_cb_nodes--;
|
while (stripe_count % avail_cb_nodes != 0) avail_cb_nodes--;
|
||||||
@ -83,7 +83,7 @@ void ADIOI_LUSTRE_Get_striping_info(ADIO_File fd, int **striping_info_ptr,
|
|||||||
}
|
}
|
||||||
/* if divisor is less than nprocs_for_coll, divisor is a
|
/* if divisor is less than nprocs_for_coll, divisor is a
|
||||||
* solution, but it is not sure that it is the best one */
|
* solution, but it is not sure that it is the best one */
|
||||||
else if (divisor <= nprocs_for_coll)
|
else if (divisor <= nprocs_for_coll)
|
||||||
avail_cb_nodes = divisor;
|
avail_cb_nodes = divisor;
|
||||||
}
|
}
|
||||||
divisor++;
|
divisor++;
|
||||||
@ -202,7 +202,7 @@ void ADIOI_LUSTRE_Calc_my_req(ADIO_File fd, ADIO_Offset *offset_list,
|
|||||||
for (i = 0; i < nprocs; i++) {
|
for (i = 0; i < nprocs; i++) {
|
||||||
/* add one to count_my_req_per_proc[i] to avoid zero size malloc */
|
/* add one to count_my_req_per_proc[i] to avoid zero size malloc */
|
||||||
buf_idx[i] = (int *) ADIOI_Malloc((count_my_req_per_proc[i] + 1)
|
buf_idx[i] = (int *) ADIOI_Malloc((count_my_req_per_proc[i] + 1)
|
||||||
* sizeof(int));
|
* sizeof(int));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* now allocate space for my_req, offset, and len */
|
/* now allocate space for my_req, offset, and len */
|
||||||
@ -310,8 +310,13 @@ int ADIOI_LUSTRE_Docollect(ADIO_File fd, int contig_access_count,
|
|||||||
fd->comm);
|
fd->comm);
|
||||||
MPI_Allreduce(&contig_access_count, &total_access_count, 1, MPI_INT, MPI_SUM,
|
MPI_Allreduce(&contig_access_count, &total_access_count, 1, MPI_INT, MPI_SUM,
|
||||||
fd->comm);
|
fd->comm);
|
||||||
/* estimate average req_size */
|
/* avoid possible divide-by-zero) */
|
||||||
avg_req_size = (int)(total_req_size / total_access_count);
|
if (total_access_count != 0) {
|
||||||
|
/* estimate average req_size */
|
||||||
|
avg_req_size = (int)(total_req_size / total_access_count);
|
||||||
|
} else {
|
||||||
|
avg_req_size = 0;
|
||||||
|
}
|
||||||
/* get hint of big_req_size */
|
/* get hint of big_req_size */
|
||||||
big_req_size = fd->hints->fs_hints.lustre.coll_threshold;
|
big_req_size = fd->hints->fs_hints.lustre.coll_threshold;
|
||||||
/* Don't perform collective I/O if there are big requests */
|
/* Don't perform collective I/O if there are big requests */
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2007 Oak Ridge National Laboratory
|
* Copyright (C) 2007 Oak Ridge National Laboratory
|
||||||
@ -22,11 +22,11 @@ void ADIOI_LUSTRE_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
|
|||||||
switch(flag) {
|
switch(flag) {
|
||||||
case ADIO_FCNTL_GET_FSIZE:
|
case ADIO_FCNTL_GET_FSIZE:
|
||||||
fcntl_struct->fsize = lseek(fd->fd_sys, 0, SEEK_END);
|
fcntl_struct->fsize = lseek(fd->fd_sys, 0, SEEK_END);
|
||||||
if (fd->fp_sys_posn != -1)
|
if (fd->fp_sys_posn != -1)
|
||||||
lseek(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
|
lseek(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
|
||||||
if (fcntl_struct->fsize == -1) {
|
if (fcntl_struct->fsize == -1) {
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", "**io %s", strerror(errno));
|
MPI_ERR_IO, "**io", "**io %s", strerror(errno));
|
||||||
}
|
}
|
||||||
else *error_code = MPI_SUCCESS;
|
else *error_code = MPI_SUCCESS;
|
||||||
@ -34,11 +34,11 @@ void ADIOI_LUSTRE_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
|
|||||||
|
|
||||||
case ADIO_FCNTL_SET_DISKSPACE:
|
case ADIO_FCNTL_SET_DISKSPACE:
|
||||||
/* will be called by one process only */
|
/* will be called by one process only */
|
||||||
/* On file systems with no preallocation function, I have to
|
/* On file systems with no preallocation function, I have to
|
||||||
explicitly write
|
explicitly write
|
||||||
to allocate space. Since there could be holes in the file,
|
to allocate space. Since there could be holes in the file,
|
||||||
I need to read up to the current file size, write it back,
|
I need to read up to the current file size, write it back,
|
||||||
and then write beyond that depending on how much
|
and then write beyond that depending on how much
|
||||||
preallocation is needed.
|
preallocation is needed.
|
||||||
read/write in sizes of no more than ADIOI_PREALLOC_BUFSZ */
|
read/write in sizes of no more than ADIOI_PREALLOC_BUFSZ */
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ void ADIOI_LUSTRE_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
|
|||||||
alloc_size = fcntl_struct->diskspace;
|
alloc_size = fcntl_struct->diskspace;
|
||||||
|
|
||||||
size = ADIOI_MIN(curr_fsize, alloc_size);
|
size = ADIOI_MIN(curr_fsize, alloc_size);
|
||||||
|
|
||||||
ntimes = (size + ADIOI_PREALLOC_BUFSZ - 1)/ADIOI_PREALLOC_BUFSZ;
|
ntimes = (size + ADIOI_PREALLOC_BUFSZ - 1)/ADIOI_PREALLOC_BUFSZ;
|
||||||
buf = (char *) ADIOI_Malloc(ADIOI_PREALLOC_BUFSZ);
|
buf = (char *) ADIOI_Malloc(ADIOI_PREALLOC_BUFSZ);
|
||||||
done = 0;
|
done = 0;
|
||||||
@ -56,31 +56,31 @@ void ADIOI_LUSTRE_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
|
|||||||
ADIO_ReadContig(fd, buf, len, MPI_BYTE, ADIO_EXPLICIT_OFFSET, done,
|
ADIO_ReadContig(fd, buf, len, MPI_BYTE, ADIO_EXPLICIT_OFFSET, done,
|
||||||
&status, error_code);
|
&status, error_code);
|
||||||
if (*error_code != MPI_SUCCESS) {
|
if (*error_code != MPI_SUCCESS) {
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
MPIR_ERR_RECOVERABLE, myname, __LINE__,
|
||||||
MPI_ERR_IO, "**io", "**io %s", strerror(errno));
|
MPI_ERR_IO, "**io", "**io %s", strerror(errno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ADIO_WriteContig(fd, buf, len, MPI_BYTE, ADIO_EXPLICIT_OFFSET,
|
ADIO_WriteContig(fd, buf, len, MPI_BYTE, ADIO_EXPLICIT_OFFSET,
|
||||||
done, &status, error_code);
|
done, &status, error_code);
|
||||||
if (*error_code != MPI_SUCCESS) return;
|
if (*error_code != MPI_SUCCESS) return;
|
||||||
done += len;
|
done += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alloc_size > curr_fsize) {
|
if (alloc_size > curr_fsize) {
|
||||||
memset(buf, 0, ADIOI_PREALLOC_BUFSZ);
|
memset(buf, 0, ADIOI_PREALLOC_BUFSZ);
|
||||||
size = alloc_size - curr_fsize;
|
size = alloc_size - curr_fsize;
|
||||||
ntimes = (size + ADIOI_PREALLOC_BUFSZ - 1)/ADIOI_PREALLOC_BUFSZ;
|
ntimes = (size + ADIOI_PREALLOC_BUFSZ - 1)/ADIOI_PREALLOC_BUFSZ;
|
||||||
for (i=0; i<ntimes; i++) {
|
for (i=0; i<ntimes; i++) {
|
||||||
len = ADIOI_MIN(alloc_size-done, ADIOI_PREALLOC_BUFSZ);
|
len = ADIOI_MIN(alloc_size-done, ADIOI_PREALLOC_BUFSZ);
|
||||||
ADIO_WriteContig(fd, buf, len, MPI_BYTE, ADIO_EXPLICIT_OFFSET,
|
ADIO_WriteContig(fd, buf, len, MPI_BYTE, ADIO_EXPLICIT_OFFSET,
|
||||||
done, &status, error_code);
|
done, &status, error_code);
|
||||||
if (*error_code != MPI_SUCCESS) return;
|
if (*error_code != MPI_SUCCESS) return;
|
||||||
done += len;
|
done += len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ADIOI_Free(buf);
|
ADIOI_Free(buf);
|
||||||
if (fd->fp_sys_posn != -1)
|
if (fd->fp_sys_posn != -1)
|
||||||
lseek(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
|
lseek(fd->fd_sys, fd->fp_sys_posn, SEEK_SET);
|
||||||
*error_code = MPI_SUCCESS;
|
*error_code = MPI_SUCCESS;
|
||||||
break;
|
break;
|
@ -20,7 +20,7 @@ void ADIOI_LUSTRE_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
|
|||||||
char *value;
|
char *value;
|
||||||
int flag;
|
int flag;
|
||||||
ADIO_Offset stripe_val[3], str_factor = -1, str_unit=0, start_iodev=-1;
|
ADIO_Offset stripe_val[3], str_factor = -1, str_unit=0, start_iodev=-1;
|
||||||
int err, myrank;
|
int myrank;
|
||||||
static char myname[] = "ADIOI_LUSTRE_SETINFO";
|
static char myname[] = "ADIOI_LUSTRE_SETINFO";
|
||||||
|
|
||||||
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
|
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
|
||||||
@ -108,7 +108,7 @@ void ADIOI_LUSTRE_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
|
|||||||
if (users_info != MPI_INFO_NULL) {
|
if (users_info != MPI_INFO_NULL) {
|
||||||
/* CO: IO Clients/OST,
|
/* CO: IO Clients/OST,
|
||||||
* to keep the load balancing between clients and OSTs */
|
* to keep the load balancing between clients and OSTs */
|
||||||
ADIOI_Info_check_and_install_int(fd, users_info, "romio_lustre_co_ratio",
|
ADIOI_Info_check_and_install_int(fd, users_info, "romio_lustre_co_ratio",
|
||||||
&(fd->hints->fs_hints.lustre.co_ratio), myname, error_code );
|
&(fd->hints->fs_hints.lustre.co_ratio), myname, error_code );
|
||||||
|
|
||||||
/* coll_threshold:
|
/* coll_threshold:
|
||||||
@ -125,6 +125,12 @@ void ADIOI_LUSTRE_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
|
|||||||
/* set the values for collective I/O and data sieving parameters */
|
/* set the values for collective I/O and data sieving parameters */
|
||||||
ADIOI_GEN_SetInfo(fd, users_info, error_code);
|
ADIOI_GEN_SetInfo(fd, users_info, error_code);
|
||||||
|
|
||||||
|
/* generic hints might step on striping_unit */
|
||||||
|
if (users_info != MPI_INFO_NULL) {
|
||||||
|
ADIOI_Info_check_and_install_int(fd, users_info, "striping_unit",
|
||||||
|
NULL, myname, error_code);
|
||||||
|
}
|
||||||
|
|
||||||
if (ADIOI_Direct_read) fd->direct_read = 1;
|
if (ADIOI_Direct_read) fd->direct_read = 1;
|
||||||
if (ADIOI_Direct_write) fd->direct_write = 1;
|
if (ADIOI_Direct_write) fd->direct_write = 1;
|
||||||
|
|
@ -147,9 +147,6 @@ void ADIOI_LUSTRE_Open(ADIO_File fd, int *error_code)
|
|||||||
if (fd->access_mode & ADIO_APPEND)
|
if (fd->access_mode & ADIO_APPEND)
|
||||||
fd->fp_ind = fd->fp_sys_posn = lseek(fd->fd_sys, 0, SEEK_END);
|
fd->fp_ind = fd->fp_sys_posn = lseek(fd->fd_sys, 0, SEEK_END);
|
||||||
|
|
||||||
if ((fd->fd_sys != -1) && (fd->access_mode & ADIO_APPEND))
|
|
||||||
fd->fp_ind = fd->fp_sys_posn = lseek(fd->fd_sys, 0, SEEK_END);
|
|
||||||
|
|
||||||
fd->fd_direct = -1;
|
fd->fd_direct = -1;
|
||||||
if (fd->direct_write || fd->direct_read) {
|
if (fd->direct_write || fd->direct_read) {
|
||||||
fd->fd_direct = open(fd->filename, amode_direct, perm);
|
fd->fd_direct = open(fd->filename, amode_direct, perm);
|
||||||
@ -160,12 +157,12 @@ void ADIOI_LUSTRE_Open(ADIO_File fd, int *error_code)
|
|||||||
fd->direct_write = fd->direct_read = 0;
|
fd->direct_write = fd->direct_read = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn_exit:
|
fn_exit:
|
||||||
ADIOI_Free(lum);
|
ADIOI_Free(lum);
|
||||||
ADIOI_Free(value);
|
ADIOI_Free(value);
|
||||||
|
|
||||||
/* --BEGIN ERROR HANDLING-- */
|
/* --BEGIN ERROR HANDLING-- */
|
||||||
if (fd->fd_sys == -1 || ((fd->fd_direct == -1) &&
|
if (fd->fd_sys == -1 || ((fd->fd_direct == -1) &&
|
||||||
(fd->direct_write || fd->direct_read))) {
|
(fd->direct_write || fd->direct_read))) {
|
||||||
*error_code = ADIOI_Err_create_code(myname, fd->filename, errno);
|
*error_code = ADIOI_Err_create_code(myname, fd->filename, errno);
|
||||||
}
|
}
|
@ -94,7 +94,7 @@ static int ADIOI_LUSTRE_Directio(ADIO_File fd, const void *buf, int len,
|
|||||||
else nbytes += pwrite(fd->fd_sys, buf, size, offset);
|
else nbytes += pwrite(fd->fd_sys, buf, size, offset);
|
||||||
}
|
}
|
||||||
err = nbytes;
|
err = nbytes;
|
||||||
} else {
|
} else {
|
||||||
if (!(((long) buf) % fd->d_mem)) {
|
if (!(((long) buf) % fd->d_mem)) {
|
||||||
ADIOI_LUSTRE_Aligned_Mem_File_Read(fd, buf, size, offset, &err);
|
ADIOI_LUSTRE_Aligned_Mem_File_Read(fd, buf, size, offset, &err);
|
||||||
nbytes += err;
|
nbytes += err;
|
||||||
@ -115,11 +115,11 @@ static int ADIOI_LUSTRE_Directio(ADIO_File fd, const void *buf, int len,
|
|||||||
|
|
||||||
static void ADIOI_LUSTRE_IOContig(ADIO_File fd, const void *buf, int count,
|
static void ADIOI_LUSTRE_IOContig(ADIO_File fd, const void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status,
|
ADIO_Offset offset, ADIO_Status *status,
|
||||||
int io_mode, int *error_code);
|
int io_mode, int *error_code);
|
||||||
static void ADIOI_LUSTRE_IOContig(ADIO_File fd, const void *buf, int count,
|
static void ADIOI_LUSTRE_IOContig(ADIO_File fd, const void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status,
|
ADIO_Offset offset, ADIO_Status *status,
|
||||||
int io_mode, int *error_code)
|
int io_mode, int *error_code)
|
||||||
{
|
{
|
||||||
int err=-1;
|
int err=-1;
|
||||||
@ -138,7 +138,7 @@ static void ADIOI_LUSTRE_IOContig(ADIO_File fd, const void *buf, int count,
|
|||||||
err = lseek(fd->fd_sys, offset, SEEK_SET);
|
err = lseek(fd->fd_sys, offset, SEEK_SET);
|
||||||
if (err == -1) goto ioerr;
|
if (err == -1) goto ioerr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (io_mode) {
|
if (io_mode) {
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event(ADIOI_MPE_write_a, 0, NULL);
|
MPE_Log_event(ADIOI_MPE_write_a, 0, NULL);
|
||||||
@ -164,7 +164,7 @@ static void ADIOI_LUSTRE_IOContig(ADIO_File fd, const void *buf, int count,
|
|||||||
fd->fp_sys_posn = offset + err;
|
fd->fp_sys_posn = offset + err;
|
||||||
|
|
||||||
if (file_ptr_type == ADIO_INDIVIDUAL) {
|
if (file_ptr_type == ADIO_INDIVIDUAL) {
|
||||||
fd->fp_ind += err;
|
fd->fp_ind += err;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_STATUS_SET_BYTES
|
#ifdef HAVE_STATUS_SET_BYTES
|
||||||
@ -194,7 +194,7 @@ void ADIOI_LUSTRE_WriteContig(ADIO_File fd, const void *buf, int count,
|
|||||||
offset, status, 1, error_code);
|
offset, status, 1, error_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ADIOI_LUSTRE_ReadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_LUSTRE_ReadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int *error_code)
|
ADIO_Offset offset, ADIO_Status *status, int *error_code)
|
||||||
{
|
{
|
@ -42,7 +42,7 @@ static void ADIOI_LUSTRE_W_Exchange_data(ADIO_File fd, const void *buf,
|
|||||||
ADIO_Offset *len_list, int *send_size,
|
ADIO_Offset *len_list, int *send_size,
|
||||||
int *recv_size, ADIO_Offset off,
|
int *recv_size, ADIO_Offset off,
|
||||||
int size, int *count,
|
int size, int *count,
|
||||||
int *start_pos,
|
int *start_pos,
|
||||||
int *sent_to_proc, int nprocs,
|
int *sent_to_proc, int nprocs,
|
||||||
int myrank, int buftype_is_contig,
|
int myrank, int buftype_is_contig,
|
||||||
int contig_access_count,
|
int contig_access_count,
|
||||||
@ -288,7 +288,7 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
|
|||||||
int myrank, ADIOI_Access *others_req,
|
int myrank, ADIOI_Access *others_req,
|
||||||
ADIOI_Access *my_req,
|
ADIOI_Access *my_req,
|
||||||
ADIO_Offset *offset_list,
|
ADIO_Offset *offset_list,
|
||||||
ADIO_Offset *len_list,
|
ADIO_Offset *len_list,
|
||||||
int contig_access_count,
|
int contig_access_count,
|
||||||
int *striping_info, int **buf_idx,
|
int *striping_info, int **buf_idx,
|
||||||
int *error_code)
|
int *error_code)
|
||||||
@ -415,10 +415,7 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
|
|||||||
|
|
||||||
ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
|
ADIOI_Datatype_iscontig(datatype, &buftype_is_contig);
|
||||||
if (!buftype_is_contig) {
|
if (!buftype_is_contig) {
|
||||||
ADIOI_Flatten_datatype(datatype);
|
flat_buf = ADIOI_Flatten_and_find(datatype);
|
||||||
flat_buf = ADIOI_Flatlist;
|
|
||||||
while (flat_buf->type != datatype)
|
|
||||||
flat_buf = flat_buf->next;
|
|
||||||
}
|
}
|
||||||
MPI_Type_get_extent(datatype, &buftype_lb, &buftype_extent);
|
MPI_Type_get_extent(datatype, &buftype_lb, &buftype_extent);
|
||||||
/* I need to check if there are any outstanding nonblocking writes to
|
/* I need to check if there are any outstanding nonblocking writes to
|
||||||
@ -500,7 +497,7 @@ static void ADIOI_LUSTRE_Exch_and_write(ADIO_File fd, const void *buf,
|
|||||||
req_len = others_req[i].lens[j];
|
req_len = others_req[i].lens[j];
|
||||||
if (req_off < iter_st_off + max_size) {
|
if (req_off < iter_st_off + max_size) {
|
||||||
recv_count[i]++;
|
recv_count[i]++;
|
||||||
ADIOI_Assert((((ADIO_Offset)(MPIR_Upint)write_buf)+req_off-off) == (ADIO_Offset)(MPIR_Upint)(write_buf+req_off-off));
|
ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)write_buf)+req_off-off) == (ADIO_Offset)(MPIU_Upint)(write_buf+req_off-off));
|
||||||
MPI_Get_address(write_buf + req_off - off,
|
MPI_Get_address(write_buf + req_off - off,
|
||||||
&(others_req[i].mem_ptrs[j]));
|
&(others_req[i].mem_ptrs[j]));
|
||||||
recv_size[i] += req_len;
|
recv_size[i] += req_len;
|
||||||
@ -620,7 +617,7 @@ static void ADIOI_LUSTRE_W_Exchange_data(ADIO_File fd, const void *buf,
|
|||||||
ADIO_Offset *len_list, int *send_size,
|
ADIO_Offset *len_list, int *send_size,
|
||||||
int *recv_size, ADIO_Offset off,
|
int *recv_size, ADIO_Offset off,
|
||||||
int size, int *count,
|
int size, int *count,
|
||||||
int *start_pos,
|
int *start_pos,
|
||||||
int *sent_to_proc, int nprocs,
|
int *sent_to_proc, int nprocs,
|
||||||
int myrank, int buftype_is_contig,
|
int myrank, int buftype_is_contig,
|
||||||
int contig_access_count,
|
int contig_access_count,
|
||||||
@ -862,7 +859,7 @@ static void ADIOI_LUSTRE_W_Exchange_data(ADIO_File fd, const void *buf,
|
|||||||
{ \
|
{ \
|
||||||
while (size) { \
|
while (size) { \
|
||||||
size_in_buf = ADIOI_MIN(size, flat_buf_sz); \
|
size_in_buf = ADIOI_MIN(size, flat_buf_sz); \
|
||||||
ADIOI_Assert((((ADIO_Offset)(MPIR_Upint)buf) + user_buf_idx) == (ADIO_Offset)(MPIR_Upint)((MPIR_Upint)buf + user_buf_idx)); \
|
ADIOI_Assert((((ADIO_Offset)(MPIU_Upint)buf) + user_buf_idx) == (ADIO_Offset)(MPIU_Upint)((MPIU_Upint)buf + user_buf_idx)); \
|
||||||
ADIOI_Assert(size_in_buf == (size_t)size_in_buf); \
|
ADIOI_Assert(size_in_buf == (size_t)size_in_buf); \
|
||||||
memcpy(&(send_buf[p][send_buf_idx[p]]), \
|
memcpy(&(send_buf[p][send_buf_idx[p]]), \
|
||||||
((char *) buf) + user_buf_idx, size_in_buf); \
|
((char *) buf) + user_buf_idx, size_in_buf); \
|
@ -209,10 +209,7 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
/* Different buftype to different filetype */
|
/* Different buftype to different filetype */
|
||||||
if (!buftype_is_contig && filetype_is_contig) {
|
if (!buftype_is_contig && filetype_is_contig) {
|
||||||
/* noncontiguous in memory, contiguous in file. */
|
/* noncontiguous in memory, contiguous in file. */
|
||||||
ADIOI_Flatten_datatype(datatype);
|
flat_buf = ADIOI_Flatten_and_find(datatype);
|
||||||
flat_buf = ADIOI_Flatlist;
|
|
||||||
while (flat_buf->type != datatype)
|
|
||||||
flat_buf = flat_buf->next;
|
|
||||||
|
|
||||||
off = (file_ptr_type == ADIO_INDIVIDUAL) ? fd->fp_ind :
|
off = (file_ptr_type == ADIO_INDIVIDUAL) ? fd->fp_ind :
|
||||||
fd->disp + (ADIO_Offset)etype_size * offset;
|
fd->disp + (ADIO_Offset)etype_size * offset;
|
||||||
@ -436,10 +433,7 @@ void ADIOI_LUSTRE_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* noncontiguous in memory as well as in file */
|
/* noncontiguous in memory as well as in file */
|
||||||
|
flat_buf = ADIOI_Flatten_and_find(datatype);
|
||||||
ADIOI_Flatten_datatype(datatype);
|
|
||||||
flat_buf = ADIOI_Flatlist;
|
|
||||||
while (flat_buf->type != datatype) flat_buf = flat_buf->next;
|
|
||||||
|
|
||||||
k = num = buf_count = 0;
|
k = num = buf_count = 0;
|
||||||
i_offset = flat_buf->indices[0];
|
i_offset = flat_buf->indices[0];
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2001 University of Chicago.
|
* Copyright (C) 2001 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -37,5 +37,7 @@ struct ADIOI_Fns_struct ADIO_NFS_operations = {
|
|||||||
ADIOI_NFS_Resize, /* Resize */
|
ADIOI_NFS_Resize, /* Resize */
|
||||||
ADIOI_GEN_Delete, /* Delete */
|
ADIOI_GEN_Delete, /* Delete */
|
||||||
ADIOI_NFS_Feature, /* Features */
|
ADIOI_NFS_Feature, /* Features */
|
||||||
"NFS:" /* fsname: just a string */
|
"NFS:", /* fsname: just a string */
|
||||||
|
ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
|
||||||
|
ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
|
||||||
};
|
};
|
@ -1,16 +1,17 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef AD_NFS_INCLUDE
|
#ifndef AD_NFS_INCLUDE
|
||||||
#define AD_NFS_INCLUDE
|
#define AD_NFS_INCLUDE
|
||||||
|
|
||||||
|
#include "adio.h"
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include "adio.h"
|
|
||||||
|
|
||||||
#ifdef HAVE_SIGNAL_H
|
#ifdef HAVE_SIGNAL_H
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@ -18,14 +19,18 @@
|
|||||||
#ifdef HAVE_SYS_TYPES_H
|
#ifdef HAVE_SYS_TYPES_H
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_AIO_H
|
#ifdef HAVE_AIO_LITE_H
|
||||||
#include <aio.h>
|
#include <aio-lite.h>
|
||||||
#endif
|
#else
|
||||||
#ifdef HAVE_SYS_AIO_H
|
#ifdef HAVE_AIO_H
|
||||||
#include <sys/aio.h>
|
#include <aio.h>
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_SYS_AIO_H
|
||||||
|
#include <sys/aio.h>
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Workaround for incomplete set of definitions if __REDIRECT is not
|
/* Workaround for incomplete set of definitions if __REDIRECT is not
|
||||||
defined and large file support is used in aio.h */
|
defined and large file support is used in aio.h */
|
||||||
#if !defined(__REDIRECT) && defined(__USE_FILE_OFFSET64)
|
#if !defined(__REDIRECT) && defined(__USE_FILE_OFFSET64)
|
||||||
#define aiocb aiocb64
|
#define aiocb aiocb64
|
||||||
@ -39,32 +44,32 @@ int ADIOI_NFS_aio(ADIO_File fd, void *buf, int len, ADIO_Offset offset,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void ADIOI_NFS_Open(ADIO_File fd, int *error_code);
|
void ADIOI_NFS_Open(ADIO_File fd, int *error_code);
|
||||||
void ADIOI_NFS_ReadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_NFS_ReadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
|
void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NFS_IwriteContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_NFS_IwriteContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Request *request, int
|
ADIO_Offset offset, ADIO_Request *request, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NFS_IreadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_NFS_IreadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Request *request, int
|
ADIO_Offset offset, ADIO_Request *request, int
|
||||||
*error_code);
|
*error_code);
|
||||||
int ADIOI_NFS_ReadDone(ADIO_Request *request, ADIO_Status *status, int
|
int ADIOI_NFS_ReadDone(ADIO_Request *request, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
int ADIOI_NFS_WriteDone(ADIO_Request *request, ADIO_Status *status, int
|
int ADIOI_NFS_WriteDone(ADIO_Request *request, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NFS_ReadComplete(ADIO_Request *request, ADIO_Status *status, int
|
void ADIOI_NFS_ReadComplete(ADIO_Request *request, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NFS_WriteComplete(ADIO_Request *request, ADIO_Status *status,
|
void ADIOI_NFS_WriteComplete(ADIO_Request *request, ADIO_Status *status,
|
||||||
int *error_code);
|
int *error_code);
|
||||||
void ADIOI_NFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
|
void ADIOI_NFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -16,4 +16,4 @@ int ADIOI_NFS_WriteDone(ADIO_Request *request, ADIO_Status *status,
|
|||||||
int *error_code)
|
int *error_code)
|
||||||
{
|
{
|
||||||
return ADIOI_NFS_ReadDone(request, status, error_code);
|
return ADIOI_NFS_ReadDone(request, status, error_code);
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ void ADIOI_NFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *er
|
|||||||
/* --BEGIN ERROR HANDLING-- */
|
/* --BEGIN ERROR HANDLING-- */
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
|
||||||
myname, __LINE__,
|
myname, __LINE__,
|
||||||
MPI_ERR_ARG,
|
MPI_ERR_ARG,
|
||||||
"**flag", "**flag %d", flag);
|
"**flag", "**flag %d", flag);
|
||||||
return;
|
return;
|
||||||
/* --END ERROR HANDLING-- */
|
/* --END ERROR HANDLING-- */
|
@ -8,7 +8,7 @@
|
|||||||
#include "ad_nfs.h"
|
#include "ad_nfs.h"
|
||||||
|
|
||||||
int ADIOI_NFS_Feature(ADIO_File fd, int flag)
|
int ADIOI_NFS_Feature(ADIO_File fd, int flag)
|
||||||
{
|
{
|
||||||
switch(flag) {
|
switch(flag) {
|
||||||
case ADIO_SHARED_FP:
|
case ADIO_SHARED_FP:
|
||||||
case ADIO_LOCKS:
|
case ADIO_LOCKS:
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -23,11 +23,11 @@ void ADIOI_NFS_Get_shared_fp(ADIO_File fd, ADIO_Offset incr, ADIO_Offset *shared
|
|||||||
if (fd->shared_fp_fd == ADIO_FILE_NULL) {
|
if (fd->shared_fp_fd == ADIO_FILE_NULL) {
|
||||||
MPI_Comm_dup(MPI_COMM_SELF, &dupcommself);
|
MPI_Comm_dup(MPI_COMM_SELF, &dupcommself);
|
||||||
fd->shared_fp_fd = ADIO_Open(MPI_COMM_SELF, dupcommself,
|
fd->shared_fp_fd = ADIO_Open(MPI_COMM_SELF, dupcommself,
|
||||||
fd->shared_fp_fname,
|
fd->shared_fp_fname,
|
||||||
fd->file_system,
|
fd->file_system,
|
||||||
fd->fns,
|
fd->fns,
|
||||||
ADIO_CREATE | ADIO_RDWR | ADIO_DELETE_ON_CLOSE,
|
ADIO_CREATE | ADIO_RDWR | ADIO_DELETE_ON_CLOSE,
|
||||||
0, MPI_BYTE, MPI_BYTE, MPI_INFO_NULL,
|
0, MPI_BYTE, MPI_BYTE, MPI_INFO_NULL,
|
||||||
ADIO_PERM_NULL, error_code);
|
ADIO_PERM_NULL, error_code);
|
||||||
if (*error_code != MPI_SUCCESS) return;
|
if (*error_code != MPI_SUCCESS) return;
|
||||||
*shared_fp = 0;
|
*shared_fp = 0;
|
||||||
@ -40,7 +40,7 @@ void ADIOI_NFS_Get_shared_fp(ADIO_File fd, ADIO_Offset incr, ADIO_Offset *shared
|
|||||||
MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
/* if the file is empty, the above read may return error
|
/* if the file is empty, the above read may return error
|
||||||
(reading beyond end of file). In that case, shared_fp = 0,
|
(reading beyond end of file). In that case, shared_fp = 0,
|
||||||
set above, is the correct value. */
|
set above, is the correct value. */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -9,5 +9,5 @@
|
|||||||
|
|
||||||
void ADIOI_NFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
|
void ADIOI_NFS_SetInfo(ADIO_File fd, MPI_Info users_info, int *error_code)
|
||||||
{
|
{
|
||||||
ADIOI_GEN_SetInfo(fd, users_info, error_code);
|
ADIOI_GEN_SetInfo(fd, users_info, error_code);
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -8,10 +8,10 @@
|
|||||||
|
|
||||||
#ifdef ROMIO_HAVE_WORKING_AIO
|
#ifdef ROMIO_HAVE_WORKING_AIO
|
||||||
/* nearly identical to ADIOI_GEN_IreadContig, except we lock around I/O */
|
/* nearly identical to ADIOI_GEN_IreadContig, except we lock around I/O */
|
||||||
void ADIOI_NFS_IreadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_NFS_IreadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Request *request,
|
ADIO_Offset offset, ADIO_Request *request,
|
||||||
int *error_code)
|
int *error_code)
|
||||||
{
|
{
|
||||||
MPI_Count len, typesize;
|
MPI_Count len, typesize;
|
||||||
int aio_errno = 0;
|
int aio_errno = 0;
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -16,9 +16,9 @@
|
|||||||
static MPIX_Grequest_class ADIOI_GEN_greq_class = 0;
|
static MPIX_Grequest_class ADIOI_GEN_greq_class = 0;
|
||||||
/* this routine is nearly identical to ADIOI_GEN_IwriteContig, except we lock
|
/* this routine is nearly identical to ADIOI_GEN_IwriteContig, except we lock
|
||||||
* around I/O */
|
* around I/O */
|
||||||
void ADIOI_NFS_IwriteContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_NFS_IwriteContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Request *request, int *error_code)
|
ADIO_Offset offset, ADIO_Request *request, int *error_code)
|
||||||
{
|
{
|
||||||
MPI_Count len, typesize;
|
MPI_Count len, typesize;
|
||||||
int aio_errno = 0;
|
int aio_errno = 0;
|
||||||
@ -69,19 +69,19 @@ int ADIOI_NFS_aio(ADIO_File fd, void *buf, int len, ADIO_Offset offset,
|
|||||||
aiocbp->aio_buf = buf;
|
aiocbp->aio_buf = buf;
|
||||||
aiocbp->aio_nbytes = len;
|
aiocbp->aio_nbytes = len;
|
||||||
|
|
||||||
#ifdef ROMIO_HAVE_STRUCT_AIOCB_WITH_AIO_WHENCE
|
#ifdef HAVE_STRUCT_AIOCB_AIO_WHENCE
|
||||||
aiocbp->aio_whence = SEEK_SET;
|
aiocbp->aio_whence = SEEK_SET;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ROMIO_HAVE_STRUCT_AIOCB_WITH_AIO_FILDES
|
#ifdef HAVE_STRUCT_AIOCB_AIO_FILDES
|
||||||
aiocbp->aio_fildes = fd_sys;
|
aiocbp->aio_fildes = fd_sys;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ROMIO_HAVE_STRUCT_AIOCB_WITH_AIO_SIGEVENT
|
#ifdef HAVE_STRUCT_AIOCB_AIO_SIGEVENT
|
||||||
# ifdef AIO_SIGNOTIFY_NONE
|
# ifdef AIO_SIGNOTIFY_NONE
|
||||||
aiocbp->aio_sigevent.sigev_notify = SIGEV_NONE;
|
aiocbp->aio_sigevent.sigev_notify = SIGEV_NONE;
|
||||||
# endif
|
# endif
|
||||||
aiocbp->aio_sigevent.sigev_signo = 0;
|
aiocbp->aio_sigevent.sigev_signo = 0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef ROMIO_HAVE_STRUCT_AIOCB_WITH_AIO_REQPRIO
|
#ifdef HAVE_STRUCT_AIOCB_AIO_REQPRIO
|
||||||
# ifdef AIO_PRIO_DFL
|
# ifdef AIO_PRIO_DFL
|
||||||
aiocbp->aio_reqprio = AIO_PRIO_DFL; /* not needed in DEC Unix 4.0 */
|
aiocbp->aio_reqprio = AIO_PRIO_DFL; /* not needed in DEC Unix 4.0 */
|
||||||
# else
|
# else
|
||||||
@ -118,9 +118,9 @@ int ADIOI_NFS_aio(ADIO_File fd, void *buf, int len, ADIO_Offset offset,
|
|||||||
}
|
}
|
||||||
aio_req->aiocbp = aiocbp;
|
aio_req->aiocbp = aiocbp;
|
||||||
if (ADIOI_GEN_greq_class == 0) {
|
if (ADIOI_GEN_greq_class == 0) {
|
||||||
MPIX_Grequest_class_create(ADIOI_GEN_aio_query_fn,
|
MPIX_Grequest_class_create(ADIOI_GEN_aio_query_fn,
|
||||||
ADIOI_GEN_aio_free_fn, MPIU_Greq_cancel_fn,
|
ADIOI_GEN_aio_free_fn, MPIU_Greq_cancel_fn,
|
||||||
ADIOI_GEN_aio_poll_fn, ADIOI_GEN_aio_wait_fn,
|
ADIOI_GEN_aio_poll_fn, ADIOI_GEN_aio_wait_fn,
|
||||||
&ADIOI_GEN_greq_class);
|
&ADIOI_GEN_greq_class);
|
||||||
}
|
}
|
||||||
MPIX_Grequest_class_allocate(ADIOI_GEN_greq_class, aio_req, request);
|
MPIX_Grequest_class_allocate(ADIOI_GEN_greq_class, aio_req, request);
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ void ADIOI_NFS_Open(ADIO_File fd, int *error_code)
|
|||||||
perm = old_mask ^ 0666;
|
perm = old_mask ^ 0666;
|
||||||
}
|
}
|
||||||
else perm = fd->perm;
|
else perm = fd->perm;
|
||||||
|
|
||||||
amode = 0;
|
amode = 0;
|
||||||
if (fd->access_mode & ADIO_CREATE)
|
if (fd->access_mode & ADIO_CREATE)
|
||||||
amode = amode | O_CREAT;
|
amode = amode | O_CREAT;
|
@ -1,74 +1,85 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ad_nfs.h"
|
#include "ad_nfs.h"
|
||||||
#include "adio_extern.h"
|
#include "adio_extern.h"
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void ADIOI_NFS_ReadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_NFS_ReadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int *error_code)
|
ADIO_Offset offset, ADIO_Status *status, int *error_code)
|
||||||
{
|
{
|
||||||
ssize_t err=-1;
|
int err=-1;
|
||||||
MPI_Count datatype_size, len;
|
MPI_Count datatype_size, len;
|
||||||
ADIO_Offset bytes_xfered=0;
|
|
||||||
size_t rd_count;
|
|
||||||
static char myname[] = "ADIOI_NFS_READCONTIG";
|
static char myname[] = "ADIOI_NFS_READCONTIG";
|
||||||
char *p;
|
|
||||||
|
|
||||||
MPI_Type_size_x(datatype, &datatype_size);
|
MPI_Type_size_x(datatype, &datatype_size);
|
||||||
len = datatype_size * count;
|
len = datatype_size * count;
|
||||||
|
|
||||||
if (file_ptr_type == ADIO_INDIVIDUAL) {
|
if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
|
||||||
offset = fd->fp_ind;
|
if (fd->fp_sys_posn != offset) {
|
||||||
}
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
|
||||||
p = buf;
|
#endif
|
||||||
while (bytes_xfered < len ) {
|
lseek(fd->fd_sys, offset, SEEK_SET);
|
||||||
rd_count = len - bytes_xfered;
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
/* FreeBSD and Darwin workaround: bigger than INT_MAX is an error */
|
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
|
||||||
if (rd_count > INT_MAX)
|
#endif
|
||||||
rd_count = INT_MAX;
|
}
|
||||||
if (fd->atomicity)
|
if (fd->atomicity)
|
||||||
ADIOI_WRITE_LOCK(fd, offset+bytes_xfered, SEEK_SET, rd_count);
|
ADIOI_WRITE_LOCK(fd, offset, SEEK_SET, len);
|
||||||
else ADIOI_READ_LOCK(fd, offset+bytes_xfered, SEEK_SET, rd_count);
|
else ADIOI_READ_LOCK(fd, offset, SEEK_SET, len);
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
err = pread(fd->fd_sys, p, rd_count, offset+bytes_xfered);
|
err = read(fd->fd_sys, buf, len);
|
||||||
/* --BEGIN ERROR HANDLING-- */
|
|
||||||
if (err == -1) {
|
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
|
||||||
MPIR_ERR_RECOVERABLE, myname, __LINE__, MPI_ERR_IO,
|
|
||||||
"**io", "**io %s", strerror(errno));
|
|
||||||
}
|
|
||||||
/* --END ERROR HANDLING-- */
|
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
ADIOI_UNLOCK(fd, offset+bytes_xfered, SEEK_SET, rd_count);
|
ADIOI_UNLOCK(fd, offset, SEEK_SET, len);
|
||||||
if (err == 0) {
|
fd->fp_sys_posn = offset + err;
|
||||||
/* end of file */
|
/* individual file pointer not updated */
|
||||||
break;
|
}
|
||||||
|
else { /* read from curr. location of ind. file pointer */
|
||||||
|
offset = fd->fp_ind;
|
||||||
|
if (fd->fp_sys_posn != fd->fp_ind) {
|
||||||
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
|
||||||
|
#endif
|
||||||
|
lseek(fd->fd_sys, fd->fp_ind, SEEK_SET);
|
||||||
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
bytes_xfered += err;
|
if (fd->atomicity)
|
||||||
p += err;
|
ADIOI_WRITE_LOCK(fd, offset, SEEK_SET, len);
|
||||||
|
else ADIOI_READ_LOCK(fd, offset, SEEK_SET, len);
|
||||||
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
|
||||||
|
#endif
|
||||||
|
err = read(fd->fd_sys, buf, len);
|
||||||
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
|
||||||
|
#endif
|
||||||
|
ADIOI_UNLOCK(fd, offset, SEEK_SET, len);
|
||||||
|
fd->fp_ind += err;
|
||||||
|
fd->fp_sys_posn = fd->fp_ind;
|
||||||
}
|
}
|
||||||
|
|
||||||
fd->fp_sys_posn = offset + bytes_xfered;
|
/* --BEGIN ERROR HANDLING-- */
|
||||||
if (file_ptr_type == ADIO_INDIVIDUAL) {
|
if (err == -1) {
|
||||||
fd->fp_ind += bytes_xfered;
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
|
||||||
|
myname, __LINE__, MPI_ERR_IO,
|
||||||
|
"**io", "**io %s", strerror(errno));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
/* --END ERROR HANDLING-- */
|
/* --END ERROR HANDLING-- */
|
||||||
|
|
||||||
#ifdef HAVE_STATUS_SET_BYTES
|
#ifdef HAVE_STATUS_SET_BYTES
|
||||||
if (err != -1) MPIR_Status_set_bytes(status, datatype, bytes_xfered);
|
MPIR_Status_set_bytes(status, datatype, err);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*error_code = MPI_SUCCESS;
|
*error_code = MPI_SUCCESS;
|
||||||
@ -164,7 +175,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
ADIO_Offset abs_off_in_filetype=0;
|
ADIO_Offset abs_off_in_filetype=0;
|
||||||
int req_len, partial_read;
|
int req_len, partial_read;
|
||||||
MPI_Count filetype_size, etype_size, buftype_size;
|
MPI_Count filetype_size, etype_size, buftype_size;
|
||||||
MPI_Aint filetype_extent, buftype_extent, lb;
|
MPI_Aint filetype_extent, buftype_extent, lb;
|
||||||
int buf_count, buftype_is_contig, filetype_is_contig;
|
int buf_count, buftype_is_contig, filetype_is_contig;
|
||||||
ADIO_Offset userbuf_off;
|
ADIO_Offset userbuf_off;
|
||||||
ADIO_Offset off, req_off, disp, end_offset=0, readbuf_off, start_off;
|
ADIO_Offset off, req_off, disp, end_offset=0, readbuf_off, start_off;
|
||||||
@ -183,7 +194,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
#ifdef HAVE_STATUS_SET_BYTES
|
#ifdef HAVE_STATUS_SET_BYTES
|
||||||
MPIR_Status_set_bytes(status, datatype, 0);
|
MPIR_Status_set_bytes(status, datatype, 0);
|
||||||
#endif
|
#endif
|
||||||
*error_code = MPI_SUCCESS;
|
*error_code = MPI_SUCCESS;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,7 +208,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
/* get max_bufsize from the info object. */
|
/* get max_bufsize from the info object. */
|
||||||
|
|
||||||
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
|
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
|
||||||
ADIOI_Info_get(fd->info, "ind_rd_buffer_size", MPI_MAX_INFO_VAL, value,
|
ADIOI_Info_get(fd->info, "ind_rd_buffer_size", MPI_MAX_INFO_VAL, value,
|
||||||
&info_flag);
|
&info_flag);
|
||||||
max_bufsize = atoi(value);
|
max_bufsize = atoi(value);
|
||||||
ADIOI_Free(value);
|
ADIOI_Free(value);
|
||||||
@ -206,11 +217,9 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
|
|
||||||
/* noncontiguous in memory, contiguous in file. */
|
/* noncontiguous in memory, contiguous in file. */
|
||||||
|
|
||||||
ADIOI_Flatten_datatype(datatype);
|
flat_buf = ADIOI_Flatten_and_find(datatype);
|
||||||
flat_buf = ADIOI_Flatlist;
|
|
||||||
while (flat_buf->type != datatype) flat_buf = flat_buf->next;
|
|
||||||
|
|
||||||
off = (file_ptr_type == ADIO_INDIVIDUAL) ? fd->fp_ind :
|
off = (file_ptr_type == ADIO_INDIVIDUAL) ? fd->fp_ind :
|
||||||
fd->disp + etype_size * offset;
|
fd->disp + etype_size * offset;
|
||||||
|
|
||||||
start_off = off;
|
start_off = off;
|
||||||
@ -241,7 +250,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
if (!(fd->atomicity)) ADIOI_UNLOCK(fd, readbuf_off, SEEK_SET, readbuf_len);
|
if (!(fd->atomicity)) ADIOI_UNLOCK(fd, readbuf_off, SEEK_SET, readbuf_len);
|
||||||
if (err == -1) err_flag = 1;
|
if (err == -1) err_flag = 1;
|
||||||
|
|
||||||
for (j=0; j<count; j++)
|
for (j=0; j<count; j++)
|
||||||
for (i=0; i<flat_buf->count; i++) {
|
for (i=0; i<flat_buf->count; i++) {
|
||||||
userbuf_off = j*buftype_extent + flat_buf->indices[i];
|
userbuf_off = j*buftype_extent + flat_buf->indices[i];
|
||||||
req_off = off;
|
req_off = off;
|
||||||
@ -279,7 +288,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
n_filetypes = (offset - flat_file->indices[0]) / filetype_extent;
|
n_filetypes = (offset - flat_file->indices[0]) / filetype_extent;
|
||||||
offset -= (ADIO_Offset)n_filetypes * filetype_extent;
|
offset -= (ADIO_Offset)n_filetypes * filetype_extent;
|
||||||
/* now offset is local to this extent */
|
/* now offset is local to this extent */
|
||||||
|
|
||||||
/* find the block where offset is located, skip blocklens[i]==0 */
|
/* find the block where offset is located, skip blocklens[i]==0 */
|
||||||
for (i=0; i<flat_file->count; i++) {
|
for (i=0; i<flat_file->count; i++) {
|
||||||
ADIO_Offset dist;
|
ADIO_Offset dist;
|
||||||
@ -292,7 +301,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
frd_size = flat_file->blocklens[i];
|
frd_size = flat_file->blocklens[i];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (dist > 0 ) {
|
if (dist > 0 ) {
|
||||||
frd_size = dist;
|
frd_size = dist;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -305,7 +314,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
n_filetypes = (int) (offset / n_etypes_in_filetype);
|
n_filetypes = (int) (offset / n_etypes_in_filetype);
|
||||||
etype_in_filetype = (int) (offset % n_etypes_in_filetype);
|
etype_in_filetype = (int) (offset % n_etypes_in_filetype);
|
||||||
size_in_filetype = etype_in_filetype * etype_size;
|
size_in_filetype = etype_in_filetype * etype_size;
|
||||||
|
|
||||||
sum = 0;
|
sum = 0;
|
||||||
for (i=0; i<flat_file->count; i++) {
|
for (i=0; i<flat_file->count; i++) {
|
||||||
sum += flat_file->blocklens[i];
|
sum += flat_file->blocklens[i];
|
||||||
@ -319,7 +328,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* abs. offset in bytes in the file */
|
/* abs. offset in bytes in the file */
|
||||||
offset = disp + (ADIO_Offset) n_filetypes*filetype_extent +
|
offset = disp + (ADIO_Offset) n_filetypes*filetype_extent +
|
||||||
abs_off_in_filetype;
|
abs_off_in_filetype;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,7 +342,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
offset, status, error_code);
|
offset, status, error_code);
|
||||||
|
|
||||||
if (file_ptr_type == ADIO_INDIVIDUAL) {
|
if (file_ptr_type == ADIO_INDIVIDUAL) {
|
||||||
/* update MPI-IO file pointer to point to the first byte that
|
/* update MPI-IO file pointer to point to the first byte that
|
||||||
* can be accessed in the fileview. */
|
* can be accessed in the fileview. */
|
||||||
fd->fp_ind = offset + bufsize;
|
fd->fp_ind = offset + bufsize;
|
||||||
if (bufsize == frd_size) {
|
if (bufsize == frd_size) {
|
||||||
@ -348,10 +357,10 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
+ n_filetypes*filetype_extent;
|
+ n_filetypes*filetype_extent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fd->fp_sys_posn = -1; /* set it to null. */
|
fd->fp_sys_posn = -1; /* set it to null. */
|
||||||
#ifdef HAVE_STATUS_SET_BYTES
|
#ifdef HAVE_STATUS_SET_BYTES
|
||||||
MPIR_Status_set_bytes(status, datatype, bufsize);
|
MPIR_Status_set_bytes(status, datatype, bufsize);
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -417,9 +426,9 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
n_filetypes = st_n_filetypes;
|
n_filetypes = st_n_filetypes;
|
||||||
frd_size = ADIOI_MIN(st_frd_size, bufsize);
|
frd_size = ADIOI_MIN(st_frd_size, bufsize);
|
||||||
while (i < bufsize) {
|
while (i < bufsize) {
|
||||||
if (frd_size) {
|
if (frd_size) {
|
||||||
/* TYPE_UB and TYPE_LB can result in
|
/* TYPE_UB and TYPE_LB can result in
|
||||||
frd_size = 0. save system call in such cases */
|
frd_size = 0. save system call in such cases */
|
||||||
/* lseek(fd->fd_sys, off, SEEK_SET);
|
/* lseek(fd->fd_sys, off, SEEK_SET);
|
||||||
err = read(fd->fd_sys, ((char *) buf) + i, frd_size);*/
|
err = read(fd->fd_sys, ((char *) buf) + i, frd_size);*/
|
||||||
|
|
||||||
@ -442,7 +451,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
j = (j+1) % flat_file->count;
|
j = (j+1) % flat_file->count;
|
||||||
n_filetypes += (j == 0) ? 1 : 0;
|
n_filetypes += (j == 0) ? 1 : 0;
|
||||||
}
|
}
|
||||||
off = disp + flat_file->indices[j] +
|
off = disp + flat_file->indices[j] +
|
||||||
(ADIO_Offset) n_filetypes*filetype_extent;
|
(ADIO_Offset) n_filetypes*filetype_extent;
|
||||||
frd_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
|
frd_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
|
||||||
}
|
}
|
||||||
@ -452,9 +461,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
/* noncontiguous in memory as well as in file */
|
/* noncontiguous in memory as well as in file */
|
||||||
|
|
||||||
ADIO_Offset i;
|
ADIO_Offset i;
|
||||||
ADIOI_Flatten_datatype(datatype);
|
flat_buf = ADIOI_Flatten_and_find(datatype);
|
||||||
flat_buf = ADIOI_Flatlist;
|
|
||||||
while (flat_buf->type != datatype) flat_buf = flat_buf->next;
|
|
||||||
|
|
||||||
k = num = buf_count = 0;
|
k = num = buf_count = 0;
|
||||||
i = flat_buf->indices[0];
|
i = flat_buf->indices[0];
|
||||||
@ -487,7 +494,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
j = (j+1) % flat_file->count;
|
j = (j+1) % flat_file->count;
|
||||||
n_filetypes += (j == 0) ? 1 : 0;
|
n_filetypes += (j == 0) ? 1 : 0;
|
||||||
}
|
}
|
||||||
off = disp + flat_file->indices[j] +
|
off = disp + flat_file->indices[j] +
|
||||||
(ADIO_Offset) n_filetypes*filetype_extent;
|
(ADIO_Offset) n_filetypes*filetype_extent;
|
||||||
|
|
||||||
new_frd_size = flat_file->blocklens[j];
|
new_frd_size = flat_file->blocklens[j];
|
||||||
@ -515,7 +522,7 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
brd_size = new_brd_size;
|
brd_size = new_brd_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd->atomicity)
|
if (fd->atomicity)
|
||||||
ADIOI_UNLOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
|
ADIOI_UNLOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
|
||||||
|
|
||||||
@ -536,8 +543,8 @@ void ADIOI_NFS_ReadStrided(ADIO_File fd, void *buf, int count,
|
|||||||
|
|
||||||
#ifdef HAVE_STATUS_SET_BYTES
|
#ifdef HAVE_STATUS_SET_BYTES
|
||||||
MPIR_Status_set_bytes(status, datatype, bufsize);
|
MPIR_Status_set_bytes(status, datatype, bufsize);
|
||||||
/* This is a temporary way of filling in status. The right way is to
|
/* This is a temporary way of filling in status. The right way is to
|
||||||
keep track of how much data was actually read and placed in buf
|
keep track of how much data was actually read and placed in buf
|
||||||
by ADIOI_BUFFERED_READ. */
|
by ADIOI_BUFFERED_READ. */
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2004 University of Chicago.
|
* Copyright (C) 2004 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1,17 +1,17 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ad_nfs.h"
|
#include "ad_nfs.h"
|
||||||
|
|
||||||
/* set the shared file pointer to "offset" etypes relative to the current
|
/* set the shared file pointer to "offset" etypes relative to the current
|
||||||
view */
|
view */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
This looks very similar to ADIOI_GEN_Set_shared_fp, except this
|
This looks very similar to ADIOI_GEN_Set_shared_fp, except this
|
||||||
function avoids locking the file twice. The generic version does
|
function avoids locking the file twice. The generic version does
|
||||||
|
|
||||||
Write lock
|
Write lock
|
||||||
@ -24,7 +24,7 @@ caching. To avoid the lock being called twice, this version for NFS does
|
|||||||
Write lock
|
Write lock
|
||||||
Lseek
|
Lseek
|
||||||
Write
|
Write
|
||||||
Unlock
|
Unlock
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -37,10 +37,10 @@ void ADIOI_NFS_Set_shared_fp(ADIO_File fd, ADIO_Offset offset, int *error_code)
|
|||||||
if (fd->shared_fp_fd == ADIO_FILE_NULL) {
|
if (fd->shared_fp_fd == ADIO_FILE_NULL) {
|
||||||
MPI_Comm_dup(MPI_COMM_SELF, &dupcommself);
|
MPI_Comm_dup(MPI_COMM_SELF, &dupcommself);
|
||||||
fd->shared_fp_fd = ADIO_Open(MPI_COMM_SELF, dupcommself,
|
fd->shared_fp_fd = ADIO_Open(MPI_COMM_SELF, dupcommself,
|
||||||
fd->shared_fp_fname,
|
fd->shared_fp_fname,
|
||||||
fd->file_system, fd->fns,
|
fd->file_system, fd->fns,
|
||||||
ADIO_CREATE | ADIO_RDWR | ADIO_DELETE_ON_CLOSE,
|
ADIO_CREATE | ADIO_RDWR | ADIO_DELETE_ON_CLOSE,
|
||||||
0, MPI_BYTE, MPI_BYTE, MPI_INFO_NULL,
|
0, MPI_BYTE, MPI_BYTE, MPI_INFO_NULL,
|
||||||
ADIO_PERM_NULL, error_code);
|
ADIO_PERM_NULL, error_code);
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1,70 +1,82 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "ad_nfs.h"
|
#include "ad_nfs.h"
|
||||||
#include "adio_extern.h"
|
#include "adio_extern.h"
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
#include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
|
void ADIOI_NFS_WriteContig(ADIO_File fd, const void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int *error_code)
|
ADIO_Offset offset, ADIO_Status *status, int *error_code)
|
||||||
{
|
{
|
||||||
ssize_t err=-1;
|
int err=-1;
|
||||||
MPI_Count datatype_size, len;
|
MPI_Count datatype_size, len;
|
||||||
ADIO_Offset bytes_xfered=0;
|
|
||||||
size_t wr_count;
|
|
||||||
static char myname[] = "ADIOI_NFS_WRITECONTIG";
|
static char myname[] = "ADIOI_NFS_WRITECONTIG";
|
||||||
char *p;
|
|
||||||
|
|
||||||
MPI_Type_size_x(datatype, &datatype_size);
|
MPI_Type_size_x(datatype, &datatype_size);
|
||||||
len = datatype_size * (ADIO_Offset)count;
|
len = datatype_size * count;
|
||||||
|
|
||||||
if (file_ptr_type == ADIO_INDIVIDUAL) {
|
if (file_ptr_type == ADIO_EXPLICIT_OFFSET) {
|
||||||
offset = fd->fp_ind;
|
if (fd->fp_sys_posn != offset) {
|
||||||
}
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
|
||||||
p = (char *)buf;
|
#endif
|
||||||
while (bytes_xfered < len) {
|
lseek(fd->fd_sys, offset, SEEK_SET);
|
||||||
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
ADIOI_WRITE_LOCK(fd, offset, SEEK_SET, len);
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
wr_count = len - bytes_xfered;
|
err = write(fd->fd_sys, buf, len);
|
||||||
/* work around FreeBSD and OS X defects*/
|
|
||||||
if (wr_count > INT_MAX)
|
|
||||||
wr_count = INT_MAX;
|
|
||||||
|
|
||||||
ADIOI_WRITE_LOCK(fd, offset+bytes_xfered, SEEK_SET, wr_count);
|
|
||||||
err = pwrite(fd->fd_sys, p, wr_count, offset+bytes_xfered);
|
|
||||||
/* --BEGIN ERROR HANDLING-- */
|
|
||||||
if (err == -1) {
|
|
||||||
*error_code = MPIO_Err_create_code(MPI_SUCCESS,
|
|
||||||
MPIR_ERR_RECOVERABLE,
|
|
||||||
myname, __LINE__, MPI_ERR_IO, "**io",
|
|
||||||
"**io %s", strerror(errno));
|
|
||||||
fd->fp_sys_posn = -1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* --END ERROR HANDLING-- */
|
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
ADIOI_UNLOCK(fd, offset+bytes_xfered, SEEK_SET, wr_count);
|
ADIOI_UNLOCK(fd, offset, SEEK_SET, len);
|
||||||
bytes_xfered += err;
|
fd->fp_sys_posn = offset + err;
|
||||||
p += err;
|
/* individual file pointer not updated */
|
||||||
|
}
|
||||||
|
else { /* write from curr. location of ind. file pointer */
|
||||||
|
offset = fd->fp_ind;
|
||||||
|
if (fd->fp_sys_posn != fd->fp_ind) {
|
||||||
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
|
||||||
|
#endif
|
||||||
|
lseek(fd->fd_sys, fd->fp_ind, SEEK_SET);
|
||||||
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
ADIOI_WRITE_LOCK(fd, offset, SEEK_SET, len);
|
||||||
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
|
||||||
|
#endif
|
||||||
|
err = write(fd->fd_sys, buf, len);
|
||||||
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
|
MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
|
||||||
|
#endif
|
||||||
|
ADIOI_UNLOCK(fd, offset, SEEK_SET, len);
|
||||||
|
fd->fp_ind += err;
|
||||||
|
fd->fp_sys_posn = fd->fp_ind;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_ptr_type == ADIO_INDIVIDUAL) {
|
/* --BEGIN ERROR HANDLING-- */
|
||||||
fd->fp_ind += bytes_xfered;
|
if (err == -1) {
|
||||||
|
*error_code = MPIO_Err_create_code(MPI_SUCCESS, MPIR_ERR_RECOVERABLE,
|
||||||
|
myname, __LINE__, MPI_ERR_IO,
|
||||||
|
"**io",
|
||||||
|
"**io %s", strerror(errno));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
/* --END ERROR HANDLING-- */
|
||||||
|
|
||||||
#ifdef HAVE_STATUS_SET_BYTES
|
#ifdef HAVE_STATUS_SET_BYTES
|
||||||
MPIR_Status_set_bytes(status, datatype, bytes_xfered);
|
MPIR_Status_set_bytes(status, datatype, err);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
*error_code = MPI_SUCCESS;
|
*error_code = MPI_SUCCESS;
|
||||||
@ -267,7 +279,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
ADIO_Offset abs_off_in_filetype=0;
|
ADIO_Offset abs_off_in_filetype=0;
|
||||||
int req_len;
|
int req_len;
|
||||||
MPI_Count filetype_size, etype_size, buftype_size;
|
MPI_Count filetype_size, etype_size, buftype_size;
|
||||||
MPI_Aint filetype_extent, buftype_extent, lb;
|
MPI_Aint filetype_extent, buftype_extent, lb;
|
||||||
int buf_count, buftype_is_contig, filetype_is_contig;
|
int buf_count, buftype_is_contig, filetype_is_contig;
|
||||||
ADIO_Offset userbuf_off;
|
ADIO_Offset userbuf_off;
|
||||||
ADIO_Offset off, req_off, disp, end_offset=0, writebuf_off, start_off;
|
ADIO_Offset off, req_off, disp, end_offset=0, writebuf_off, start_off;
|
||||||
@ -285,7 +297,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
#ifdef HAVE_STATUS_SET_BYTES
|
#ifdef HAVE_STATUS_SET_BYTES
|
||||||
MPIR_Status_set_bytes(status, datatype, 0);
|
MPIR_Status_set_bytes(status, datatype, 0);
|
||||||
#endif
|
#endif
|
||||||
*error_code = MPI_SUCCESS;
|
*error_code = MPI_SUCCESS;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,7 +311,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
/* get max_bufsize from the info object. */
|
/* get max_bufsize from the info object. */
|
||||||
|
|
||||||
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
|
value = (char *) ADIOI_Malloc((MPI_MAX_INFO_VAL+1)*sizeof(char));
|
||||||
ADIOI_Info_get(fd->info, "ind_wr_buffer_size", MPI_MAX_INFO_VAL, value,
|
ADIOI_Info_get(fd->info, "ind_wr_buffer_size", MPI_MAX_INFO_VAL, value,
|
||||||
&info_flag);
|
&info_flag);
|
||||||
max_bufsize = atoi(value);
|
max_bufsize = atoi(value);
|
||||||
ADIOI_Free(value);
|
ADIOI_Free(value);
|
||||||
@ -308,11 +320,9 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
|
|
||||||
/* noncontiguous in memory, contiguous in file. */
|
/* noncontiguous in memory, contiguous in file. */
|
||||||
|
|
||||||
ADIOI_Flatten_datatype(datatype);
|
flat_buf = ADIOI_Flatten_and_find(datatype);
|
||||||
flat_buf = ADIOI_Flatlist;
|
|
||||||
while (flat_buf->type != datatype) flat_buf = flat_buf->next;
|
|
||||||
|
|
||||||
off = (file_ptr_type == ADIO_INDIVIDUAL) ? fd->fp_ind :
|
off = (file_ptr_type == ADIO_INDIVIDUAL) ? fd->fp_ind :
|
||||||
fd->disp + etype_size * offset;
|
fd->disp + etype_size * offset;
|
||||||
|
|
||||||
start_off = off;
|
start_off = off;
|
||||||
@ -322,10 +332,10 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));
|
writebuf_len = (int) (ADIOI_MIN(max_bufsize,end_offset-writebuf_off+1));
|
||||||
|
|
||||||
/* if atomicity is true, lock the region to be accessed */
|
/* if atomicity is true, lock the region to be accessed */
|
||||||
if (fd->atomicity)
|
if (fd->atomicity)
|
||||||
ADIOI_WRITE_LOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
|
ADIOI_WRITE_LOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
|
||||||
|
|
||||||
for (j=0; j<count; j++)
|
for (j=0; j<count; j++)
|
||||||
for (i=0; i<flat_buf->count; i++) {
|
for (i=0; i<flat_buf->count; i++) {
|
||||||
userbuf_off = j*buftype_extent + flat_buf->indices[i];
|
userbuf_off = j*buftype_extent + flat_buf->indices[i];
|
||||||
req_off = off;
|
req_off = off;
|
||||||
@ -338,7 +348,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
lseek(fd->fd_sys, writebuf_off, SEEK_SET);
|
lseek(fd->fd_sys, writebuf_off, SEEK_SET);
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
@ -346,14 +356,14 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
err = write(fd->fd_sys, writebuf, writebuf_len);
|
err = write(fd->fd_sys, writebuf, writebuf_len);
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
if (!(fd->atomicity)) ADIOI_UNLOCK(fd, writebuf_off, SEEK_SET, writebuf_len);
|
if (!(fd->atomicity)) ADIOI_UNLOCK(fd, writebuf_off, SEEK_SET, writebuf_len);
|
||||||
if (err == -1) err_flag = 1;
|
if (err == -1) err_flag = 1;
|
||||||
|
|
||||||
if (fd->atomicity)
|
if (fd->atomicity)
|
||||||
ADIOI_UNLOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
|
ADIOI_UNLOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
|
||||||
|
|
||||||
if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
|
if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
|
||||||
@ -405,7 +415,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
n_filetypes = (int) (offset / n_etypes_in_filetype);
|
n_filetypes = (int) (offset / n_etypes_in_filetype);
|
||||||
etype_in_filetype = (int) (offset % n_etypes_in_filetype);
|
etype_in_filetype = (int) (offset % n_etypes_in_filetype);
|
||||||
size_in_filetype = etype_in_filetype * etype_size;
|
size_in_filetype = etype_in_filetype * etype_size;
|
||||||
|
|
||||||
sum = 0;
|
sum = 0;
|
||||||
for (i=0; i<flat_file->count; i++) {
|
for (i=0; i<flat_file->count; i++) {
|
||||||
sum += flat_file->blocklens[i];
|
sum += flat_file->blocklens[i];
|
||||||
@ -419,7 +429,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* abs. offset in bytes in the file */
|
/* abs. offset in bytes in the file */
|
||||||
offset = disp + (ADIO_Offset) n_filetypes*filetype_extent +
|
offset = disp + (ADIO_Offset) n_filetypes*filetype_extent +
|
||||||
abs_off_in_filetype;
|
abs_off_in_filetype;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,7 +442,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
offset, status, error_code);
|
offset, status, error_code);
|
||||||
|
|
||||||
if (file_ptr_type == ADIO_INDIVIDUAL) {
|
if (file_ptr_type == ADIO_INDIVIDUAL) {
|
||||||
/* update MPI-IO file pointer to point to the first byte
|
/* update MPI-IO file pointer to point to the first byte
|
||||||
* that can be accessed in the fileview. */
|
* that can be accessed in the fileview. */
|
||||||
fd->fp_ind = offset + bufsize;
|
fd->fp_ind = offset + bufsize;
|
||||||
if (bufsize == fwr_size) {
|
if (bufsize == fwr_size) {
|
||||||
@ -447,10 +457,10 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
+ (ADIO_Offset)n_filetypes*filetype_extent;
|
+ (ADIO_Offset)n_filetypes*filetype_extent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fd->fp_sys_posn = -1; /* set it to null. */
|
fd->fp_sys_posn = -1; /* set it to null. */
|
||||||
#ifdef HAVE_STATUS_SET_BYTES
|
#ifdef HAVE_STATUS_SET_BYTES
|
||||||
MPIR_Status_set_bytes(status, datatype, bufsize);
|
MPIR_Status_set_bytes(status, datatype, bufsize);
|
||||||
#endif
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -473,13 +483,13 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
n_filetypes += (j == 0) ? 1 : 0;
|
n_filetypes += (j == 0) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
off = disp + flat_file->indices[j] +
|
off = disp + flat_file->indices[j] +
|
||||||
(ADIO_Offset) n_filetypes*filetype_extent;
|
(ADIO_Offset) n_filetypes*filetype_extent;
|
||||||
fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
|
fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if atomicity is true, lock the region to be accessed */
|
/* if atomicity is true, lock the region to be accessed */
|
||||||
if (fd->atomicity)
|
if (fd->atomicity)
|
||||||
ADIOI_WRITE_LOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
|
ADIOI_WRITE_LOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
|
||||||
|
|
||||||
/* initial read for the read-modify-write */
|
/* initial read for the read-modify-write */
|
||||||
@ -490,14 +500,14 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
lseek(fd->fd_sys, writebuf_off, SEEK_SET);
|
lseek(fd->fd_sys, writebuf_off, SEEK_SET);
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_read_a, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
err = read(fd->fd_sys, writebuf, writebuf_len);
|
err = read(fd->fd_sys, writebuf, writebuf_len);
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_read_b, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
@ -521,9 +531,9 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
n_filetypes = st_n_filetypes;
|
n_filetypes = st_n_filetypes;
|
||||||
fwr_size = ADIOI_MIN(st_fwr_size, bufsize);
|
fwr_size = ADIOI_MIN(st_fwr_size, bufsize);
|
||||||
while (i < bufsize) {
|
while (i < bufsize) {
|
||||||
if (fwr_size) {
|
if (fwr_size) {
|
||||||
/* TYPE_UB and TYPE_LB can result in
|
/* TYPE_UB and TYPE_LB can result in
|
||||||
fwr_size = 0. save system call in such cases */
|
fwr_size = 0. save system call in such cases */
|
||||||
/* lseek(fd->fd_sys, off, SEEK_SET);
|
/* lseek(fd->fd_sys, off, SEEK_SET);
|
||||||
err = write(fd->fd_sys, ((char *) buf) + i, fwr_size);*/
|
err = write(fd->fd_sys, ((char *) buf) + i, fwr_size);*/
|
||||||
|
|
||||||
@ -546,7 +556,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
j = (j+1) % flat_file->count;
|
j = (j+1) % flat_file->count;
|
||||||
n_filetypes += (j == 0) ? 1 : 0;
|
n_filetypes += (j == 0) ? 1 : 0;
|
||||||
}
|
}
|
||||||
off = disp + flat_file->indices[j] +
|
off = disp + flat_file->indices[j] +
|
||||||
(ADIO_Offset) n_filetypes*filetype_extent;
|
(ADIO_Offset) n_filetypes*filetype_extent;
|
||||||
fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
|
fwr_size = ADIOI_MIN(flat_file->blocklens[j], bufsize-i);
|
||||||
}
|
}
|
||||||
@ -555,10 +565,8 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
else {
|
else {
|
||||||
/* noncontiguous in memory as well as in file */
|
/* noncontiguous in memory as well as in file */
|
||||||
|
|
||||||
ADIO_Offset i;
|
ADIO_Offset i;
|
||||||
ADIOI_Flatten_datatype(datatype);
|
flat_buf = ADIOI_Flatten_and_find(datatype);
|
||||||
flat_buf = ADIOI_Flatlist;
|
|
||||||
while (flat_buf->type != datatype) flat_buf = flat_buf->next;
|
|
||||||
|
|
||||||
k = num = buf_count = 0;
|
k = num = buf_count = 0;
|
||||||
i = flat_buf->indices[0];
|
i = flat_buf->indices[0];
|
||||||
@ -592,7 +600,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
n_filetypes += (j == 0) ? 1 : 0;
|
n_filetypes += (j == 0) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
off = disp + flat_file->indices[j] +
|
off = disp + flat_file->indices[j] +
|
||||||
(ADIO_Offset) n_filetypes*filetype_extent;
|
(ADIO_Offset) n_filetypes*filetype_extent;
|
||||||
|
|
||||||
new_fwr_size = flat_file->blocklens[j];
|
new_fwr_size = flat_file->blocklens[j];
|
||||||
@ -621,11 +629,11 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* write the buffer out finally */
|
/* write the buffer out finally */
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_lseek_a, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
lseek(fd->fd_sys, writebuf_off, SEEK_SET);
|
lseek(fd->fd_sys, writebuf_off, SEEK_SET);
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_lseek_b, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
@ -633,7 +641,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_write_a, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
err = write(fd->fd_sys, writebuf, writebuf_len);
|
err = write(fd->fd_sys, writebuf, writebuf_len);
|
||||||
#ifdef ADIOI_MPE_LOGGING
|
#ifdef ADIOI_MPE_LOGGING
|
||||||
MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
|
MPE_Log_event( ADIOI_MPE_write_b, 0, NULL );
|
||||||
#endif
|
#endif
|
||||||
@ -642,7 +650,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
ADIOI_UNLOCK(fd, writebuf_off, SEEK_SET, writebuf_len);
|
ADIOI_UNLOCK(fd, writebuf_off, SEEK_SET, writebuf_len);
|
||||||
else ADIOI_UNLOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
|
else ADIOI_UNLOCK(fd, start_off, SEEK_SET, end_offset-start_off+1);
|
||||||
|
|
||||||
if (err == -1) err_flag = 1;
|
if (err == -1) err_flag = 1;
|
||||||
|
|
||||||
if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
|
if (file_ptr_type == ADIO_INDIVIDUAL) fd->fp_ind = off;
|
||||||
if (err_flag) {
|
if (err_flag) {
|
||||||
@ -658,7 +666,7 @@ void ADIOI_NFS_WriteStrided(ADIO_File fd, const void *buf, int count,
|
|||||||
|
|
||||||
#ifdef HAVE_STATUS_SET_BYTES
|
#ifdef HAVE_STATUS_SET_BYTES
|
||||||
MPIR_Status_set_bytes(status, datatype, bufsize);
|
MPIR_Status_set_bytes(status, datatype, bufsize);
|
||||||
/* This is a temporary way of filling in status. The right way is to
|
/* This is a temporary way of filling in status. The right way is to
|
||||||
keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
|
keep track of how much data was actually written by ADIOI_BUFFERED_WRITE. */
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 2001 University of Chicago.
|
* Copyright (C) 2001 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -34,5 +34,7 @@ struct ADIOI_Fns_struct ADIO_NTFS_operations = {
|
|||||||
ADIOI_NTFS_Flush, /* Flush */
|
ADIOI_NTFS_Flush, /* Flush */
|
||||||
ADIOI_NTFS_Resize, /* Resize */
|
ADIOI_NTFS_Resize, /* Resize */
|
||||||
ADIOI_GEN_Delete, /* Delete */
|
ADIOI_GEN_Delete, /* Delete */
|
||||||
ADIOI_NTFS_Feature /* Features */
|
ADIOI_NTFS_Feature, /* Features */
|
||||||
|
ADIOI_GEN_IreadStridedColl, /* IreadStridedColl */
|
||||||
|
ADIOI_GEN_IwriteStridedColl /* IwriteStridedColl */
|
||||||
};
|
};
|
@ -1,8 +1,8 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -28,32 +28,32 @@ int ADIOI_NTFS_aio(ADIO_File fd, void *buf, int len, ADIO_Offset offset,
|
|||||||
|
|
||||||
void ADIOI_NTFS_Open(ADIO_File fd, int *error_code);
|
void ADIOI_NTFS_Open(ADIO_File fd, int *error_code);
|
||||||
void ADIOI_NTFS_Close(ADIO_File fd, int *error_code);
|
void ADIOI_NTFS_Close(ADIO_File fd, int *error_code);
|
||||||
void ADIOI_NTFS_ReadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_NTFS_ReadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NTFS_WriteContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_NTFS_WriteContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Status *status, int
|
ADIO_Offset offset, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NTFS_IwriteContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_NTFS_IwriteContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Request *request, int
|
ADIO_Offset offset, ADIO_Request *request, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NTFS_IreadContig(ADIO_File fd, void *buf, int count,
|
void ADIOI_NTFS_IreadContig(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Request *request, int
|
ADIO_Offset offset, ADIO_Request *request, int
|
||||||
*error_code);
|
*error_code);
|
||||||
int ADIOI_NTFS_ReadDone(ADIO_Request *request, ADIO_Status *status, int
|
int ADIOI_NTFS_ReadDone(ADIO_Request *request, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
int ADIOI_NTFS_WriteDone(ADIO_Request *request, ADIO_Status *status, int
|
int ADIOI_NTFS_WriteDone(ADIO_Request *request, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NTFS_ReadComplete(ADIO_Request *request, ADIO_Status *status, int
|
void ADIOI_NTFS_ReadComplete(ADIO_Request *request, ADIO_Status *status, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NTFS_WriteComplete(ADIO_Request *request, ADIO_Status *status,
|
void ADIOI_NTFS_WriteComplete(ADIO_Request *request, ADIO_Status *status,
|
||||||
int *error_code);
|
int *error_code);
|
||||||
void ADIOI_NTFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
|
void ADIOI_NTFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int
|
||||||
*error_code);
|
*error_code);
|
||||||
void ADIOI_NTFS_IwriteStrided(ADIO_File fd, void *buf, int count,
|
void ADIOI_NTFS_IwriteStrided(ADIO_File fd, void *buf, int count,
|
||||||
MPI_Datatype datatype, int file_ptr_type,
|
MPI_Datatype datatype, int file_ptr_type,
|
||||||
ADIO_Offset offset, ADIO_Request *request, int
|
ADIO_Offset offset, ADIO_Request *request, int
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ void ADIOI_NTFS_Fcntl(ADIO_File fd, int flag, ADIO_Fcntl_t *fcntl_struct, int *e
|
|||||||
{
|
{
|
||||||
case ADIO_FCNTL_GET_FSIZE:
|
case ADIO_FCNTL_GET_FSIZE:
|
||||||
fcntl_struct->fsize = SetFilePointer(fd->fd_sys, 0, 0, FILE_END);
|
fcntl_struct->fsize = SetFilePointer(fd->fd_sys, 0, 0, FILE_END);
|
||||||
if (fd->fp_sys_posn != -1)
|
if (fd->fp_sys_posn != -1)
|
||||||
{
|
{
|
||||||
dwTemp = DWORDHIGH(fd->fp_sys_posn);
|
dwTemp = DWORDHIGH(fd->fp_sys_posn);
|
||||||
if (SetFilePointer(fd->fd_sys, DWORDLOW(fd->fp_sys_posn), &dwTemp, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
|
if (SetFilePointer(fd->fd_sys, DWORDLOW(fd->fp_sys_posn), &dwTemp, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
|
@ -1,7 +1,7 @@
|
|||||||
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
/* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
|
||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
* Copyright (C) 1997 University of Chicago.
|
* Copyright (C) 1997 University of Chicago.
|
||||||
* See COPYRIGHT notice in top-level directory.
|
* See COPYRIGHT notice in top-level directory.
|
||||||
*/
|
*/
|
||||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
x
Ссылка в новой задаче
Block a user