summaryrefslogtreecommitdiffstats
path: root/src/H5Smpio.c
Commit message (Collapse)AuthorAgeFilesLines
* [svn-r6266] Purpose:Quincey Koziol2003-01-101-9/+9
| | | | | | | | | | | | Code cleanup/new feature. Description: Split FUNC_LEAVE into API and non-API specific versions. This allows a solution to compiling this branch with C++, as well as reducing the size of the binaries produced. Platforms tested: FreeBSD 4.7 (sleipnir) w/serial, parallel (including MPE) & thread-safe
* [svn-r6252] Purpose:Quincey Koziol2003-01-091-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Lots of performance improvements & a couple new internal API interfaces. Description: Performance Improvements: - Cached file offset & length sizes in shared file struct, to avoid constantly looking them up in the FCPL. - Generic property improvements: - Added "revision" number to generic property classes to speed up comparisons. - Changed method of storing properties from using a hash-table to the TBBT routines in the library. - Share the propery names between classes and the lists derived from them. - Removed redundant 'def_value' buffer from each property. - Switching code to use a "copy on write" strategy for properties in each list, where the properties in each list are shared with the properties in the class, until a property's value is changed in a list. - Fixed error in layout code which was allocating too many buffers. - Redefined public macros of the form (H5open()/H5check, <variable>) internally to only be (<variable>), avoiding innumerable useless calls to H5open() and H5check_version(). - Reuse already zeroed buffers in H5F_contig_fill instead of constantly re-zeroing them. - Don't write fill values if writing entire dataset. - Use gettimeofday() system call instead of time() system when checking the modification time of a dataset. - Added reference counted string API and use it for tracking the names of objects opening in a file (for the ID->name code). - Removed redundant H5P_get() calls in B-tree routines. - Redefine H5T datatype macros internally to the library, to avoid calling H5check redundantly. - Keep dataspace information for dataset locally instead of reading from disk each time. Added new module to track open objects in a file, to allow this (which will be useful eventually for some FPH5 metadata caching issues). - Remove H5AC_find macro which was inlining metadata cache lookups, and call function instead. - Remove redundant memset() calls from H5G_namei() routine. - Remove redundant checking of object type when locating objects in metadata cache and rely on the address only. - Create default dataset object to use when default dataset creation property list is used to create datasets, bypassing querying for all the property list values. - Use default I/O vector size when performing raw data with the default dataset transfer property list, instead of querying for I/O vector size. - Remove H5P_DEFAULT internally to the library, replacing it with more specific default property list based on the type of property list needed. - Remove redundant memset() calls in object header message (H5O*) routines. - Remove redunant memset() calls in data I/O routines. - Split free-list allocation routines into malloc() and calloc()- like routines, instead of one combined routine. - Remove lots of indirection in H5O*() routines. - Simplify metadata cache entry comparison routine (used when flushing entire cache out). - Only enable metadata cache statistics when H5AC_DEBUG is turned on, instead of always tracking them. - Simplify address comparison macro (H5F_addr_eq). - Remove redundant metadata cache entry protections during dataset creation by protecting the object header once and making all the modifications necessary for the dataset creation before unprotecting it. - Reduce # of "number of element in extent" computations performed by computing and storing the value during dataspace creation. - Simplify checking for group location's file information, when file has not been involving in file-mounting operations. - Use binary encoding for modification time, instead of ASCII. - Hoist H5HL_peek calls (to get information in a local heap) out of loops in many group routine. - Use static variable for iterators of selections, instead of dynamically allocation them each time. - Lookup & insert new entries in one step, avoiding traversing group's B-tree twice. - Fixed memory leak in H5Gget_objname_idx() routine (tangential to performance improvements, but fixed along the way). - Use free-list for reference counted strings. - Don't bother copying object names into cached group entries, since they are re-created when an object is opened. The benchmark I used to measure these results created several thousand small (2K) datasets in a file and wrote out the data for them. This is Elena's "regular.c" benchmark. These changes resulted in approximately ~4.3x speedup of the development branch when compared to the previous code in the development branch and ~1.4x speedup compared to the release branch. Additionally, these changes reduce the total memory used (code and data) by the development branch by ~800KB, bringing the development branch back into the same ballpark as the release branch. I'll send out a more detailed description of the benchmark results as a followup note. New internal API routines: Added "reference counted strings" API for tracking strings that get used by multiple owners without duplicating the strings. Added "ternary search tree" API for text->object mappings. Platforms tested: Tested h5committest {arabica (fortran), eirene (fortran, C++) modi4 (parallel, fortran)} Other platforms/configurations tested? FreeBSD 4.7 (sleipnir) serial & parallel Solaris 2.6 (baldric) serial
* [svn-r6055] Purpose:Quincey Koziol2002-11-051-6/+3
| | | | | | | | | | | | | | New feature Description: Add support for scalar dataspaces in parallel I/O. Platforms tested: Tested h5committest {arabica (fortran), eirene (fortran, C++) modi4 (parallel, fortran)} Also, FreeBSD 4.7 (sleipnir) serial & parallel Misc. update: Update release_docs/RELEASE for bug fixes, new features, etc.
* [svn-r6047] Purpose:Quincey Koziol2002-11-011-1/+1
| | | | | | | | | | | | | | | | | Bug fix & code cleanup Description: Hyperslab code for collapsing dimensions was incorrectly collapsing selections inappropriately when the fastest changing dimension couldn't be collapsed. Also add some more assertions which will make similar bugs easier to find. Solution: Break out of loop earlier. Platforms tested: modi4 (parallel), too small to triple check.
* [svn-r6043] Purpose:Quincey Koziol2002-10-291-1/+78
| | | | | | | | | | | | Bug fix Description: I/O using "none" selections in parallel wasn't working correctly. Also, add serial "none" selection test. Platforms tested: Tested h5committest {arabica (fortran), eirene (fortran, C++) modi4 (parallel, fortran)}
* [svn-r5894] Purpose:Quincey Koziol2002-08-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* [svn-r5871] Purpose:Quincey Koziol2002-08-121-1/+0
| | | | | | | | | | | | | | | | Code cleanup Description: Combined H5P_isa_class and H5I_object functionality into a new internal H5P API function: H5P_object_verify, which checks that a property list is the appropriate class and then returns the property list object associated with the property list ID. This reduces the source code by about 200 LOC and trims the library binary some more. Platforms tested: FreeBSD 4.6 (sleipnir)
* [svn-r5867] Purpose:Quincey Koziol2002-08-091-0/+2
| | | | | | | | | | | | | Code cleanup Description: Changed the last HRETURN* statements in the FUNC_ENTER macros into HGOTO* macros, which reduces the size of the library binary in certain configurations by another 10% Platforms tested: FreeBSD 4.6 (sleipnir) serial & parallel, IRIX64 6.5 (modi4) serial & parallel
* [svn-r5842] Purpose:Quincey Koziol2002-08-081-61/+60
| | | | | | | | | | | | | | | | Code cleanup Description: Change most (all?) HRETURN_ERROR macros to HGOTO_ERROR macros, along with HRETURN macros to HGOTO_DONE macros. This unifies the error return path from functions and reduces the size of the library by up to 10% on some platforms. Additionally, I improved a lot of the error cleanup code in many routines. Platforms tested: FreeBSD 4.6 (sleipnir) serial & parallel and IRIX64 6.5 (modi4) serial & parallel.
* [svn-r5839] Purpose:Quincey Koziol2002-07-311-4/+4
| | | | | | | | | | | | | | | Code cleanup Description: Move operations on each type of selection into the source code file for each selection type (all->H5Sall.c, hyperslab->H5Shyper.c, etc.) Remove central H5S_select_<foo> operations, instead calling the operations through function pointers in each selection (a much more object-oriented approach). Platforms tested: FreeBSD 4.6 (sleipnir)
* [svn-r5707] Purpose:Quincey Koziol2002-06-251-0/+4
| | | | | | | | | | | | | | Bug Fix. Description: Contiguous types created for "all" and contiguous hyperslab selections was not being committed before using them. Solution: Commit them. :-) This fixes the problems on the LLNL Blue Pacific machine. Platforms tested: LLNL Blue Pacific w/parallel.
* [svn-r5680] Purpose:Quincey Koziol2002-06-191-28/+80
| | | | | | | | | | | | | | | | | | | | New feature. Description: There is some discussion among the SAF team as to whether it is better to use MPI derived types for raw data transfers (thus needing a MPI_File_set_view() call), or whether it is better to use a sequence of low-level MPI types (i.e. MPI_BYTE) for the raw data transfer. Solution: Added an in internal flag to determine whether derived types are preferred (the default), or whether they should be avoided. An environment variable ("HDF5_MPI_PREFER_DERIVED_TYPES") can be set by users to control whether MPI types should be used or not. Set the environment variable to "0" (i.e.: 'setenv HDF5_MPI_PREFER_DERIVED_TYPES 0' to avoid using MPI derived types. Platforms tested: IRIX64 6.5 (modi4) w/parallel
* [svn-r5660] Purpose:Quincey Koziol2002-06-181-88/+197
| | | | | | | | | | | | 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
* [svn-r5652] Purpose:Quincey Koziol2002-06-171-3/+12
| | | | | | | | | | | | 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
* [svn-r5650] Purpose:Quincey Koziol2002-06-171-11/+14
| | | | | | | | | | | | 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.
* [svn-r5530] Purpose:Bill Wendling2002-06-041-0/+3
| | | | | | | | | | | | | | | Code Cleanup Description: Removed some compiler warnings. Solution: In a few cases, NULL was being returned when a FAIL was supposed to be returned instead. There were some header files which needed to be included in a few of the sources. A couple of if-then statements had assignments in the conditional part. The compiler warned that they should have extra "()"s around them. Made the code check the values instead. Platforms tested: Linux (parallel) Modi4 (parallel)
* [svn-r5471] Purpose:Quincey Koziol2002-05-291-3/+3
| | | | | | | | | | | | | | | | Code cleanup Description: Broke the FUNC_ENTER macro into several macros, with more specialized uses (which followup mail will describe). This was designed to move most/all of the checks which could be done at compile time to that point, instead of needlessly performing them (over & over :-) at run-time. This reduces the library's size (and thus staticly linked binaries) and has a minor speedup effect also. Platforms tested: IRIX64 6.5 (modi4) with parallel & FORTRAN enabled, and additional testing on FreeBSD and Solaris immediately after the checkin.
* [svn-r5467] Purpose:Quincey Koziol2002-05-281-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | Code cleanup. Description: Took Robb's recent ideas for improving the FUNC_ENTER/FUNC_LEAVE macros equivalents in the SAF library and adapted them to our library. I added an additional macro which is equivalent to FUNC_ENTER: FUNC_ENTER_NOINIT - Has the API tracing code, etc. from FUNC_ENTER but none of the library or interface initialization code. This is to be used _only_ for static functions and those which explicitly cannot have the library or interface initialization code enabled (like the API termination routines, etc.). This allowed many more of the functions in the library [but not all yet :-(] to be wrapped with FUNC_ENTER[_NOINIT]/FUNC_LEAVE pairs. It also reduced the size of the library and executables (by cutting out a bunch of code which was never executed), I'll e-mail the exact results when I've finished editing it. Platforms tested: IRIX64 6.5 (modi4)
* [svn-r5259] Purpose:Quincey Koziol2002-04-251-19/+11
| | | | | | | | | | | | | | | | Code cleanup Description: Previously, the I/O pipeline (pline), external file list (efl) and fill- value (fill) structs were passed down the raw data function call chain, even into and/or through functions which didn't use them. Since all three of these pieces of information are available from the dataset creation property list, just pass the dataset creation property list down the function call chain and query for the information needed in a particular function. Platforms tested: FreeBSD 4.5 (sleipnir)
* [svn-r5139] Purpose:Quincey Koziol2002-04-031-1/+1
| | | | | | | | Code cleanup Description: Clean up a few warnings on the SGI. Platforms tested: IRIX64 6.5 (modi4)
* [svn-r5138] Purpose:Quincey Koziol2002-04-031-33/+74
| | | | | | | | | | | | | | | | | | | | | | Bug Fix & Code Cleanup Description: The MPI-IO optimized transfer routines (H5S_mpio_spaces_read/H5S_mpio_space_write) are not being invoked in all the cases where they could be used. Additionally, the code for determining if an optimized transfer is wrapped into the actual I/O transfer routine in a very confusing way. Solution: Re-enabled MPI-IO optimized transfer routines in all the cases where they should work. Extracted all the pre-conditions for optimized transfers into separate routines from the transfer routines. Platforms tested: FreeBSD 4.5 (sleipnir) & IRIX64 6.5 (modi4)
* [svn-r4968] Purpose:Quincey Koziol2002-02-141-0/+1
| | | | | | Bug fix Description: Correct prototype inconsistency.
* [svn-r4965] Purpose:Quincey Koziol2002-02-141-7/+10
| | | | | | | | | | | | | Bug Fix Description: If a non-zero fill-value is used for a chunked dataset, any non-existent chunked read with an "all" selection (or a contiguous hyperslab selection) will return zero for those instead of the user's fill-value. Solution: Fixed I/O code to pass down fill-value to "optimized" I/O routines, so it will be available to fill the user's buffer with. Platforms tested: FreeBSD 4.5 (sleipnir)
* [svn-r4714] Purpose:Albert Cheng2001-12-131-1/+2
| | | | | | | | Bug fix Description: Fixed a previous commit that introduced an undeclared variable error. Platforms tested: eirene (serial, pp), modi4(pp)
* [svn-r4706] Purpose:Quincey Koziol2001-12-121-1/+1
| | | | | | | | | | | | Code cleanup Description: Tweaked internal error handling macros to reduce the size of the library's object code by about 10-20%. Also cleaned up some compiler warnings... Platforms tested: FreeBSD 4.4 (sleipnir)
* [svn-r4643] Purpose:Quincey Koziol2001-11-271-1/+1
| | | | | | | | | | | | | | | | | | | | | | Code cleanup Description: Windows is generating hundreds of warnings from some of the practices in the library. Mostly, they are because size_t is 32-bit and hsize_t is 64-bit on Windows and we were carelessly casting the larger values down to the smaller ones without checking for overflow. Also, some other small code cleanups,etc. Solution: Re-worked some algorithms to eliminate the casts and also added more overflow checking for assignments and function parameters which needed casts. Kent did most of the work, I just went over his changes and fit them into the the library code a bit better. Platforms tested: FreeBSD 4.4 (hawkwind)
* [svn-r4620] Purpose:Quincey Koziol2001-11-201-3/+7
| | | | | | | | | Code cleanup Description: Get rid of IDs from internal function calls and some small cleanups from the old-stype => generic property list conversion. Platforms tested: FreeBSD 4.4 (hawkwind)
* [svn-r4488] Purpose:Quincey Koziol2001-09-281-1/+1
| | | | | | | | | Fix on Kludge Description: Forgot another chunk of parallel I/O code that needed to change for the generic property list kludge... :-/ Platforms tested: Parallel Linux 2.2.18smp (eirene)
* [svn-r4355] Purpose:Quincey Koziol2001-08-141-2/+2
| | | | | | | | | | | | | | | | | | | | | | Code cleanup (sorta) Description: When the first versions of the HDF5 library were designed, I remembered vividly the difficulties of porting code from a 32-bit platform to a 16-bit platform and asked that people use intn & uintn instead of int & unsigned int, respectively. However, in hindsight, this was overkill and unnecessary since we weren't going to be porting the HDF5 library to 16-bit architectures. Currently, the extra uintn & intn typedefs are causing problems for users who'd like to include both the HDF5 and HDF4 header files in one source module (like Kent's h4toh5 library). Solution: Changed the uintn & intn's to unsigned and int's respectively. Platforms tested: FreeBSD 4.4 (hawkwind)
* [svn-r4326] Purpose:Quincey Koziol2001-08-101-0/+1
| | | | | | | | | | Code cleanups, mostly.. Description: Work on pacifying the SGI compiler to get the generic properties working correctly with --enable-parallel and --enable-fortran. It's not quite fixed yet, but I need to head home and these patches help... :-/ Platforms tested: IRIX64 6.5 (modi4)
* [svn-r4324] Purpose:Quincey Koziol2001-08-101-10/+19
| | | | | | | | | | | | | | | | | | | | | | | | New Features! Description: Start migrating the internal use of property lists in the library from the older implementation to the new generic property lists. Currently, only the dataset transfer property lists are migrated to the new architecture, all the rest of the property list types are still using the older architecture. Also, the backward compatibility features are not implemented yet, so applications which use dataset transfer properties may need to make the following changes: H5Pcreate(H5P_DATASET_XFER) -> H5Pcreate_list(H5P_DATASET_XFER_NEW) and H5Pclose(<a dataset transfer property list>) -> H5Pclose_list(id) This still may have some bugs in it, especially with Fortran, but I should be wrapping up those later today. Platforms tested: FreeBSD 4.4 (hawkwind)
* [svn-r4241] Purpose:Quincey Koziol2001-07-201-113/+108
| | | | | | | | | | | | Code Cleanup/Bug Fixes Description: Raymond's last fix corrected the problem with eirene, but there were still a number of warnings, etc. during compiles. Solution: Clean up the warnings, neaten up the code a little and change a few hsize_t's into size_t's that were missed in my previous sweep through the code. Platforms tested: Linux 2.2 (eirene)
* [svn-r4240] Raymond Lu2001-07-191-1/+2
| | | | | | | | | | | | Purpose: Bug fix. Description: Daily test fails in parallel collective write testing on eirene. Solution: In function H5S_mpio_spaces_xfer in H5Smpio.c, changed mpi_count from hsize_t to size_t. Platforms tested: MPICH(Linux, SunOS, IRIX64), SGI MPI.
* [svn-r4022] Purpose:Bill Wendling2001-06-191-9/+9
| | | | | | | | | Code Cleanup Description: Changed POSIX function calls to the HD* way of doing things. Checked with checkposix and tested on Linux. Platforms tested: Linux
* [svn-r3781] Purpose:Bill Wendling2001-04-051-7/+7
| | | | | | | | | | | | | | | | | | 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
* [svn-r3003] Purpose:Albert Cheng2000-11-271-1/+29
| | | | | | | | | | | | | | | | | | Bug fix Description: The optimized MPI-IO calls, H5S_mpio_spaces_write/H5S_mpio_spaces_read, are changed for collective data transfer only since they call H5FD_mpio_setup to do setup to eveually call MPI_File_set_view in H5FD_mpio_read or H5FD_mpio_write. MPI_File_set_view is a collective call. Letting independent data transfer use this route would result in hanging. Solution: For now, the checking is being done in H5D_write and H5D_read before H5S_mpio_spaces_write/H5S_mpio_spaces_read is called because the checking code in H5S_mpio_spaces_xfer, though with the right idea, is not correct yet. Platforms tested: IRIX64-64 parallel.
* [svn-r3002] Albert Cheng2000-11-261-9/+16
| | | | | | | | | | | | | | Purpose: Bug fix Description: H5S_mpio_spaces_xfer() did not do clean up all the times especially the MPI_type freeing. Solution: Include the MPI_type freeing as part of cleanup code. Replaced most HRETURN_ERROR(...) with HGOTO_ERROR so that cleanup code will be executed. Platforms tested: IRIX64-64.
* [svn-r2962] Purpose:Quincey Koziol2000-11-171-1/+1
| | | | | | | | Code cleanup Description: Changed another hard-coded '32' into H5S_MAX_RANK Platforms tested: Eyeballed...
* [svn-r2960] Purpose:Albert Cheng2000-11-171-5/+9
| | | | | | | | | Code cleaning Description: Replaced hard coded dimension size with H5S_MAX_RANK. Cleanup couple minor type cast mismatch. Platforms tested: modi4 -64 parallel.
* [svn-r2935] Purpose:Albert Cheng2000-11-151-1/+1
| | | | | | | | | | | | | | | | | Bug fix Description: The optimized MPIO code was not working with the TFLOPS machine. It kept reporting "can't convert from size to size_i" errors in H5FD_mpio_write() and H5FD_mpio_read(). Solution: The error was actually in H5S_mpio_spaces_xfer() in H5Smpio.c in which the variable mpi_count was declared as size_t (only 4 bytes big in TFLOPS) when it should be hsize_t (8 bytes big in TFLOPS). Corrected and also changed to use the (hsize_t) to case size_i in H5FD_mpio_write() and H5FD_mpio_read() since that is what it should be. Platforms tested: TFLOPS and modi4 (-64, parallel)
* [svn-r2866] Purpose:Quincey Koziol2000-11-111-1/+1
| | | | | | | | Code cleanup Description: Found more "Have_foo" usage and converted them to "H5_HAVE_foo" Platforms tested: FreeBSD 4.1.1 (hawkwind)
* [svn-r2735] Purpose:Albert Cheng2000-10-251-1/+1
| | | | | | | | | | | | | | | | | | Bug fix Description: Recent changes to H5FD_read() added a new argument of type of data to be written but the MPIO file driver call to H5FD_read() was not updated. Also, the prototype of H5FD_read() in H5Fprivate.h was "screened out", thus the compiler could not detect the inconsistency. With the mismatched arguments, MPIO failed badly. Solution: Update the H5FD_read() call with the new parameter. Since the call is used by H5Dread call so far, it is hardcoded to use H5FD_MEM_DRAW as the value. If the call is used besides for H5Dread, this parameter needs to be better defined. (Still need to fix the prototype being blocked off.) Platforms tested: O2K -64 parallel.
* [svn-r2657] Quincey Koziol2000-10-101-1/+2
| | | | | | | | | | | | Purpose: Parallel Bug Fixes Description: Was out of sync with header file re-arrangements I checked in last night. Solution: Fixed to use new header files, etc. Platforms tested: O2K (modi4)
* [svn-r2652] Purpose:Quincey Koziol2000-10-101-1/+3
| | | | | | | | | | | | | | | Maintainance & performance enhancements Description: Re-arranged header files to protect private symbols better. Changed optimized regular hyperslab I/O to compute the offsets more efficiently from previous method of using matrix operations. Added sequential I/O operations at a more abstract level (at the same level as H5F_arr_read/write), to support the optimized hyperslab I/O. Platforms tested: Solaris 2.6 (baldric) & FreeBSD 4.1.1 (hawkwind)
* [svn-r2646] Purpose:Albert Cheng2000-10-101-5/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bug fix (done by Kim Yates) Description: The optimized mpio code was broken and when read was done, it hanged. Solution: H5FDmpio.c: In H5FD_mpio_write, moved the 16-line block of code in which all procs other than p0 skip the actual write to be just before the call to MPI_File_write_at. Previously, the values of the local vars that controlled "allsame" were not always set correctly when the moved block was reached. H5S.c: Changed default value of H5_mpi_opt_types_g to TRUE, so that the MPI-IO hyperslab code is executed by default in parallel HDF5, rather than executing the serial hyperslab code. H5Smpio.c: In function H5S_mpio_hyper_type, added a call to free an intermediate type. Cures a small memory leak. Added code for cases of empty hyperslab Changed displacements to be MPI_Aint Platforms tested: modi4 -64: worked fine with mpich 1.2.0 but failed with the messages saying it ran out of entries for MPI_Types during the collective_read test. After tracing the code all the way to the collective read, all MPI Types have been freed properly. It aborted with the above message when it executed the line if (MPI_SUCCESS!= MPI_File_read_at_all(file->f, mpi_off, buf, size_i, buf_type, &mpi_stat )) Could not see any problem with this line. It could be a bug in the SGI version of MPI.
* [svn-r2508] Purpose:Albert Cheng2000-09-061-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Bug fixes Description: All tests were core=dumping in IRIX64. The bug is in Generic property list creation in which malloc asked for 2*64-1 bytes due to coding bug. The object creation failed but the return code was not checked. Program eventually crashed. Solution: H5F.c: Check the return code from new file object creation and flag error accordingly. H5FL.c: H5FL_arr_free is a replacement for H5MM_xfree which accepts null value as a legal argument value. H5FL_arr_free assert on it. Since other parts of the code have been passing null value to H5MM_xfree, H5FL_arr_free must accept it too until all the calling routines are changed to not pass Null. H5P.c: some routine passes in 0 as the hashsize value which is uintn. The expression (hashsize-1) underflows to the largest unsigned int for some machines. Thus the calloc failed. Cast hashsize to unsigned int first (this assumes hashsize stays within the signed int data range. H5Smpio.c: Added the extra parameter because the H5FD_write has been redefined. Platforms tested: IRIX64 -64 and -n32
* [svn-r2057] Purpose:Albert Cheng2000-03-241-1/+1
| | | | | | | | | | | | | | 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.
* [svn-r1881] Changed all the HAVE_PARALLEL and HAVE_GASS macros to the newAlbert Cheng1999-12-171-4/+4
| | | | form of H5_HAVE_PARALLEL and H5_HAVE_GASS.
* [svn-r1574] Changes since 19990817Robb Matzke1999-08-181-1/+1
| | | | | | | | | | | | | | | | | | | | | ---------------------- ./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.
* [svn-r1573] Changes since 19990817Robb Matzke1999-08-171-1/+1
| | | | | | | | | | | | | | | | | | | | | ---------------------- ./src/H5D.c ./src/H5F.c ./src/H5Fistore.c ./src/H5Smpio.c Incorporated previous changes into MPIO special cases. These are mostly due to the fact that most of the members of the file->shared->fapl struct have been moved into the file->shared->file->shared struct (`file' is an H5F_t*). ./src/H5I.c Fixed a bug with closing the library w.r.t. the VFL stuff. The VFL layer introduced reference counts on object ID's and the library termination functions freed these objects in the wrong order. Now H5I_clear_group() does not normally remove objects with a reference count larger than one because it assumes that those objects are currently in use by the library.