Commit Graph

33 Commits

Author SHA1 Message Date
Mohamad Chaarawi
cb6d2f2a45 [svn-r23165] HDFF-8203 Break H5FDmpi.h header into public and private components
https://jira.hdfgroup.uiuc.edu/browse/HDFFV-8203

tested: h5committest
2013-01-15 10:32:23 -05:00
Quincey Koziol
8a5e400fda [svn-r20588] Description:
Clean up code a bit, move new "terminate" VFD callback to new position
in H5FD_class_t struct.

Tested on:
    Mac OS X/32 10.6.7 (amazon) w/debug & production
    (h5committest not required on this branch)
2011-04-21 08:55:52 -05:00
Quincey Koziol
9f60f016ab [svn-r15800] Description:
Bring file free space branch changes through r15795 into trunk, which
includes a fair bit of code cleanup & rearrangement along with a couple of
bug fixes also.

Tested on:
        Mac OS X/32 10.5.5 (amazon) in debug mode
        Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
                                in production mode
        FreeBSD/32 6.3 (duty) in debug mode
        FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
        Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
                                in debug mode
        Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
                                w/C++ & FORTRAN, in production mode
        Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
                                w/szip filter, in production mode
        Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
                                in production mode
        Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
        Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-06 23:17:35 -05:00
Albert Cheng
ed7d456e51 [svn-r13253] Updated all C and C++ style source code files with the THG copyright notice.
Tested platform:
Kagiso only since it is only a comment block change.  If it works in one
machine, it should work in all, I hope.  Still need to check the parallel
build on copper.
2007-02-07 09:56:24 -05:00
MuQun Yang
6916816a56 [svn-r12553] This check-in includes the following part of parallel optimization codes:
1. Provide another option for users to do independent IO with MPI file setview(collectively)
2. With the request of collective IO from users, using Independent IO with MPI file setview if we find collective IO is not good for the applications for IO per chunk(multi-chunk IO) case. Previously we used pure independent IO and that actually performed small IO(IO each row) for this case. The recent performance study suggested the independent IO with file setview can acheieve significantly better performance than collective IO when not many processes participate in the IO.
3. For applications that explicitly choose to do collective IO per chunk case, the library won't do any optimization(gather/broadcast) operations. The library simply passes the collective IO request to MPI-IO. 

Tested at copper, kagiso, heping, mir and tungsten(cmpi and mpich)
Kagiso is using LAM, t_mpi test was broken even.
The cchunk10 test  failed at heping and mir. I suspected it was an MPICH problem. Will investigate later.
Everything passed at copper.
at tungsten: the old cmpi bug(failed at esetw) is still there. Other tests passed.
Some sequential fheap tests failed at kagiso.
2006-08-08 22:00:11 -05:00
MuQun Yang
a4c816eb75 [svn-r12090] Purpose:
New APIs to add for collective chunk IO

Description:
Three new APIs
H5Pset_dxpl_mpio_chunk_opt_ratio
H5Pset_dxpl_mpio_chunk_opt_num
H5Pset_dxpl_mpio_chunk_opt

for optional optimization choices from users.
Solution:
Haven't added tests yet, won't affect other parts of the library.
Will add tests after urgent investigations of memory leaking problems from NASA Aura team.
Platforms tested:
heping: both parallel and sequential
shanti
Misc. update:
2006-03-14 13:29:35 -05:00
Quincey Koziol
10382a1799 [svn-r8134] Purpose:
Code cleanup

Description:
    Add destructor to match constructor fr VFLs when they are shut down by the
library.

Solution:
    Added H5FD_*_term() routines to "undo" changes made in H5FD_*_init()
routines.

Platforms tested:
    IBM p690 (copper)
    too minor to require h5committest
2004-01-31 10:19:48 -05:00
Quincey Koziol
138bc92ebd [svn-r8126] Purpose:
Bug fix/optimization

Description:
    Address slowdown in MPI-I/O file metadata operations that was introduced
