mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
61ab6a6b46
Added features Description: There were no automatic tests for transfering zero elements. Solution: t_dset.c: Added two new patterns of ZROW (zero rows for process 0) and ZCOL(zero columns for process 0). ZROW test was added but it failed because the current library does not accept it. Not compiled in now. Need to fix the library before turning it back on again and also to add the ZCOL test. t_mdset.c: Added statement to show progress. Also the MPI_Barrier() call get processes synchornoized. It eliminates the racing condition but this is not a permenant solution. The library code needs to be fixed. testphdf5.c: Added a bunch of MPI_Type_XXX debug code. Added the -md option to skip the multiple datasets tests. Changed the cosmitic appearance of the banner messages. testphdf5.h: When an error is detected, the old way was to call MPI_Finalize() before exiting. This sometimes hangs because some processes may be waiting for a message of a different tag. Changed to call MPI_Abort() for now so that the whole MPI job would abort rather than hanging due resource limits exceeded. Added the definition of ZROW and ZCOL. Platforms tested: Modi4 -64.
75 lines
2.6 KiB
C
75 lines
2.6 KiB
C
/* $Id$ */
|
|
|
|
#ifndef PHDF5TEST_H
|
|
#define PHDF5TEST_H
|
|
|
|
#include <assert.h>
|
|
#include <stdlib.h>
|
|
#include <hdf5.h>
|
|
#include <h5test.h>
|
|
|
|
/* Define some handy debugging shorthands, routines, ... */
|
|
/* debugging tools */
|
|
|
|
#define MESG(x) \
|
|
if (verbose) printf("%s\n", x); \
|
|
|
|
#define VRFY(val, mesg) do { \
|
|
if (val) { \
|
|
if (*mesg != '\0'){ \
|
|
MESG(mesg); \
|
|
} \
|
|
} \
|
|
else{ \
|
|
printf("*** PHDF5 Assertion failed (%s) at line %4d in %s\n", \
|
|
mesg, (int)__LINE__, __FILE__); \
|
|
nerrors++; \
|
|
H5Eprint (stdout); \
|
|
fflush(stdout); \
|
|
if (!verbose){ \
|
|
printf("aborting MPI process\n"); \
|
|
MPI_Abort(MPI_COMM_WORLD, nerrors); \
|
|
} \
|
|
} \
|
|
H5Eclear(); \
|
|
} while(0)
|
|
|
|
#define MPI_BANNER(mesg)\
|
|
{printf("--------------------------------\n");\
|
|
printf("Proc %d: ", mpi_rank); \
|
|
printf("*** %s\n", mesg);\
|
|
printf("--------------------------------\n");}
|
|
|
|
#define MAINPROCESS (!mpi_rank) /* define process 0 as main process */
|
|
|
|
#define SYNC(comm)\
|
|
{MPI_BANNER("doing a SYNC"); MPI_Barrier(comm); MPI_BANNER("SYNC DONE");}
|
|
/* End of Define some handy debugging shorthands, routines, ... */
|
|
|
|
/* Constants definitions */
|
|
#define DIM0 1024 /* Default dataset sizes. */
|
|
#define DIM1 1280 /* Values are from a monitor pixel sizes */
|
|
#define RANK 2
|
|
#define DATASETNAME1 "Data1"
|
|
#define DATASETNAME2 "Data2"
|
|
#define DATASETNAME3 "Data3"
|
|
/* hyperslab layout styles */
|
|
#define BYROW 1 /* divide into slabs of rows */
|
|
#define BYCOL 2 /* divide into blocks of columns */
|
|
#define ZROW 3 /* same as BYCOL except process 0 gets 0 rows */
|
|
#define ZCOL 4 /* same as BYCOL except process 0 gets 0 columns */
|
|
|
|
|
|
/* dataset data type. Int's can be easily octo dumped. */
|
|
typedef int DATATYPE;
|
|
|
|
/* shared global variables */
|
|
extern int dim0, dim1; /* Dataset dimensions */
|
|
extern int chunkdim0, chunkdim1; /* Chunk dimensions */
|
|
extern int nerrors; /* errors count */
|
|
extern int verbose; /* verbose, default as no. */
|
|
extern herr_t (*old_func)(void*); /* previous error handler */
|
|
extern void *old_client_data; /* previous error handler arg.*/
|
|
|
|
#endif /* PHDF5TEST_H */
|