mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-09 07:32:32 +08:00
8baa675250
Changes since 19990616 ---------------------- ./src/H5T.c ./src/H5Tconv.c All conversion functions take an extra argument called `stride' which is the number of bytes to advance the source and destination pointers after each element is converted. If the value is zero then the old behavior is preserved (source and destination values are packed). This feature was necessary to implement the compound datatype conversion optimizations and it causes a minor change to the API (application-defined type conversion functions take an extra size_t stride argument). ./src/H5Tconv.c An additional compound data type conversion function was added which is applied unless the destination type is larger than the source type. I'm measuring significant performance increases for certain operations: Test Name Struct-Conv Noop-Conv New(Old) MB/s New(Old) MB/s ---------- ------------- ------------- Reordering 2.062(0.3936) 54087(0.9047) Subsetting 2.901(0.6581) 40192(1.1100) Shrinking 1.976(0.3925) 33628(1.1500) ---------- ------------- ------------- ./test/dtypes.c Added various compound datatype conversion tests. Fixed return values from functions. ./src/H5T.c Conversion timers are updated only if H5T debugging is turned on a runtime (in addition to compile time). This allows the data type layer to be compiled with debugging support without having to pay a big runtime penalty if the debugging isn't actually used. ./src/H5A.c ./src/H5D.c ./src/H5Ofill.c ./src/H5P.c ./src/H5T.c ./src/H5Tconv.c ./src/H5Tpkg.h ./src/H5Tprivate.h ./src/H5Tpublic.h Added the stride argument to the H5T_convert() calls. The stride is always zero, which means that the source and destination data values are packed. ./configure.in ./configure [REGENERATED] If API tracing is turned off then libhdf5.settings will say `no' instead of nothing. ./test/flush1.c ./test/flush2.c Added better error messages in a couple places.
100 lines
2.5 KiB
C
100 lines
2.5 KiB
C
/*
|
||
* Copyright (C) 1998 NCSA
|
||
* All rights reserved.
|
||
*
|
||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||
* Friday, October 23, 1998
|
||
*
|
||
* Purpose: This is the first half of a two-part test that makes sure
|
||
* that a file can be read after an application crashes as long
|
||
* as the file was flushed first. We simulate a crash by
|
||
* calling _exit(0) since this doesn't flush HDF5 caches but
|
||
* still exits with success.
|
||
*/
|
||
#include <h5test.h>
|
||
|
||
const char *FILENAME[] = {
|
||
"flush",
|
||
NULL
|
||
};
|
||
|
||
|
||
/*-------------------------------------------------------------------------
|
||
* Function: main
|
||
*
|
||
* Purpose: Part 1 of a two-part H5Fflush() test.
|
||
*
|
||
* Return: Success: 0
|
||
*
|
||
* Failure: 1
|
||
*
|
||
* Programmer: Robb Matzke
|
||
* Friday, October 23, 1998
|
||
*
|
||
* Modifications:
|
||
*
|
||
*-------------------------------------------------------------------------
|
||
*/
|
||
int
|
||
main(void)
|
||
{
|
||
hid_t fapl, file, dcpl, space, dset, groups, grp;
|
||
hsize_t ds_size[2] = {100, 100};
|
||
hsize_t ch_size[2] = {5, 5};
|
||
double the_data[100][100];
|
||
hsize_t i, j;
|
||
char name[1024];
|
||
|
||
h5_reset();
|
||
fapl = h5_fileaccess();
|
||
|
||
TESTING("H5Fflush (part1)");
|
||
|
||
/* Create the file */
|
||
h5_fixname(FILENAME[0], fapl, name, sizeof name);
|
||
if ((file=H5Fcreate(name, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) goto error;
|
||
|
||
/* Create a chunked dataset */
|
||
if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
|
||
if (H5Pset_chunk(dcpl, 2, ch_size)<0) goto error;
|
||
if ((space=H5Screate_simple(2, ds_size, NULL))<0) goto error;
|
||
if ((dset=H5Dcreate(file, "dset", H5T_NATIVE_FLOAT, space, H5P_DEFAULT))<0)
|
||
goto error;
|
||
|
||
/* Write some data */
|
||
for (i=0; i<ds_size[0]; i++) {
|
||
/*
|
||
* The extra cast in the following statement is a bug workaround
|
||
* for the Win32 version 5.0 compiler.
|
||
* 1998-11-06 ptl
|
||
*/
|
||
for (j=0; j<ds_size[1]; j++) {
|
||
the_data[i][j] = (double)(hssize_t)i/(hssize_t)(j+1);
|
||
}
|
||
}
|
||
if (H5Dwrite(dset, H5T_NATIVE_DOUBLE, space, space, H5P_DEFAULT,
|
||
the_data)<0) goto error;
|
||
|
||
/* Create some groups */
|
||
if ((groups=H5Gcreate(file, "some_groups", 0))<0) goto error;
|
||
for (i=0; i<100; i++) {
|
||
sprintf(name, "grp%02u", (unsigned)i);
|
||
if ((grp=H5Gcreate(groups, name, 0))<0) goto error;
|
||
if (H5Gclose(grp)<0) goto error;
|
||
}
|
||
|
||
/* Flush and exit without closing the library */
|
||
if (H5Fflush(file, H5F_SCOPE_GLOBAL)<0) goto error;
|
||
PASSED();
|
||
fflush(stdout);
|
||
fflush(stderr);
|
||
_exit(0);
|
||
|
||
error:
|
||
_exit(1);
|
||
}
|
||
|
||
|
||
|
||
|