mid-stream.  We now _require_ a POSIX compliant parallel file system for the
MPI-I/O file driver (as well as for the MPI-POSIX file driver).
    Also optimized file open operation when the file is being created by
reducing the number of collective & syncronizing calls.
    Additionally, refactor the MPI routines into a common place, eliminating
duplicated code.

Platforms tested:
    FreeBSD 4.9 (sleipnir) w/parallel
    h5committest
2004-01-30 20:38:44 -05:00
Quincey Koziol
90e269d552 [svn-r7789] Purpose:
Bug fix & code cleanups

Description:
    Change our use of MPI derived datatypes to not create datatypes with
"0-sized" lengths, which causes the LANL Q machine to hang.

    Also, get rid of "prefer MPI derived datatypes" environment variable since
it has no advantage.

Platforms tested:
    FreeBSD 4.9 (sleipnir) w & w/o parallel
    h5committest
2003-10-29 14:32:36 -05:00
Bill Wendling
b5d7fa02a9 [svn-r6546] Purpose:
Update

Description:
    Updated copyright statement in files which hadn't been updated yet.

Platforms tested:
    Linux (Only comment change)

Misc. update:
2003-03-31 13:30:57 -05:00
Quincey Koziol
24d8506dd5 [svn-r6387] Purpose:
Bug Fix

Description:
    Metadata cache in parallel I/O can cause hangs in applications which
    perform independent I/O on chunked datasets, because the metadata cache
    can attempt to flush out dirty metadata from only a single process, instead
    of collectively from all processes.

Solution:
    Pass a dataset transfer property list down from every API function which
    could possibly trigger metadata I/O.

    Then, split the metadata cache into two sets of entries to allow dirty
    metadata to be set aside when a hash table collision occurs during
    independent I/O.

Platforms tested:
    Tested h5committest {arabica (fortran), eirene (fortran, C++)
        modi4 (parallel, fortran)}

    FreeBSD 4.7 (sleipnir) serial & parallel

Misc. update:
    Updated release_docs/RELEASE
2003-02-10 12:26:09 -05:00
MuQun Yang
e5b28ef37b [svn-r5931]
Purpose:
__DLL__ is a keyword in some platforms and __DLL__ is also defined as a macro for windows DLL applications.
That causes problems.
Description:
Solution:
Use H5_DLL*** to replace __DLL***__ at all header files.
Change the macro defination at H5api_adpt.h.
Platforms tested:
linux2.2.18smp, irix64, solaris 2.7 and windows 2000
2002-09-20 15:36:09 -05:00
Quincey Koziol
32b58cef08 [svn-r5894] Purpose:
Bug fix/Code cleanup/New Feature

Description:
    Correct problems with writing fill-values to external storage and allocate
    the data storage at the correct times.

    Also, mostly straighten out the strange code which allocates and fills
    raw data storage for datasets.  Things are still a bit odd in that the
    fill-values for chunked datasets are written when the space is allocated,
    instead of in a separate routine, but there are two reasons for this:
    it's inefficient (especially in parallel) to iterate through all the chunks
    twice, and (more importantly) the space needed to store compressed chunks
    isn't known until we've got a buffer of compressed fill-values ready to
    write to the chunk.

    Additionally, add in the H5D_SPACE_ALLOC_INCR and H5D_SPACE_ALLOC_DEFAULT
    setting for the "space time", which incorporate the previous behavior of
    the space allocation for chunked datasets.

    The default settings for the different types of dataset storage are now
    as follows:
        Contiguous - Late
        Chunked    - Incremental
        Compact    - Early

    This checkin also incorporates a change to the behavior of external data
    storage in two ways - fill-values are _never_ written to external storage
    (under the assumption that writing fill-values is triggered by allocating
    space in an HDF5 file, and since space is not allocated in the file, the
    fill-values should not be written) and external data files are now created
    if they don't exist when data is written to them.  The fill-value will
    probably need to be revisited at some time in the future, this just seemed
    like the safer course currently.

    I think I cleaned up some compiler errors also, before getting bogged down
    in the fixes for the space allocation and fill-values.

