mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-01-30 15:32:37 +08:00
[svn-r4364] Purpose:
cleanup Description: chunk, iopipe, overhead have been moved to perform/. Platforms tested: eirene(parallel).
This commit is contained in:
parent
37de169a62
commit
34b8cca115
@ -151,41 +151,6 @@ bittests.lo: \
|
||||
$(top_srcdir)/src/H5Rprivate.h \
|
||||
$(top_srcdir)/src/H5Zprivate.h \
|
||||
$(top_srcdir)/src/H5Sprivate.h
|
||||
chunk.lo: \
|
||||
$(srcdir)/chunk.c \
|
||||
$(top_srcdir)/src/hdf5.h \
|
||||
$(top_srcdir)/src/H5public.h \
|
||||
$(top_builddir)/src/H5pubconf.h \
|
||||
$(top_srcdir)/src/H5api_adpt.h \
|
||||
$(top_srcdir)/src/H5Ipublic.h \
|
||||
$(top_srcdir)/src/H5Apublic.h \
|
||||
$(top_srcdir)/src/H5ACpublic.h \
|
||||
$(top_srcdir)/src/H5Bpublic.h \
|
||||
$(top_srcdir)/src/H5Dpublic.h \
|
||||
$(top_srcdir)/src/H5Epublic.h \
|
||||
$(top_srcdir)/src/H5Fpublic.h \
|
||||
$(top_srcdir)/src/H5FDpublic.h \
|
||||
$(top_srcdir)/src/H5Gpublic.h \
|
||||
$(top_srcdir)/src/H5HGpublic.h \
|
||||
$(top_srcdir)/src/H5HLpublic.h \
|
||||
$(top_srcdir)/src/H5MMpublic.h \
|
||||
$(top_srcdir)/src/H5Opublic.h \
|
||||
$(top_srcdir)/src/H5Ppublic.h \
|
||||
$(top_srcdir)/src/H5Zpublic.h \
|
||||
$(top_srcdir)/src/H5Rpublic.h \
|
||||
$(top_srcdir)/src/H5Spublic.h \
|
||||
$(top_srcdir)/src/H5Tpublic.h \
|
||||
$(top_srcdir)/src/H5FDcore.h \
|
||||
$(top_srcdir)/src/H5FDfamily.h \
|
||||
$(top_srcdir)/src/H5FDmpio.h \
|
||||
$(top_srcdir)/src/H5FDsec2.h \
|
||||
$(top_srcdir)/src/H5FDstdio.h \
|
||||
$(top_srcdir)/src/H5FDsrb.h \
|
||||
$(top_srcdir)/src/H5FDgass.h \
|
||||
$(top_srcdir)/src/H5FDdpss.h \
|
||||
$(top_srcdir)/src/H5FDstream.h \
|
||||
$(top_srcdir)/src/H5FDmulti.h \
|
||||
$(top_srcdir)/src/H5FDlog.h
|
||||
cmpd_dset.lo: \
|
||||
$(srcdir)/cmpd_dset.c \
|
||||
$(srcdir)/h5test.h \
|
||||
@ -649,43 +614,6 @@ hyperslab.lo: \
|
||||
$(top_srcdir)/src/H5MMprivate.h \
|
||||
$(top_srcdir)/src/H5MMpublic.h \
|
||||
$(top_srcdir)/src/H5Vprivate.h
|
||||
iopipe.lo: \
|
||||
$(srcdir)/iopipe.c \
|
||||
$(top_srcdir)/src/hdf5.h \
|
||||
$(top_srcdir)/src/H5public.h \
|
||||
$(top_builddir)/src/H5pubconf.h \
|
||||
$(top_srcdir)/src/H5api_adpt.h \
|
||||
$(top_srcdir)/src/H5Ipublic.h \
|
||||
$(top_srcdir)/src/H5Apublic.h \
|
||||
$(top_srcdir)/src/H5ACpublic.h \
|
||||
$(top_srcdir)/src/H5Bpublic.h \
|
||||
$(top_srcdir)/src/H5Dpublic.h \
|
||||
$(top_srcdir)/src/H5Epublic.h \
|
||||
$(top_srcdir)/src/H5Fpublic.h \
|
||||
$(top_srcdir)/src/H5FDpublic.h \
|
||||
$(top_srcdir)/src/H5Gpublic.h \
|
||||
$(top_srcdir)/src/H5HGpublic.h \
|
||||
$(top_srcdir)/src/H5HLpublic.h \
|
||||
$(top_srcdir)/src/H5MMpublic.h \
|
||||
$(top_srcdir)/src/H5Opublic.h \
|
||||
$(top_srcdir)/src/H5Ppublic.h \
|
||||
$(top_srcdir)/src/H5Zpublic.h \
|
||||
$(top_srcdir)/src/H5Rpublic.h \
|
||||
$(top_srcdir)/src/H5Spublic.h \
|
||||
$(top_srcdir)/src/H5Tpublic.h \
|
||||
$(top_srcdir)/src/H5FDcore.h \
|
||||
$(top_srcdir)/src/H5FDfamily.h \
|
||||
$(top_srcdir)/src/H5FDmpio.h \
|
||||
$(top_srcdir)/src/H5FDsec2.h \
|
||||
$(top_srcdir)/src/H5FDstdio.h \
|
||||
$(top_srcdir)/src/H5FDsrb.h \
|
||||
$(top_srcdir)/src/H5FDgass.h \
|
||||
$(top_srcdir)/src/H5FDdpss.h \
|
||||
$(top_srcdir)/src/H5FDstream.h \
|
||||
$(top_srcdir)/src/H5FDmulti.h \
|
||||
$(top_srcdir)/src/H5FDlog.h \
|
||||
$(top_srcdir)/src/H5private.h \
|
||||
$(top_builddir)/src/H5config.h
|
||||
istore.lo: \
|
||||
$(srcdir)/istore.c \
|
||||
$(srcdir)/h5test.h \
|
||||
@ -995,41 +923,6 @@ ohdr.lo: \
|
||||
$(top_srcdir)/src/H5Sprivate.h \
|
||||
$(top_srcdir)/src/H5Iprivate.h \
|
||||
$(top_srcdir)/src/H5Gpkg.h
|
||||
overhead.lo: \
|
||||
$(srcdir)/overhead.c \
|
||||
$(top_srcdir)/src/hdf5.h \
|
||||
$(top_srcdir)/src/H5public.h \
|
||||
$(top_builddir)/src/H5pubconf.h \
|
||||
$(top_srcdir)/src/H5api_adpt.h \
|
||||
$(top_srcdir)/src/H5Ipublic.h \
|
||||
$(top_srcdir)/src/H5Apublic.h \
|
||||
$(top_srcdir)/src/H5ACpublic.h \
|
||||
$(top_srcdir)/src/H5Bpublic.h \
|
||||
$(top_srcdir)/src/H5Dpublic.h \
|
||||
$(top_srcdir)/src/H5Epublic.h \
|
||||
$(top_srcdir)/src/H5Fpublic.h \
|
||||
$(top_srcdir)/src/H5FDpublic.h \
|
||||
$(top_srcdir)/src/H5Gpublic.h \
|
||||
$(top_srcdir)/src/H5HGpublic.h \
|
||||
$(top_srcdir)/src/H5HLpublic.h \
|
||||
$(top_srcdir)/src/H5MMpublic.h \
|
||||
$(top_srcdir)/src/H5Opublic.h \
|
||||
$(top_srcdir)/src/H5Ppublic.h \
|
||||
$(top_srcdir)/src/H5Zpublic.h \
|
||||
$(top_srcdir)/src/H5Rpublic.h \
|
||||
$(top_srcdir)/src/H5Spublic.h \
|
||||
$(top_srcdir)/src/H5Tpublic.h \
|
||||
$(top_srcdir)/src/H5FDcore.h \
|
||||
$(top_srcdir)/src/H5FDfamily.h \
|
||||
$(top_srcdir)/src/H5FDmpio.h \
|
||||
$(top_srcdir)/src/H5FDsec2.h \
|
||||
$(top_srcdir)/src/H5FDstdio.h \
|
||||
$(top_srcdir)/src/H5FDsrb.h \
|
||||
$(top_srcdir)/src/H5FDgass.h \
|
||||
$(top_srcdir)/src/H5FDdpss.h \
|
||||
$(top_srcdir)/src/H5FDstream.h \
|
||||
$(top_srcdir)/src/H5FDmulti.h \
|
||||
$(top_srcdir)/src/H5FDlog.h
|
||||
stab.lo: \
|
||||
$(srcdir)/stab.c \
|
||||
$(srcdir)/h5test.h \
|
||||
|
@ -22,7 +22,7 @@ TEST_PROGS=testhdf5 lheap ohdr stab gheap hyperslab istore bittests dtypes \
|
||||
flush1 flush2 enum gass_write gass_read gass_append dpss_write \
|
||||
dpss_read srb_write srb_append srb_read ttsafe stream_test
|
||||
|
||||
TIMINGS=iopipe chunk overhead testmeta
|
||||
TIMINGS=testmeta
|
||||
|
||||
## The libh5test.a library provides common support code for the tests. We link
|
||||
## this library statically because some systems can only link executables to
|
||||
@ -42,10 +42,10 @@ MOSTLYCLEAN=cmpd_dset.h5 dataset.h5 extend.h5 istore.h5 tfile1.h5 tfile2.h5 \
|
||||
tfile3.h5 th5s1.h5 lheap.h5 ohdr.h5 stab1.h5 stab2.h5 \
|
||||
extern_1.h5 extern_2.h5 extern_3.h5 extern_1a.raw extern_1b.raw \
|
||||
extern_2a.raw extern_2b.raw extern_3a.raw extern_3b.raw \
|
||||
extern_4a.raw extern_4b.raw iopipe.raw iopipe.h5 gheap0.h5 \
|
||||
gheap1.h5 gheap2.h5 gheap3.h5 gheap4.h5 links.h5 chunk.h5 \
|
||||
extern_4a.raw extern_4b.raw gheap0.h5 \
|
||||
gheap1.h5 gheap2.h5 gheap3.h5 gheap4.h5 links.h5 \
|
||||
big.data big[0-9][0-9][0-9][0-9][0-9].h5 dtypes1.h5 dtypes2.h5 \
|
||||
tattr.h5 tselect.h5 mtime.h5 unlink.h5 overhead.h5 \
|
||||
tattr.h5 tselect.h5 mtime.h5 unlink.h5 \
|
||||
fillval_[0-9].h5 fillval.raw mount_[0-9].h5 testmeta.h5 \
|
||||
ttime.h5 trefer[12].h5 tvltypes.h5 tvlstr.h5 flush.h5 enum1.h5 \
|
||||
titerate.h5 ttsafe.h5 tarray1.h5 tgenprop.h5
|
||||
@ -56,9 +56,9 @@ CLEAN=$(TIMINGS)
|
||||
## other source lists are for the individual tests, the files of which may
|
||||
## overlap with other tests.
|
||||
|
||||
TEST_SRC=big.c bittests.c chunk.c cmpd_dset.c dsets.c dtypes.c extend.c \
|
||||
TEST_SRC=big.c bittests.c cmpd_dset.c dsets.c dtypes.c extend.c \
|
||||
external.c fillval.c flush1.c flush2.c gheap.c h5test.c hyperslab.c \
|
||||
iopipe.c istore.c lheap.c links.c mount.c mtime.c ohdr.c overhead.c \
|
||||
istore.c lheap.c links.c mount.c mtime.c ohdr.c \
|
||||
stab.c tarray.c tattr.c testhdf5.c testmeta.c tfile.c tgenprop.c th5s.c \
|
||||
titerate.c tmeta.c trefer.c tselect.c ttime.c ttbbt.c tvltypes.c tvlstr.c \
|
||||
unlink.c enum.c ttsafe.c ttsafe_dcreate.c ttsafe_error.c ttsafe_cancel.c \
|
||||
@ -129,27 +129,18 @@ extend: extend.lo
|
||||
external: external.lo
|
||||
@$(LT_LINK_EXE) $(CFLAGS) -o $@ external.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
|
||||
|
||||
iopipe: iopipe.lo
|
||||
@$(LT_LINK_EXE) $(CFLAGS) -o $@ iopipe.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
|
||||
|
||||
big: big.lo
|
||||
@$(LT_LINK_EXE) $(CFLAGS) -o $@ big.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
|
||||
|
||||
links: links.lo
|
||||
@$(LT_LINK_EXE) $(CFLAGS) -o $@ links.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
|
||||
|
||||
chunk: chunk.lo
|
||||
@$(LT_LINK_EXE) $(CFLAGS) -o $@ chunk.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
|
||||
|
||||
mtime: mtime.lo
|
||||
@$(LT_LINK_EXE) $(CFLAGS) -o $@ mtime.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
|
||||
|
||||
unlink: unlink.lo
|
||||
@$(LT_LINK_EXE) $(CFLAGS) -o $@ unlink.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
|
||||
|
||||
overhead: overhead.lo
|
||||
@$(LT_LINK_EXE) $(CFLAGS) -o $@ overhead.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
|
||||
|
||||
fillval: fillval.lo
|
||||
@$(LT_LINK_EXE) $(CFLAGS) -o $@ fillval.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
|
||||
|
||||
|
521
test/chunk.c
521
test/chunk.c
@ -1,521 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 1998 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <robb@arborea.spizella.com>
|
||||
* Thursday, May 14, 1998
|
||||
*
|
||||
* Purpose: Checks the effect of various I/O request sizes and raw data
|
||||
* cache sizes. Performance depends on the amount of data read
|
||||
* from disk and we use a filter to get that number.
|
||||
*/
|
||||
|
||||
/* See H5private.h for how to include headers */
|
||||
#undef NDEBUG
|
||||
#include "hdf5.h"
|
||||
|
||||
#ifdef H5_STDC_HEADERS
|
||||
# include <assert.h>
|
||||
# include <stdio.h>
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
#endif
|
||||
|
||||
|
||||
#ifndef H5_HAVE_ATTRIBUTE
|
||||
# undef __attribute__
|
||||
# define __attribute__(X) /*void*/
|
||||
# define UNUSED /*void*/
|
||||
#else
|
||||
# define UNUSED __attribute__((unused))
|
||||
#endif
|
||||
|
||||
#define FILE_NAME "chunk.h5"
|
||||
#define LINESPOINTS "lines"
|
||||
#define CH_SIZE 100 /*squared in terms of bytes */
|
||||
#define DS_SIZE 20 /*squared in terms of chunks */
|
||||
#define FILTER_COUNTER 305
|
||||
#define READ 0
|
||||
#define WRITE 1
|
||||
#define MIN(X,Y) ((X)<(Y)?(X):(Y))
|
||||
#define MAX(X,Y) ((X)>(Y)?(X):(Y))
|
||||
#define SQUARE(X) ((X)*(X))
|
||||
|
||||
/* The row-major test */
|
||||
#define RM_CACHE_STRT 25
|
||||
#define RM_CACHE_END 25
|
||||
#define RM_CACHE_DELT 5
|
||||
#define RM_START 0.50
|
||||
#define RM_END 5.00
|
||||
#define RM_DELTA 0.50
|
||||
#define RM_W0 0.0
|
||||
#define RM_NRDCC 521
|
||||
|
||||
/* Diagonal test */
|
||||
#define DIAG_CACHE_STRT 25
|
||||
#define DIAG_CACHE_END 25
|
||||
#define DIAG_CACHE_DELT 5
|
||||
#define DIAG_START 0.50
|
||||
#define DIAG_END 5.00
|
||||
#define DIAG_DELTA 0.50
|
||||
/* #define DIAG_W0 0.65 */
|
||||
/* #define DIAG_NRDCC 521 */
|
||||
|
||||
static size_t nio_g;
|
||||
static hid_t fapl_g = -1;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: counter
|
||||
*
|
||||
* Purpose: Count number of bytes but don't do anything.
|
||||
*
|
||||
* Return: Success: src_nbytes-1
|
||||
*
|
||||
* Failure: never fails
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, May 14, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static size_t
|
||||
counter (unsigned UNUSED flags, size_t UNUSED cd_nelmts,
|
||||
const unsigned UNUSED *cd_values, size_t nbytes,
|
||||
size_t UNUSED *buf_size, void UNUSED **buf)
|
||||
{
|
||||
nio_g += nbytes;
|
||||
return nbytes;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: create_dataset
|
||||
*
|
||||
* Purpose: Creates a square dataset with square chunks, registers a
|
||||
* stupid compress/uncompress pair for counting I/O, and
|
||||
* initializes the dataset. The chunk size is in bytes, the
|
||||
* dataset size is in terms of chunks.
|
||||
*
|
||||
* Return: void
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, May 14, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
create_dataset (void)
|
||||
{
|
||||
hid_t file, space, dcpl, dset;
|
||||
hsize_t size[2];
|
||||
signed char *buf;
|
||||
|
||||
/* The file */
|
||||
file = H5Fcreate (FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_g);
|
||||
|
||||
/* The data space */
|
||||
size[0] = size[1] = DS_SIZE * CH_SIZE;
|
||||
space = H5Screate_simple (2, size, size);
|
||||
|
||||
/* The storage layout and compression */
|
||||
dcpl = H5Pcreate (H5P_DATASET_CREATE);
|
||||
size[0] = size[1] = CH_SIZE;
|
||||
H5Pset_chunk (dcpl, 2, size);
|
||||
H5Zregister (FILTER_COUNTER, "counter", counter);
|
||||
H5Pset_filter (dcpl, FILTER_COUNTER, 0, 0, NULL);
|
||||
|
||||
/* The dataset */
|
||||
dset = H5Dcreate (file, "dset", H5T_NATIVE_SCHAR, space, dcpl);
|
||||
assert (dset>=0);
|
||||
|
||||
/* The data */
|
||||
buf = calloc (1, SQUARE (DS_SIZE*CH_SIZE));
|
||||
H5Dwrite (dset, H5T_NATIVE_SCHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
|
||||
free (buf);
|
||||
|
||||
/* Close */
|
||||
H5Dclose (dset);
|
||||
H5Sclose (space);
|
||||
H5Pclose (dcpl);
|
||||
H5Fclose (file);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_rowmaj
|
||||
*
|
||||
* Purpose: Reads the entire dataset using the specified size-squared
|
||||
* I/O requests in row major order.
|
||||
*
|
||||
* Return: Efficiency: data requested divided by data actually read.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, May 14, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static double
|
||||
test_rowmaj (int op, hsize_t cache_size, hsize_t io_size)
|
||||
{
|
||||
hid_t file, dset, mem_space, file_space;
|
||||
signed char *buf = calloc (1, SQUARE(io_size));
|
||||
hsize_t i, j, hs_size[2];
|
||||
hssize_t hs_offset[2];
|
||||
int mdc_nelmts, rdcc_nelmts;
|
||||
double w0;
|
||||
|
||||
H5Pget_cache (fapl_g, &mdc_nelmts, &rdcc_nelmts, NULL, &w0);
|
||||
#ifdef RM_W0
|
||||
w0 = RM_W0;
|
||||
#endif
|
||||
#ifdef RM_NRDCC
|
||||
rdcc_nelmts = RM_NRDCC;
|
||||
#endif
|
||||
H5Pset_cache (fapl_g, mdc_nelmts, rdcc_nelmts,
|
||||
cache_size*SQUARE (CH_SIZE), w0);
|
||||
file = H5Fopen (FILE_NAME, H5F_ACC_RDWR, fapl_g);
|
||||
dset = H5Dopen (file, "dset");
|
||||
file_space = H5Dget_space (dset);
|
||||
nio_g = 0;
|
||||
|
||||
for (i=0; i<CH_SIZE*DS_SIZE; i+=io_size) {
|
||||
#if 0
|
||||
fprintf (stderr, "%5d\b\b\b\b\b", (int)i);
|
||||
fflush (stderr);
|
||||
#endif
|
||||
for (j=0; j<CH_SIZE*DS_SIZE; j+=io_size) {
|
||||
hs_offset[0] = i;
|
||||
hs_size[0] = MIN (io_size, CH_SIZE*DS_SIZE-i);
|
||||
hs_offset[1] = j;
|
||||
hs_size[1] = MIN (io_size, CH_SIZE*DS_SIZE-j);
|
||||
mem_space = H5Screate_simple (2, hs_size, hs_size);
|
||||
H5Sselect_hyperslab (file_space, H5S_SELECT_SET, hs_offset,
|
||||
NULL, hs_size, NULL);
|
||||
|
||||
if (READ==op) {
|
||||
H5Dread (dset, H5T_NATIVE_SCHAR, mem_space, file_space,
|
||||
H5P_DEFAULT, buf);
|
||||
} else {
|
||||
H5Dwrite (dset, H5T_NATIVE_SCHAR, mem_space, file_space,
|
||||
H5P_DEFAULT, buf);
|
||||
}
|
||||
H5Sclose (mem_space);
|
||||
}
|
||||
}
|
||||
|
||||
free (buf);
|
||||
H5Sclose (file_space);
|
||||
H5Dclose (dset);
|
||||
H5Fclose (file);
|
||||
|
||||
return (double)SQUARE(CH_SIZE*DS_SIZE)/(double)nio_g;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_diag
|
||||
*
|
||||
* Purpose: Reads windows diagonally across the dataset. Each window is
|
||||
* offset from the previous window by OFFSET in the x and y
|
||||
* directions. The reading ends after the (k,k) value is read
|
||||
* where k is the maximum index in the dataset.
|
||||
*
|
||||
* Return: Efficiency.
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Friday, May 15, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static double
|
||||
test_diag (int op, hsize_t cache_size, hsize_t io_size, hsize_t offset)
|
||||
{
|
||||
hid_t file, dset, mem_space, file_space;
|
||||
hsize_t i, hs_size[2];
|
||||
hsize_t nio = 0;
|
||||
hssize_t hs_offset[2];
|
||||
signed char *buf = calloc (1, SQUARE (io_size));
|
||||
int mdc_nelmts, rdcc_nelmts;
|
||||
double w0;
|
||||
|
||||
H5Pget_cache (fapl_g, &mdc_nelmts, &rdcc_nelmts, NULL, &w0);
|
||||
#ifdef DIAG_W0
|
||||
w0 = DIAG_W0;
|
||||
#endif
|
||||
#ifdef DIAG_NRDCC
|
||||
rdcc_nelmts = DIAG_NRDCC;
|
||||
#endif
|
||||
H5Pset_cache (fapl_g, mdc_nelmts, rdcc_nelmts,
|
||||
cache_size*SQUARE (CH_SIZE), w0);
|
||||
file = H5Fopen (FILE_NAME, H5F_ACC_RDWR, fapl_g);
|
||||
dset = H5Dopen (file, "dset");
|
||||
file_space = H5Dget_space (dset);
|
||||
nio_g = 0;
|
||||
|
||||
for (i=0, hs_size[0]=io_size; hs_size[0]==io_size; i+=offset) {
|
||||
hs_offset[0] = hs_offset[1] = i;
|
||||
hs_size[0] = hs_size[1] = MIN (io_size, CH_SIZE*DS_SIZE-i);
|
||||
mem_space = H5Screate_simple (2, hs_size, hs_size);
|
||||
H5Sselect_hyperslab (file_space, H5S_SELECT_SET, hs_offset, NULL,
|
||||
hs_size, NULL);
|
||||
if (READ==op) {
|
||||
H5Dread (dset, H5T_NATIVE_SCHAR, mem_space, file_space,
|
||||
H5P_DEFAULT, buf);
|
||||
} else {
|
||||
H5Dwrite (dset, H5T_NATIVE_SCHAR, mem_space, file_space,
|
||||
H5P_DEFAULT, buf);
|
||||
}
|
||||
H5Sclose (mem_space);
|
||||
nio += hs_size[0]*hs_size[1];
|
||||
if (i>0) nio -= SQUARE (io_size-offset);
|
||||
}
|
||||
|
||||
free (buf);
|
||||
H5Sclose (file_space);
|
||||
H5Dclose (dset);
|
||||
H5Fclose (file);
|
||||
|
||||
/*
|
||||
* The extra cast in the following statement is a bug workaround for the
|
||||
* Win32 version 5.0 compiler.
|
||||
* 1998-11-06 ptl
|
||||
*/
|
||||
return (double)(hssize_t)nio/(hssize_t)nio_g;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
*
|
||||
* Purpose: See file prologue.
|
||||
*
|
||||
* Return: Success:
|
||||
*
|
||||
* Failure:
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, May 14, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
hsize_t io_size;
|
||||
double effic, io_percent;
|
||||
FILE *f, *d;
|
||||
int cache_size;
|
||||
double w0;
|
||||
|
||||
/*
|
||||
* Create a global file access property list.
|
||||
*/
|
||||
fapl_g = H5Pcreate (H5P_FILE_ACCESS);
|
||||
H5Pget_cache (fapl_g, NULL, NULL, NULL, &w0);
|
||||
|
||||
/* Create the file */
|
||||
create_dataset ();
|
||||
f = fopen ("x-gnuplot", "w");
|
||||
|
||||
printf("Test %8s %8s %8s\n", "CacheSz", "ChunkSz", "Effic");
|
||||
printf("--------- -------- -------- --------\n");
|
||||
|
||||
#if 1
|
||||
/*
|
||||
* Test row-major reading of the dataset with various sizes of request
|
||||
* windows.
|
||||
*/
|
||||
if (RM_CACHE_STRT==RM_CACHE_END) {
|
||||
fprintf (f, "set yrange [0:1.2]\n");
|
||||
fprintf (f, "set ytics 0, 0.1, 1\n");
|
||||
fprintf (f, "set xlabel \"%s\"\n",
|
||||
"Request size as a fraction of chunk size");
|
||||
fprintf (f, "set ylabel \"Efficiency\"\n");
|
||||
fprintf (f, "set title \"Cache %d chunks, w0=%g, "
|
||||
"Size=(total=%d, chunk=%d)\"\n",
|
||||
RM_CACHE_STRT, w0, DS_SIZE*CH_SIZE, CH_SIZE);
|
||||
} else {
|
||||
fprintf (f, "set autoscale\n");
|
||||
fprintf (f, "set hidden3d\n");
|
||||
}
|
||||
|
||||
fprintf (f, "set terminal postscript\nset output \"x-rowmaj-rd.ps\"\n");
|
||||
fprintf (f, "%s \"x-rowmaj-rd.dat\" title \"RowMaj-Read\" with %s\n",
|
||||
RM_CACHE_STRT==RM_CACHE_END?"plot":"splot",
|
||||
LINESPOINTS);
|
||||
fprintf (f, "set terminal x11\nreplot\n");
|
||||
d = fopen ("x-rowmaj-rd.dat", "w");
|
||||
for (cache_size=RM_CACHE_STRT;
|
||||
cache_size<=RM_CACHE_END;
|
||||
cache_size+=RM_CACHE_DELT) {
|
||||
for (io_percent=RM_START; io_percent<=RM_END; io_percent+=RM_DELTA) {
|
||||
io_size = MAX (1, (int)(CH_SIZE*io_percent));
|
||||
printf ("Rowmaj-rd %8d %8.2f", cache_size, io_percent);
|
||||
fflush (stdout);
|
||||
effic = test_rowmaj (READ, cache_size, io_size);
|
||||
printf (" %8.2f\n", effic);
|
||||
if (RM_CACHE_STRT==RM_CACHE_END) {
|
||||
fprintf (d, "%g %g\n", io_percent, effic);
|
||||
} else {
|
||||
fprintf (d, "%g\n", effic);
|
||||
}
|
||||
}
|
||||
fprintf (d, "\n");
|
||||
}
|
||||
fclose (d);
|
||||
fprintf (f, "pause -1\n");
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
/*
|
||||
* Test row-major writing of the dataset with various sizes of request
|
||||
* windows.
|
||||
*/
|
||||
if (RM_CACHE_STRT==RM_CACHE_END) {
|
||||
fprintf (f, "set yrange [0:1.2]\n");
|
||||
fprintf (f, "set ytics 0, 0.1, 1\n");
|
||||
fprintf (f, "set xlabel \"%s\"\n",
|
||||
"Request size as a fraction of chunk size");
|
||||
fprintf (f, "set ylabel \"Efficiency\"\n");
|
||||
fprintf (f, "set title \"Cache %d chunks,w0=%g, "
|
||||
"Size=(total=%d, chunk=%d)\"\n",
|
||||
RM_CACHE_STRT, w0, DS_SIZE*CH_SIZE, CH_SIZE);
|
||||
} else {
|
||||
fprintf (f, "set autoscale\n");
|
||||
fprintf (f, "set hidden3d\n");
|
||||
}
|
||||
|
||||
fprintf (f, "set terminal postscript\nset output \"x-rowmaj-wr.ps\"\n");
|
||||
fprintf (f, "%s \"x-rowmaj-wr.dat\" title \"RowMaj-Write\" with %s\n",
|
||||
RM_CACHE_STRT==RM_CACHE_END?"plot":"splot",
|
||||
LINESPOINTS);
|
||||
fprintf (f, "set terminal x11\nreplot\n");
|
||||
d = fopen ("x-rowmaj-wr.dat", "w");
|
||||
for (cache_size=RM_CACHE_STRT;
|
||||
cache_size<=RM_CACHE_END;
|
||||
cache_size+=RM_CACHE_DELT) {
|
||||
for (io_percent=RM_START; io_percent<=RM_END; io_percent+=RM_DELTA) {
|
||||
io_size = MAX (1, (int)(CH_SIZE*io_percent));
|
||||
printf ("Rowmaj-wr %8d %8.2f", cache_size, io_percent);
|
||||
fflush (stdout);
|
||||
effic = test_rowmaj (WRITE, cache_size, io_size);
|
||||
printf (" %8.2f\n", effic);
|
||||
if (RM_CACHE_STRT==RM_CACHE_END) {
|
||||
fprintf (d, "%g %g\n", io_percent, effic);
|
||||
} else {
|
||||
fprintf (d, "%g\n", effic);
|
||||
}
|
||||
}
|
||||
fprintf (d, "\n");
|
||||
}
|
||||
fclose (d);
|
||||
fprintf (f, "pause -1\n");
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
/*
|
||||
* Test diagonal read
|
||||
*/
|
||||
if (DIAG_CACHE_STRT==DIAG_CACHE_END) {
|
||||
fprintf (f, "set yrange [0:1.2]\n");
|
||||
fprintf (f, "set ytics 0, 0.1, 1\n");
|
||||
fprintf (f, "set xlabel \"%s\"\n",
|
||||
"Request size as a fraction of chunk size");
|
||||
fprintf (f, "set ylabel \"Efficiency\"\n");
|
||||
fprintf (f, "set title \"Cache %d chunks,w0=%g, "
|
||||
"Size=(total=%d, chunk=%d)\"\n",
|
||||
DIAG_CACHE_STRT, w0, DS_SIZE*CH_SIZE, CH_SIZE);
|
||||
} else {
|
||||
fprintf (f, "set autoscale\n");
|
||||
fprintf (f, "set hidden3d\n");
|
||||
}
|
||||
fprintf (f, "set terminal postscript\nset output \"x-diag-rd.ps\"\n");
|
||||
fprintf (f, "%s \"x-diag-rd.dat\" title \"Diag-Read\" with %s\n",
|
||||
DIAG_CACHE_STRT==DIAG_CACHE_END?"plot":"splot", LINESPOINTS);
|
||||
fprintf (f, "set terminal x11\nreplot\n");
|
||||
d = fopen ("x-diag-rd.dat", "w");
|
||||
for (cache_size=DIAG_CACHE_STRT;
|
||||
cache_size<=DIAG_CACHE_END;
|
||||
cache_size+=DIAG_CACHE_DELT) {
|
||||
for (io_percent=DIAG_START;
|
||||
io_percent<=DIAG_END;
|
||||
io_percent+=DIAG_DELTA) {
|
||||
io_size = MAX (1, (int)(CH_SIZE*io_percent));
|
||||
printf ("Diag-rd %8d %8.2f", cache_size, io_percent);
|
||||
fflush (stdout);
|
||||
effic = test_diag (READ, cache_size, io_size, MAX (1, io_size/2));
|
||||
printf (" %8.2f\n", effic);
|
||||
if (DIAG_CACHE_STRT==DIAG_CACHE_END) {
|
||||
fprintf (d, "%g %g\n", io_percent, effic);
|
||||
} else {
|
||||
fprintf (d, "%g\n", effic);
|
||||
}
|
||||
}
|
||||
fprintf (d, "\n");
|
||||
}
|
||||
fclose (d);
|
||||
fprintf (f, "pause -1\n");
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
/*
|
||||
* Test diagonal write
|
||||
*/
|
||||
if (DIAG_CACHE_STRT==DIAG_CACHE_END) {
|
||||
fprintf (f, "set yrange [0:1.2]\n");
|
||||
fprintf (f, "set ytics 0, 0.1, 1\n");
|
||||
fprintf (f, "set xlabel \"%s\"\n",
|
||||
"Request size as a fraction of chunk size");
|
||||
fprintf (f, "set ylabel \"Efficiency\"\n");
|
||||
fprintf (f, "set title \"Cache %d chunks, w0=%g, "
|
||||
"Size=(total=%d, chunk=%d)\"\n",
|
||||
DIAG_CACHE_STRT, w0, DS_SIZE*CH_SIZE, CH_SIZE);
|
||||
} else {
|
||||
fprintf (f, "set autoscale\n");
|
||||
fprintf (f, "set hidden3d\n");
|
||||
}
|
||||
fprintf (f, "set terminal postscript\nset output \"x-diag-wr.ps\"\n");
|
||||
fprintf (f, "%s \"x-diag-wr.dat\" title \"Diag-Write\" with %s\n",
|
||||
DIAG_CACHE_STRT==DIAG_CACHE_END?"plot":"splot", LINESPOINTS);
|
||||
fprintf (f, "set terminal x11\nreplot\n");
|
||||
d = fopen ("x-diag-wr.dat", "w");
|
||||
for (cache_size=DIAG_CACHE_STRT;
|
||||
cache_size<=DIAG_CACHE_END;
|
||||
cache_size+=DIAG_CACHE_DELT) {
|
||||
for (io_percent=DIAG_START;
|
||||
io_percent<=DIAG_END;
|
||||
io_percent+=DIAG_DELTA) {
|
||||
io_size = MAX (1, (int)(CH_SIZE*io_percent));
|
||||
printf ("Diag-wr %8d %8.2f", cache_size, io_percent);
|
||||
fflush (stdout);
|
||||
effic = test_diag (WRITE, cache_size, io_size, MAX (1, io_size/2));
|
||||
printf (" %8.2f\n", effic);
|
||||
if (DIAG_CACHE_STRT==DIAG_CACHE_END) {
|
||||
fprintf (d, "%g %g\n", io_percent, effic);
|
||||
} else {
|
||||
fprintf (d, "%g\n", effic);
|
||||
}
|
||||
}
|
||||
fprintf (d, "\n");
|
||||
}
|
||||
fclose (d);
|
||||
fprintf (f, "pause -1\n");
|
||||
#endif
|
||||
|
||||
|
||||
H5Pclose (fapl_g);
|
||||
fclose (f);
|
||||
return 0;
|
||||
}
|
||||
|
546
test/iopipe.c
546
test/iopipe.c
@ -1,546 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 1998 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Thursday, March 12, 1998
|
||||
*/
|
||||
|
||||
/* See H5private.h for how to include headers */
|
||||
#undef NDEBUG
|
||||
#include "hdf5.h"
|
||||
|
||||
#ifdef H5_HAVE_WINSOCK_H
|
||||
#include <Winsock.h>
|
||||
#endif
|
||||
|
||||
/*Winsock.h includes windows.h, due to the different value of
|
||||
WINVER, windows.h should be put before H5private.h. Kent yang 6/21/2001*/
|
||||
|
||||
#include "H5private.h"
|
||||
|
||||
#ifdef H5_STDC_HEADERS
|
||||
# include <assert.h>
|
||||
# include <fcntl.h>
|
||||
# include <stdio.h>
|
||||
# include <string.h>
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_UNISTD_H
|
||||
# include <sys/types.h>
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#if defined(H5_TIME_WITH_SYS_TIME)
|
||||
# include <sys/time.h>
|
||||
# include <time.h>
|
||||
#elif defined(H5_HAVE_SYS_TIME_H)
|
||||
# include <sys/time.h>
|
||||
#else
|
||||
# include <time.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_SYS_RESOURCE_H
|
||||
# include <sys/resource.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined (__MWERKS__)
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
#undef H5_HAVE_SYS_TIMEB
|
||||
#endif
|
||||
#ifdef H5_HAVE_SYSTEM
|
||||
#undef H5_HAVE_SYSTEM
|
||||
#endif
|
||||
#endif /* __MWERKS__*/
|
||||
|
||||
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
#include <sys/timeb.h>
|
||||
#endif
|
||||
|
||||
|
||||
#define RAW_FILE_NAME "iopipe.raw"
|
||||
#define HDF5_FILE_NAME "iopipe.h5"
|
||||
#define HEADING "%-16s"
|
||||
#define PROGRESS '='
|
||||
|
||||
#if 0
|
||||
/* Normal testing */
|
||||
#define REQUEST_SIZE_X 4579
|
||||
#define REQUEST_SIZE_Y 4579
|
||||
#define NREAD_REQUESTS 45
|
||||
#define NWRITE_REQUESTS 45
|
||||
#else
|
||||
/* Speedy testing */
|
||||
#define REQUEST_SIZE_X 1000
|
||||
#define REQUEST_SIZE_Y 1000
|
||||
#define NREAD_REQUESTS 45
|
||||
#define NWRITE_REQUESTS 45
|
||||
#endif
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: print_stats
|
||||
*
|
||||
* Purpose: Prints statistics
|
||||
*
|
||||
* Return: void
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, March 12, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
static void
|
||||
print_stats (const char *prefix,
|
||||
struct rusage *r_start, struct rusage *r_stop,
|
||||
struct timeval *t_start, struct timeval *t_stop,
|
||||
size_t nbytes)
|
||||
#else /* H5_HAVE_GETRUSAGE */
|
||||
static void
|
||||
print_stats (const char *prefix,
|
||||
struct timeval *r_start, struct timeval *r_stop,
|
||||
struct timeval *t_start, struct timeval *t_stop,
|
||||
size_t nbytes)
|
||||
#endif /* H5_HAVE_GETRUSAGE */
|
||||
{
|
||||
double e_time, bw;
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
double u_time, s_time;
|
||||
|
||||
u_time = ((double)(r_stop->ru_utime.tv_sec)+
|
||||
(double)(r_stop->ru_utime.tv_usec)/1000000.0) -
|
||||
((double)(r_start->ru_utime.tv_sec)+
|
||||
(double)(r_start->ru_utime.tv_usec)/1000000.0);
|
||||
|
||||
s_time = ((double)(r_stop->ru_stime.tv_sec)+
|
||||
(double)(r_stop->ru_stime.tv_usec)/1000000.0) -
|
||||
((double)(r_start->ru_stime.tv_sec)+
|
||||
(double)(r_start->ru_stime.tv_usec)/1000000.0);
|
||||
#endif
|
||||
#ifndef H5_HAVE_SYS_TIMEB
|
||||
e_time = ((double)(t_stop->tv_sec)+
|
||||
(double)(t_stop->tv_usec)/1000000.0) -
|
||||
((double)(t_start->tv_sec)+
|
||||
(double)(t_start->tv_usec)/1000000.0);
|
||||
#else
|
||||
e_time = ((double)(t_stop->tv_sec)+
|
||||
(double)(t_stop->tv_usec)/1000.0) -
|
||||
((double)(t_start->tv_sec)+
|
||||
(double)(t_start->tv_usec)/1000.0);
|
||||
#endif
|
||||
bw = (double)nbytes / e_time;
|
||||
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
printf (HEADING "%1.2fuser %1.2fsystem %1.2felapsed %1.2fMB/s\n",
|
||||
prefix, u_time, s_time, e_time, bw/(1024*1024));
|
||||
#else
|
||||
printf (HEADING "%1.2felapsed %1.2fMB/s\n",
|
||||
prefix, e_time, bw/(1024*1024));
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: synchronize
|
||||
*
|
||||
* Purpose:
|
||||
*
|
||||
* Return: void
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, March 12, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
synchronize (void)
|
||||
{
|
||||
#ifdef H5_HAVE_SYSTEM
|
||||
#ifdef WIN32
|
||||
#ifdef __WATCOMC__
|
||||
flushall();
|
||||
#else /* __WATCOMC__ */
|
||||
_flushall();
|
||||
#endif /* __WATCOMC__ */
|
||||
#else
|
||||
system ("sync");
|
||||
system ("df >/dev/null");
|
||||
#endif
|
||||
#if 0
|
||||
/*
|
||||
* This works well on Linux to get rid of all cached disk buffers. The
|
||||
* number should be approximately the amount of RAM in MB. Do not
|
||||
* include swap space in that amount or the command will fail.
|
||||
*/
|
||||
system ("/sbin/swapout 128");
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
*
|
||||
* Purpose:
|
||||
*
|
||||
* Return: Success:
|
||||
*
|
||||
* Failure:
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, March 12, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
static hsize_t size[2] = {REQUEST_SIZE_X, REQUEST_SIZE_Y};
|
||||
static int nread=NREAD_REQUESTS, nwrite=NWRITE_REQUESTS;
|
||||
|
||||
unsigned char *the_data = NULL;
|
||||
hid_t file, dset, file_space=-1;
|
||||
herr_t status;
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
struct rusage r_start, r_stop;
|
||||
#else
|
||||
struct timeval r_start, r_stop;
|
||||
#endif
|
||||
struct timeval t_start, t_stop;
|
||||
int i, fd;
|
||||
hssize_t n;
|
||||
off_t offset;
|
||||
hssize_t start[2];
|
||||
hsize_t count[2];
|
||||
|
||||
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
struct _timeb *tbstart = malloc(sizeof(struct _timeb));
|
||||
struct _timeb *tbstop = malloc(sizeof(struct _timeb));
|
||||
#endif
|
||||
/*
|
||||
* The extra cast in the following statement is a bug workaround for the
|
||||
* Win32 version 5.0 compiler.
|
||||
* 1998-11-06 ptl
|
||||
*/
|
||||
printf ("I/O request size is %1.1fMB\n",
|
||||
(double)(hssize_t)(size[0]*size[1])/1024.0*1024);
|
||||
|
||||
/* Open the files */
|
||||
file = H5Fcreate (HDF5_FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
||||
assert (file>=0);
|
||||
fd = HDopen (RAW_FILE_NAME, O_RDWR|O_CREAT|O_TRUNC, 0666);
|
||||
assert (fd>=0);
|
||||
|
||||
/* Create the dataset */
|
||||
file_space = H5Screate_simple (2, size, size);
|
||||
assert (file_space>=0);
|
||||
dset = H5Dcreate (file, "dset", H5T_NATIVE_UCHAR, file_space, H5P_DEFAULT);
|
||||
assert (dset>=0);
|
||||
the_data = malloc ((size_t)(size[0]*size[1]));
|
||||
/*initial fill for lazy malloc*/
|
||||
memset (the_data, 0xAA, (size_t)(size[0]*size[1]));
|
||||
|
||||
/* Fill raw */
|
||||
synchronize ();
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
printf("Before getrusage() call\n");
|
||||
getrusage (RUSAGE_SELF, &r_start);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_start, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstart);
|
||||
#endif
|
||||
#endif
|
||||
fprintf (stderr, HEADING, "fill raw");
|
||||
for (i=0; i<nwrite; i++) {
|
||||
putc (PROGRESS, stderr);
|
||||
fflush (stderr);
|
||||
memset (the_data, 0xAA, (size_t)(size[0]*size[1]));
|
||||
}
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_stop);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_stop, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstop);
|
||||
t_start.tv_sec = tbstart->time;
|
||||
t_start.tv_usec = tbstart->millitm;
|
||||
t_stop.tv_sec = tbstop->time;
|
||||
t_stop.tv_usec = tbstop->millitm;
|
||||
#endif
|
||||
#endif
|
||||
putc ('\n', stderr);
|
||||
print_stats ("fill raw",
|
||||
&r_start, &r_stop, &t_start, &t_stop,
|
||||
(size_t)(nread*size[0]*size[1]));
|
||||
|
||||
|
||||
/* Fill hdf5 */
|
||||
synchronize ();
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_start);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_start, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstart);
|
||||
#endif
|
||||
#endif
|
||||
fprintf (stderr, HEADING, "fill hdf5");
|
||||
for (i=0; i<nread; i++) {
|
||||
putc (PROGRESS, stderr);
|
||||
fflush (stderr);
|
||||
status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
|
||||
H5P_DEFAULT, the_data);
|
||||
assert (status>=0);
|
||||
}
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_stop);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_stop, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstop);
|
||||
t_start.tv_sec = tbstart->time;
|
||||
t_start.tv_usec = tbstart->millitm;
|
||||
t_stop.tv_sec = tbstop->time;
|
||||
t_stop.tv_usec = tbstop->millitm;
|
||||
#endif
|
||||
#endif
|
||||
putc ('\n', stderr);
|
||||
print_stats ("fill hdf5",
|
||||
&r_start, &r_stop, &t_start, &t_stop,
|
||||
(size_t)(nread*size[0]*size[1]));
|
||||
|
||||
/* Write the raw dataset */
|
||||
synchronize ();
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_start);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_start, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstart);
|
||||
#endif
|
||||
#endif
|
||||
fprintf (stderr, HEADING, "out raw");
|
||||
for (i=0; i<nwrite; i++) {
|
||||
putc (PROGRESS, stderr);
|
||||
fflush (stderr);
|
||||
offset = lseek (fd, 0, SEEK_SET);
|
||||
assert (0==offset);
|
||||
n = write (fd, the_data, (size_t)(size[0]*size[1]));
|
||||
assert (n>=0 && (size_t)n==size[0]*size[1]);
|
||||
}
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_stop);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_stop, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstop);
|
||||
t_start.tv_sec = tbstart->time;
|
||||
t_start.tv_usec = tbstart->millitm;
|
||||
t_stop.tv_sec = tbstop->time;
|
||||
t_stop.tv_usec = tbstop->millitm;
|
||||
#endif
|
||||
#endif
|
||||
putc ('\n', stderr);
|
||||
print_stats ("out raw",
|
||||
&r_start, &r_stop, &t_start, &t_stop,
|
||||
(size_t)(nread*size[0]*size[1]));
|
||||
|
||||
/* Write the hdf5 dataset */
|
||||
synchronize ();
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_start);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_start, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstart);
|
||||
#endif
|
||||
#endif
|
||||
fprintf (stderr, HEADING, "out hdf5");
|
||||
for (i=0; i<nwrite; i++) {
|
||||
putc (PROGRESS, stderr);
|
||||
fflush (stderr);
|
||||
status = H5Dwrite (dset, H5T_NATIVE_UCHAR, H5S_ALL, H5S_ALL,
|
||||
H5P_DEFAULT, the_data);
|
||||
assert (status>=0);
|
||||
}
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_stop);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_stop, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstop);
|
||||
t_start.tv_sec = tbstart->time;
|
||||
t_start.tv_usec = tbstart->millitm;
|
||||
t_stop.tv_sec = tbstop->time;
|
||||
t_stop.tv_usec = tbstop->millitm;
|
||||
#endif
|
||||
#endif
|
||||
putc ('\n', stderr);
|
||||
print_stats ("out hdf5",
|
||||
&r_start, &r_stop, &t_start, &t_stop,
|
||||
(size_t)(nread*size[0]*size[1]));
|
||||
|
||||
/* Read the raw dataset */
|
||||
synchronize ();
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_start);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_start, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstart);
|
||||
#endif
|
||||
#endif
|
||||
fprintf (stderr, HEADING, "in raw");
|
||||
for (i=0; i<nread; i++) {
|
||||
putc (PROGRESS, stderr);
|
||||
fflush (stderr);
|
||||
offset = lseek (fd, 0, SEEK_SET);
|
||||
assert (0==offset);
|
||||
n = read (fd, the_data, (size_t)(size[0]*size[1]));
|
||||
assert (n>=0 && (size_t)n==size[0]*size[1]);
|
||||
}
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_stop);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_stop, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstop);
|
||||
t_start.tv_sec = tbstart->time;
|
||||
t_start.tv_usec = tbstart->millitm;
|
||||
t_stop.tv_sec = tbstop->time;
|
||||
t_stop.tv_usec = tbstop->millitm;
|
||||
#endif
|
||||
#endif
|
||||
putc ('\n', stderr);
|
||||
print_stats ("in raw",
|
||||
&r_start, &r_stop, &t_start, &t_stop,
|
||||
(size_t)(nread*size[0]*size[1]));
|
||||
|
||||
|
||||
/* Read the hdf5 dataset */
|
||||
synchronize ();
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_start);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_start, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstart);
|
||||
#endif
|
||||
#endif
|
||||
fprintf (stderr, HEADING, "in hdf5");
|
||||
for (i=0; i<nread; i++) {
|
||||
putc (PROGRESS, stderr);
|
||||
fflush (stderr);
|
||||
status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
|
||||
H5P_DEFAULT, the_data);
|
||||
assert (status>=0);
|
||||
}
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_stop);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_stop, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstop);
|
||||
t_start.tv_sec = tbstart->time;
|
||||
t_start.tv_usec = tbstart->millitm;
|
||||
t_stop.tv_sec = tbstop->time;
|
||||
t_stop.tv_usec = tbstop->millitm;
|
||||
#endif
|
||||
#endif
|
||||
putc ('\n', stderr);
|
||||
print_stats ("in hdf5",
|
||||
&r_start, &r_stop, &t_start, &t_stop,
|
||||
(size_t)(nread*size[0]*size[1]));
|
||||
|
||||
/* Read hyperslab */
|
||||
assert (size[0]>20 && size[1]>20);
|
||||
start[0] = start[1] = 10;
|
||||
count[0] = count[1] = size[0]-20;
|
||||
status = H5Sselect_hyperslab (file_space, H5S_SELECT_SET, start, NULL, count, NULL);
|
||||
assert (status>=0);
|
||||
synchronize ();
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_start);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_start, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstart);
|
||||
#endif
|
||||
#endif
|
||||
fprintf (stderr, HEADING, "in hdf5 partial");
|
||||
for (i=0; i<nread; i++) {
|
||||
putc (PROGRESS, stderr);
|
||||
fflush (stderr);
|
||||
status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
|
||||
H5P_DEFAULT, the_data);
|
||||
assert (status>=0);
|
||||
}
|
||||
#ifdef H5_HAVE_GETRUSAGE
|
||||
getrusage (RUSAGE_SELF, &r_stop);
|
||||
#endif
|
||||
#ifdef H5_HAVE_GETTIMEOFDAY
|
||||
gettimeofday (&t_stop, NULL);
|
||||
#else
|
||||
#ifdef H5_HAVE_SYS_TIMEB
|
||||
_ftime(tbstop);
|
||||
t_start.tv_sec = tbstart->time;
|
||||
t_start.tv_usec = tbstart->millitm;
|
||||
t_stop.tv_sec = tbstop->time;
|
||||
t_stop.tv_usec = tbstop->millitm;
|
||||
#endif
|
||||
#endif
|
||||
putc ('\n', stderr);
|
||||
print_stats ("in hdf5 partial",
|
||||
&r_start, &r_stop, &t_start, &t_stop,
|
||||
(size_t)(nread*count[0]*count[1]));
|
||||
|
||||
|
||||
|
||||
/* Close everything */
|
||||
HDclose (fd);
|
||||
H5Dclose (dset);
|
||||
H5Sclose (file_space);
|
||||
H5Fclose (file);
|
||||
|
||||
return 0;
|
||||
}
|
403
test/overhead.c
403
test/overhead.c
@ -1,403 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 1998 NCSA
|
||||
* All rights reserved.
|
||||
*
|
||||
* Programmer: Robb Matzke <matzke@llnl.gov>
|
||||
* Monday, September 28, 1998
|
||||
*
|
||||
* Purpose: Creates a chunked dataset and measures the storage overhead.
|
||||
*/
|
||||
|
||||
/* See H5private.h for how to include headers */
|
||||
#undef NDEBUG
|
||||
#include "hdf5.h"
|
||||
|
||||
#ifdef H5_STDC_HEADERS
|
||||
# include <ctype.h>
|
||||
# include <fcntl.h>
|
||||
# include <stdlib.h>
|
||||
# include <sys/stat.h>
|
||||
# include <string.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_IO_H
|
||||
# include <io.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_UNISTD_H
|
||||
# include <sys/types.h>
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef H5_HAVE_IO_H
|
||||
# include <io.h>
|
||||
#endif
|
||||
|
||||
#ifndef H5_HAVE_ATTRIBUTE
|
||||
# undef __attribute__
|
||||
# define __attribute__(X) /*void*/
|
||||
# define UNUSED /*void*/
|
||||
#else
|
||||
# define UNUSED __attribute__((unused))
|
||||
#endif
|
||||
|
||||
#define FILE_NAME_1 "overhead.h5"
|
||||
#define FALSE 0
|
||||
#define TRUE 1
|
||||
|
||||
typedef enum fill_t {
|
||||
FILL_ALL,
|
||||
FILL_FORWARD,
|
||||
FILL_REVERSE,
|
||||
FILL_INWARD,
|
||||
FILL_OUTWARD,
|
||||
FILL_RANDOM
|
||||
} fill_t;
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: usage
|
||||
*
|
||||
* Purpose: Prints a usage message and exits.
|
||||
*
|
||||
* Return: never returns
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Wednesday, September 30, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
usage(const char *prog)
|
||||
{
|
||||
fprintf(stderr, "usage: %s [STYLE|cache] [LEFT [MIDDLE [RIGHT]]]\n",
|
||||
prog);
|
||||
fprintf(stderr, "\
|
||||
STYLE is the order that the dataset is filled and should be one of:\n\
|
||||
forward -- Fill the dataset from lowest address to highest\n\
|
||||
address. This style tests the right split ratio.\n\
|
||||
reverse -- Fill the dataset from highest address to lowest\n\
|
||||
address. This is the reverse order of `forward' and\n\
|
||||
tests the left split ratio.\n\
|
||||
inward -- Fill beginning at both the lowest and highest\n\
|
||||
addresses and work in toward the center of the\n\
|
||||
dataset. This tests the middle split ratio.\n\
|
||||
outward -- Start at the center of the dataset and work outward\n\
|
||||
toward the lowest and highest addresses. This tests\n\
|
||||
both left and right split ratios.\n\
|
||||
random -- Write the chunks of the dataset in random order. This\n\
|
||||
tests all split ratios.\n\
|
||||
If no fill style is specified then all fill styles are tried and a\n\
|
||||
single value is printed for each one.\n\
|
||||
\n\
|
||||
If the word `cache' is used instead of a fill style then the raw data\n\
|
||||
cache is enabled. It is not possible to enable the raw data cache when\n\
|
||||
a specific fill style is used because H5Fflush() is called after each\n\
|
||||
chunk is written in order to calculate overhead during the test. If\n\
|
||||
the cache is enabled then chunks are written to disk in different orders\n\
|
||||
than the actual H5Dwrite() calls in the test due to collisions and the\n\
|
||||
resulting B-tree will be split differently.\n\
|
||||
\n\
|
||||
LEFT, MIDDLE, and RIGHT are the ratios to use for splitting and should\n\
|
||||
be values between zero and one, inclusive.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: cleanup
|
||||
*
|
||||
* Purpose: Removes test files
|
||||
*
|
||||
* Return: void
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Thursday, June 4, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void
|
||||
cleanup (void)
|
||||
{
|
||||
if (!getenv ("HDF5_NOCLEANUP")) {
|
||||
remove (FILE_NAME_1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: display_error_cb
|
||||
*
|
||||
* Purpose: Displays the error stack after printing "*FAILED*".
|
||||
*
|
||||
* Return: Success: 0
|
||||
*
|
||||
* Failure: -1
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Wednesday, March 4, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
display_error_cb (void UNUSED *client_data)
|
||||
{
|
||||
puts ("*FAILED*");
|
||||
H5Eprint (stdout);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test
|
||||
*
|
||||
* Purpose: The guts of the test
|
||||
*
|
||||
* Return: Success: 0
|
||||
*
|
||||
* Failure: number of errors
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Wednesday, September 30, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static int
|
||||
test(fill_t fill_style, const double splits[],
|
||||
hbool_t verbose, hbool_t use_rdcc)
|
||||
{
|
||||
hid_t file, fapl, dcpl, xfer, mspace, fspace, dset;
|
||||
hsize_t ch_size[1] = {1}; /*chunk size */
|
||||
hsize_t cur_size[1] = {1000}; /*current dataset size */
|
||||
hsize_t max_size[1] = {H5S_UNLIMITED}; /*maximum dataset size */
|
||||
hssize_t hs_start[1]; /*hyperslab start offset*/
|
||||
hsize_t hs_count[1] = {1}; /*hyperslab nelmts */
|
||||
int fd; /*h5 file direct */
|
||||
static int *had = NULL; /*for random filling */
|
||||
const char *sname; /*fill style nam */
|
||||
int mdc_nelmts; /*num meta objs to cache*/
|
||||
hsize_t i;
|
||||
int j;
|
||||
struct stat sb;
|
||||
|
||||
if (!had) had = calloc(cur_size[0], sizeof(int));
|
||||
if ((fapl=H5Pcreate(H5P_FILE_ACCESS))<0) goto error;
|
||||
if (!use_rdcc) {
|
||||
if (H5Pget_cache(fapl, &mdc_nelmts, NULL, NULL, NULL)<0) goto error;
|
||||
if (H5Pset_cache(fapl, mdc_nelmts, 0, 0, 0.0)<0) goto error;
|
||||
}
|
||||
if ((file=H5Fcreate(FILE_NAME_1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
|
||||
goto error;
|
||||
}
|
||||
if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
|
||||
if (H5Pset_chunk(dcpl, 1, ch_size)<0) goto error;
|
||||
if ((xfer=H5Pcreate(H5P_DATASET_XFER))<0) goto error;
|
||||
if (H5Pset_btree_ratios(xfer, splits[0], splits[1], splits[2])<0) {
|
||||
goto error;
|
||||
}
|
||||
if ((fspace=H5Screate_simple(1, cur_size, max_size))<0) goto error;
|
||||
if ((mspace=H5Screate_simple(1, ch_size, ch_size))<0) goto error;
|
||||
if ((dset=H5Dcreate(file, "chunked", H5T_NATIVE_INT,
|
||||
fspace, dcpl))<0) goto error;
|
||||
|
||||
#if !defined( __MWERKS__)
|
||||
|
||||
/*
|
||||
workaround for a bug in the Metrowerks open function
|
||||
pvn
|
||||
*/
|
||||
if ((fd=open(FILE_NAME_1, O_RDONLY))<0) goto error;
|
||||
#endif
|
||||
|
||||
for (i=1; i<=cur_size[0]; i++) {
|
||||
|
||||
/* Decide which chunk to write to */
|
||||
switch (fill_style) {
|
||||
case FILL_FORWARD:
|
||||
hs_start[0] = i-1;
|
||||
break;
|
||||
case FILL_REVERSE:
|
||||
hs_start[0] = cur_size[0]-i;
|
||||
break;
|
||||
case FILL_INWARD:
|
||||
hs_start[0] = i%2 ? i/2 : cur_size[0]-i/2;
|
||||
break;
|
||||
case FILL_OUTWARD:
|
||||
j = (cur_size[0]-i)+1;
|
||||
hs_start[0] = j%2 ? j/2 : cur_size[0]-j/2;
|
||||
break;
|
||||
case FILL_RANDOM:
|
||||
for (j=rand()%cur_size[0]; had[j]; j=(j+1)%cur_size[0]) /*void*/;
|
||||
hs_start[0] = j;
|
||||
had[j] = 1;
|
||||
break;
|
||||
case FILL_ALL:
|
||||
abort();
|
||||
}
|
||||
|
||||
/* Write the chunk */
|
||||
if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_start, NULL,
|
||||
hs_count, NULL)<0) goto error;
|
||||
if (H5Dwrite(dset, H5T_NATIVE_INT, mspace, fspace, xfer, &i)<0) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
||||
#if !defined( __MWERKS__)
|
||||
|
||||
/* Determine overhead */
|
||||
if (verbose) {
|
||||
if (H5Fflush(file, H5F_SCOPE_LOCAL)<0) goto error;
|
||||
if (fstat(fd, &sb)<0) goto error;
|
||||
/*
|
||||
* The extra cast in the following statement is a bug workaround
|
||||
* for the Win32 version 5.0 compiler.
|
||||
* 1998-11-06 ptl
|
||||
*/
|
||||
printf("%4lu %8.3f ***\n",
|
||||
(unsigned long)i,
|
||||
(double)(hssize_t)(sb.st_size-i*sizeof(int))/(hssize_t)i);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
}
|
||||
|
||||
H5Dclose(dset);
|
||||
H5Sclose(mspace);
|
||||
H5Sclose(fspace);
|
||||
H5Pclose(dcpl);
|
||||
H5Fclose(file);
|
||||
|
||||
if (!verbose) {
|
||||
switch (fill_style) {
|
||||
case FILL_FORWARD:
|
||||
sname = "forward";
|
||||
break;
|
||||
case FILL_REVERSE:
|
||||
sname = "reverse";
|
||||
break;
|
||||
case FILL_INWARD:
|
||||
sname = "inward";
|
||||
break;
|
||||
case FILL_OUTWARD:
|
||||
sname = "outward";
|
||||
break;
|
||||
case FILL_RANDOM:
|
||||
sname = "random";
|
||||
break;
|
||||
case FILL_ALL:
|
||||
abort();
|
||||
}
|
||||
|
||||
#if !defined( __MWERKS__)
|
||||
|
||||
if (fstat(fd, &sb)<0) goto error;
|
||||
printf("%-7s %8.3f\n", sname,
|
||||
(double)(hssize_t)(sb.st_size-cur_size[0]*sizeof(int))/
|
||||
(hssize_t)cur_size[0]);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
#if !defined( __MWERKS__)
|
||||
close(fd);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
H5Dclose(dset);
|
||||
H5Sclose(mspace);
|
||||
H5Sclose(fspace);
|
||||
H5Pclose(dcpl);
|
||||
H5Fclose(file);
|
||||
free(had);
|
||||
close(fd);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: main
|
||||
*
|
||||
* Purpose:
|
||||
*
|
||||
* Return: Success: zero
|
||||
*
|
||||
* Failure: non-zero
|
||||
*
|
||||
* Programmer: Robb Matzke
|
||||
* Monday, September 28, 1998
|
||||
*
|
||||
* Modifications:
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
hid_t xfer;
|
||||
fill_t fill_style = FILL_ALL;
|
||||
hbool_t use_cache = FALSE;
|
||||
double splits[3];
|
||||
int i, j, nerrors=0;
|
||||
|
||||
/* Default split ratios */
|
||||
H5Eset_auto(display_error_cb, NULL);
|
||||
if ((xfer=H5Pcreate(H5P_DATASET_XFER))<0) goto error;
|
||||
if (H5Pget_btree_ratios(xfer, splits+0, splits+1, splits+2)<0) {
|
||||
goto error;
|
||||
}
|
||||
if (H5Pclose(xfer)<0) goto error;
|
||||
|
||||
/* Parse command-line options */
|
||||
for (i=1, j=0; i<argc; i++) {
|
||||
if (!strcmp(argv[i], "forward")) {
|
||||
fill_style = FILL_FORWARD;
|
||||
} else if (!strcmp(argv[i], "reverse")) {
|
||||
fill_style = FILL_REVERSE;
|
||||
} else if (!strcmp(argv[i], "inward")) {
|
||||
fill_style = FILL_INWARD;
|
||||
} else if (!strcmp(argv[i], "outward")) {
|
||||
fill_style = FILL_OUTWARD;
|
||||
} else if (!strcmp(argv[i], "random")) {
|
||||
fill_style = FILL_RANDOM;
|
||||
} else if (!strcmp(argv[i], "cache")) {
|
||||
use_cache = TRUE;
|
||||
} else if (j<3 && (isdigit(argv[i][0]) || '.'==argv[i][0])) {
|
||||
splits[j++] = strtod(argv[i], NULL);
|
||||
} else {
|
||||
usage(argv[0]);
|
||||
}
|
||||
}
|
||||
|
||||
if (FILL_ALL==fill_style) {
|
||||
printf("%-7s %8s\n", "Style", "Bytes/Chunk");
|
||||
printf("%-7s %8s\n", "-----", "-----------");
|
||||
nerrors += test(FILL_FORWARD, splits, FALSE, use_cache);
|
||||
nerrors += test(FILL_REVERSE, splits, FALSE, use_cache);
|
||||
nerrors += test(FILL_INWARD, splits, FALSE, use_cache);
|
||||
nerrors += test(FILL_OUTWARD, splits, FALSE, use_cache);
|
||||
nerrors += test(FILL_RANDOM, splits, FALSE, use_cache);
|
||||
} else {
|
||||
if (use_cache) usage(argv[0]);
|
||||
nerrors += test(fill_style, splits, TRUE, FALSE);
|
||||
}
|
||||
if (nerrors>0) goto error;
|
||||
cleanup();
|
||||
return 0;
|
||||
|
||||
error:
|
||||
fprintf(stderr, "*** ERRORS DETECTED ***\n");
|
||||
return 1;
|
||||
}
|
Loading…
Reference in New Issue
Block a user