Platforms tested:
    FreeBSD 4.6 (sleipnir) w/serial & parallel.  Will be testing on IRIX64
    6.5 (modi4) in serial & parallel shortly.
2002-08-27 08:41:32 -05:00
Quincey Koziol
3659ae4176 [svn-r5677] Purpose:
Code improvement

Description:
    Some small code cleanups and took out the code the was turning off the
    metadata cache for parallel I/O (!)

Platforms tested:
    IRIX64 6.5 (modi4) w/parallel
2002-06-19 12:07:52 -05:00
Quincey Koziol
972707dcd3 [svn-r5660] Purpose:
Code optimization

Description:
    Avoid creating MPI types (and thus requiring a MPI_File_set_view() call)
    when contiguous selections are used for dataset I/O.  This should be a
    performance improvement for those sorts of selections.

Platforms tested:
    Linux 2.2.x (eirene) w/parallel && IRIX64 6.5 (modi4) w/parallel & FORTRAN
2002-06-18 09:02:17 -05:00
Quincey Koziol
15a916df4b [svn-r5652] Purpose:
Code cleanup

Description:
    Use dataset transfer property list to hold information about the MPI types
    for the current transfer, instead of setting pseudo-global variables in
    the file's struct.

Platforms tested:
    Linux 2.2.x (eirene) w/parallel & IRIX64 6.5 (modi4) w/parallel & FORTRAN
2002-06-17 11:38:43 -05:00
Quincey Koziol
2ae3f6b866 [svn-r5650] Purpose:
Code cleanup

Description:
    Change MPI-I/O code to use the address of the dataset for the displacement,
    instead of having a separate displacement value.  Removed displacement
    parameter from H5FD_mpio_setup parameters.

Platforms tested:
    Linux 2.2.x (eirene) w/parallel & IRIX64 6.5 (modi4) w/parallel.
2002-06-17 09:12:34 -05:00
Quincey Koziol
86170c3d00 [svn-r5440] Purpose:
New feature

Description:
    Add 'closing' parameter to H5FDflush and VFL "flush" functions, per
        http://hdf.ncsa.uiuc.edu/RFC/VFLFlush/VFLFlush.html

Platforms tested:
    IRIX64 6.5 (modi4)
2002-05-20 11:01:57 -05:00
Quincey Koziol
a6b4cba798 [svn-r5429] Purpose:
Bug fix/Code improvement.

Description:
    Currently, the chunk data allocation routine invoked to allocate space for
    the entire dataset is inefficient.  It writes out each chunk in the dataset,
    whether it is already allocated or not.  Additionally, this happens not
    only when it is created, but also anytime it is opened for writing, or the
    dataset is extended.  Worse, there's too much parallel I/O syncronization,
    which slows things down even more.

Solution:
    Only attempt to write out chunks that don't already exist.  Additionally,
    share the I/O writing between all the nodes, instead of writing everything
    with process 0.  Then, only block with MPI_Barrier if chunks were actually
    created.

Platforms tested:
    IRIX64 6.5 (modi4)
2002-05-17 07:53:46 -05:00
Quincey Koziol
c5a9d502a3 [svn-r5408] Purpose:
Performance enhancement

Description:
    Doing an MPI_File_sync() just before a file is closed causing a large
    performance loss.

Solution:
    Add flag to MPI file driver to avoid performance the MPI_File_sync() when
    the flag is set before a call to H5F_flush().

Platforms tested:
    IRIX64 6.5 (modi4)
2002-05-13 15:21:59 -05:00
Quincey Koziol
9815305745 [svn-r5390] Purpose:
Code cleanup

Description:
    The parallel I/O file driver is optimized to only write metadata with one
    process (and broadcast the results to the other processes).  This is
    currently enabled by a separate call to H5FD_mpio_tas_allsame() before
    each metadata write to the file.  This can easily lead to problems where
    the prelude function call is omitted before the actual write code or, in
    a threaded environment, lead to race condititions where the value set is
    reset before being used.

Solution:
    Since we only want to write metadata from one process, key off of the 'type'
    parameter (which has information about whether the data being written it
    metadata or raw data) to H5FD_mpio_write() as the method for determining
    whether to only write from one process or not.

Platforms tested:
    IRIX64 6.5 (modi4)
2002-05-10 12:11:06 -05:00
Albert Cheng
88b91373d6 [svn-r3955] Purpose:
Bug fix
Description:
    This file is not C++ friendly/compliant because the protocols
    are not bracketed by the #ifdef __cplusplus macro.  This was
    discovered by a user attempting to use C++ with enable-parallel.
Solution:
    Though we are not supporting C++ in parallel mode yet, it is
    simple to add the macro bracket.  It would help if C++ is supported
    in the future.
Platforms tested:
    modi4 (64,n32) and eirene (mpich).
2001-06-01 11:18:01 -05:00
Bill Wendling
5e483d0184 [svn-r3781] Purpose:
Update
Description:
    Changed

        #include <hdf_file.h>

    construct to

        #include "hdf_file.h"

    so that the GNU compiler can more easily pick up the dependencies
    which it places in the .depend and Dependencies files. Also
    regenerated the Dependencies to go along with this.
Platforms tested:
    Linux
2001-04-05 12:29:14 -05:00
Quincey Koziol
4643449966 [svn-r2656] Purpose:
Bug Fix
Description:
    When parallel I/O is turned on, there were some macros used in the H5D
    routines which poked around in the H5F_t structure.  This breaks the
    privacy of that structure and ties the H5D code too tightly to the H5F_t
    struct.
Solution:
    Added a small function to retrieve the the value (driver_id) needed from
    the H5F_t function.
Platforms tested:
    Eyeballed only, Albert needs this right away...
2000-10-10 14:55:09 -05:00
Albert Cheng
408574794a [svn-r2100] Turn on H5FDmpio_debug if H5F_DEBUG is on. 2000-04-10 13:22:10 -05:00
Albert Cheng
e2c95c478a [svn-r2057] Purpose:
Bug fix for parallel mode.
Description:
    H5FD_mpio_tas_allsame was called for all cases, even when
    MPIO is not used for access.  That corrupted the internal
    file handle structure.
Solution:
    Define a macro, IS_H5FD_MPIO(f), for testing if f is opened with
    MPIO access.  Will call H5FD_mpio_tas_allsame only if this
    condition is true.
Platform tested:
    O2K, both -64 and -n32 modes.
2000-03-23 21:12:44 -05:00
Albert Cheng
5dbf1ef375 [svn-r1844] Changed to use the H5_HAVE_PARALLEL macro names. 1999-11-22 13:08:32 -05:00
Albert Cheng
69fc209302 [svn-r1787] Removed CVS merged warnings stuff that got check in by mistake. 1999-10-22 19:10:02 -05:00
Robb Matzke
bdf0dbf7ed [svn-r1697] Changes since 19990915
----------------------

./src/H5public.h
	We undefine a bunch of things that could get redefined in the config
	file because some customers have applications that include headers
	from multiple packages, all of which might be using autoconf.

	Include <stdint.h> for the C9x types.

./test/h5test.h
	More flushing of stdout for when testing is redirected down a pipe.

./tools/h5ls.c
	Added a `-S' or `--simple' switch which causes the output to be
	simplified somewhat for easier parsing by other scripts. For instance,
	characters are escaped using a very simple mechanism instead of C's
	more complicated backslash notation, data doesn't have `{}' or `[]'
	characters interspersed for compound and array types, and data is
	printed with exactly one element per line.  This switch is now used by
	an HDF5-to-HTML CGI script being developed for the DMF people.

./tools/h5tools.c
./tools/h5tools.h
	The repeat threshold which controls how strings are printed when a
	character repeats a bunch of times is now settable at runtime instead
	of compile time. The default is to show all characters, like

	   "abceeeeeeeeeeeeeeeeeeeeeeeeeeeeeefgh"

	But if you set it to something like 5 then any sequence of 5 or more
	characters is replaced by something shorter, like:

	   "abc" 'e'x30 "fgh"	  or

	Added an `str_locale' property which describes how to escape special
	characters in strings. The default is C-like escapes but an
	alternative is ESCAPE_HTML which replaces all non-alphanumeric
	characters with a 3-character HTML escape of the form `%XX'

	Fixed a bug where empty strings didn't even have the quote characters
	printed. Now empty strings show up as `""' instead of absolutely
	nothing.

	Added a `per_line' property which controls the maximum number of
	elements which will appear per line of output. The default is infinity
	but in practice the right margin causes line breaks. By setting the
	`per_line' value to one and the right margin to a very large value one
	can achieve output with exactly one element per line.
1999-09-30 11:14:14 -05:00
Albert Cheng
cb0a0eb41e [svn-r1627] Cleanup some minor bugs in the MPIO file-driver ported by Robb.
It is working now.  Still need to tie up some loose ends.
1999-09-02 19:15:57 -05:00
Patrick Lu
27e31d9c26 [svn-r1616] added __DLL__ in front of all the function prototypes so the dll can see it: 1999-08-30 11:08:21 -05:00
Robb Matzke
42d5453fe1 [svn-r1574] Changes since 19990817
----------------------

./src/H5D.c
./src/H5F.c
./src/H5FDmpio.c
./src/H5Fistore.c
./src/H5Fprivate.h
./src/H5Smpio.c
	The `driver_id' for a file was accidently put in two
	structs. I removed it from the H5F_file_t struct since it's
	really an attribute of the VFL stuff.

	More careful incrementing/decrementing the driver ID to fix a
	memory leak.

./src/H5P.c
	Rewrote H5Pcreate() in terms of H5P_copy() of a default
	property list. This fixes some referencing counting bugs.
1999-08-18 13:28:06 -05:00
Robb Matzke
cbf68fc824 [svn-r1568] Changes since 19990730
----------------------

This extensive change is the virtual file layer implementation. I've
ported and tested the sec2, family, and core drivers and only ported
the mpio driver (Albert will test it).  So if you need MPIO I would
recommend sticking with the previous version for a while.

You will get a few compile warnings about split and stdio drivers not
being implemented and possibly tracing information not inserted in
some of the drivers. You can safely ignore them but I plan to fix
them.

I'm still working on the split driver because I just realized that it
needs a part of the VFL that isn't written yet.

Documentation is being updated also because there were some minor
changes (mostly just name changes). It should be available on my web
site later this week.

./MANIFEST
./src/Makefile.in
./src/hdf5.h
./src/H5Flow.c			[REMOVED]
./src/H5Fstdio.c		[REMOVED]
./src/H5Fsec2.c			[REMOVED]
./src/H5Fsplit.c		[REMOVED]
./src/H5Fmpio.c			[REMOVED]
./src/H5Ffamily.c		[REMOVED]
./src/H5Fcore.c			[REMOVED]
./src/H5MFpublic.h		[REMOVED]
./src/H5FD.c			[NEW]
./src/H5FDcore.c		[NEW]
./src/H5FDcore.h		[NEW]
./src/H5FDfamily.c		[NEW]
./src/H5FDfamily.h		[NEW]
./src/H5FDmpio.c		[NEW]
./src/H5FDmpio.h		[NEW]
./src/H5FDprivate.h		[NEW]
./src/H5FDpublic.h		[NEW]
./src/H5FDsec2.c		[NEW]
./src/H5FDsec2.h		[NEW]
	Removed/added files for virtual file layer.

./bin/trace
./src/H5.c
	Removed unused public datatypes and added new VFL public
	datatypes.

	Changed an error message.

./config/BlankForm
./config/dec-flags
./config/gnu-flags
./config/hpux10.20
./config/hpux9.03
./config/irix5.x
./config/irix6.x
./config/solaris2.x
./config/unicosmk
	Removed the H5F_OPT_SEEK and H5F_LOW_DFLT constants from the
	configuration since they're no longer applicable. The default
	file driver is always the sec2 driver and it always optimizes
	calls to lseek() or lseek64().

./config/depend.in
	C preprocessor errors generated during automatic dependency
	building are sent to /dev/null to prevent them from appearing
	twice in the make output.

./src/H5AC.c
./src/H5B.c
./src/H5D.c
./src/H5F.c
./src/H5G.c
./src/H5Gent.c
./src/H5Gnode.c
./src/H5HG.c
./src/H5HL.c
./src/H5O.c
./src/H5Oattr.c
./src/H5Odtype.c
./src/H5Oefl.c
./src/H5Oshared.c
./src/H5T.c
./src/H5detect.c
./test/ohdr.c
	Changed H5F_ADDR_UNDEF to HADDR_UNDEF to be more consistent
	with the `haddr_t' datatype which is now a public type.

./src/H5D.c
./src/H5P.c
./src/H5Ppublic.h
./src/H5Tconv.c
./test/cmpd_dset.c
./test/dsets.c
./test/overhead.c
./test/tselect.c
./test/tvltypes.c
	The H5P_DATASET_XFER constant was changed to H5P_DATA_XFER
	because the properties apply to all types of I/O operations,
	not just datasets.

./src/H5B.c
./src/H5Bprivate.h
./src/H5D.c
./src/H5Dpublic.h
./src/H5F.c
./src/H5Farray.c
./src/H5Fistore.c
./src/H5Fprivate.h
./src/H5Fpublic.h
./src/H5Gnode.c
./src/H5Gpkg.h
./src/H5HG.c
./src/H5HL.c
./src/H5O.c
./src/H5R.c
./src/H5Sall.c
./src/H5Shyper.c
./src/H5Smpio.c
./src/H5Spoint.c
./src/H5Sprivate.h
./test/big.c
./test/h5test.c
./test/istore.c
./testpar/t_dset.c
./testpar/t_file.c
./tools/h5debug.c
./tools/h5ls.c
	Modified to work with the virtual file layer by calling H5FD_*
	functions instead of H5F_low_* functions and by passing file
	access and data transfer properties by object ID instead of
	pointer.

	Changed H5D_transfer_t to H5FD_mpio_xfer_t since the
	COLLECTIVE vs. INDEPENDENT transfer mode is specific to the
	MPIO file driver.

	Moved MPIO-specific stuff into the MPIO driver.

./src/H5B.c
./src/H5D.c
./src/H5Fprivate.h
	The H5F_mpio_* private functions were renamed and placed in
	the H5FDmpio driver except those which appeared in H5Smpio.c.

./src/H5E.c
./src/H5Epublic.h
	Added major error number H5E_VFL for virtual file layer
	related errors.

./src/H5F.c
./src/H5Fprivate.h
	Changed the logic that controls whether the boot block is
	written. Instead of assuming that the first call to write the
	boot block is only to allocate space, I've added a function
	argument which makes this explicit.

	Changed the way files are compared so that a driver-defined
	comparison function can be called.  Files which belong to
	different drivers are always considered different.

	Removed H5F_driver_t since file drivers are now identified by
	object ID instead of a special non-user-extendible datatype.

	Removed all the hard-coded low-level file properties which
	have been replaced by the various file drivers.

./src/H5I.c
./src/H5Iprivate.h
	Added the H5I_inc_ref() which was removed a few months ago
	since we finally have a use for it.

./src/H5Ipublic.h
	Added the H5I_VFL object ID type to identify file drivers in
	the virtual file layer.

./src/H5MF.c
./src/H5MFprivate.h
	Moved all the allocation/deallocation code into the virtual
	file layer which allows file drivers to override much of it.

./src/H5P.c
./src/H5Ppublic.h
	Moved file driver-specific code into the various file driver
	files.

	The H5Pcopy() and H5Pclose() functions make calls into the
	virtual file driver to manage the memory for driver-specific
	file access and data transfer properties.

./src/H5private.h
./src/H5public.h
	The `haddr_t' type is now public.

./test/tfile.c
	Added a few more comments.
1999-08-10 15:21:32 -05:00