[svn-r4110]

Purpose:
    feature
Description:
    allows the option of building the library libhdf-inst.a so that it can
    link with either the Pablo Trace Libraries or with the Pablo Performance
    Capture Facility (PCF)
Solution:
    Added code for conditional compilation using the PCF_BUILD flag. When the
    library is made, the user can specify PABLO_BUILD=PCF which will cause the
    -DPCF_BUILD to be passed to the compiler.
Platforms tested:
    Solaris, IRIX64
This commit is contained in:
Dan Wells 2001-07-05 10:07:00 -05:00
parent d9d71b06e4
commit 5fa81dec82
10 changed files with 1779 additions and 1267 deletions

View File

@ -131,7 +131,7 @@ int HDFtraceFSETPOS( FILE *stream, const fpos_t *position ) ;
void HDFtraceREWIND( FILE *stream ) ;
ssize_t HDFtraceWRITE( int fd, const void *buf, size_t nbytes );
size_t HDFtraceFWRITE( const void *, size_t , size_t , FILE * );
int HDFtracePUTS( char *s ) ;
int HDFtracePUTS( const char *s ) ;
int HDFtraceFPUTC( int c, FILE *stream ) ;
int HDFtraceFPUTS( const char *s, FILE *stream ) ;
@ -293,6 +293,7 @@ void HDFtraceIOEnd ( int, double, char * );
#include "HDFmpioProtos.h"
/*
#ifdef MPI_File_open
#undef MPI_File_open
#endif
@ -410,10 +411,13 @@ void HDFtraceIOEnd ( int, double, char * );
#define MPI_File_set_atomicity HDF_MPI_File_set_atomicity
#define MPI_File_get_atomicity HDF_MPI_File_get_atomicity
#define MPI_File_sync HDF_MPI_File_sync
#endif /* HAVE_PARALLEL */
#endif /* HAVE_PARALLEL */
#endif
*/
#endif
#endif
#ifdef __cplusplus
}
#endif
#endif /* HAVE_PARALLEL */
#endif /* HDFIOTRACE conditional */

View File

@ -1,3 +1,42 @@
#ifdef PCF_BUILD
#define MPI_File_open PCF_MPI_File_open
#define MPI_File_close PCF_MPI_File_close
#define MPI_File_set_size PCF_MPI_File_set_size
#define MPI_File_get_size PCF_MPI_File_get_size
#define MPI_File_set_view PCF_MPI_File_set_view
#define MPI_File_get_view PCF_MPI_File_get_view
#define MPI_File_read_at PCF_MPI_File_read_at
#define MPI_File_read_at_all PCF_MPI_File_read_at_all
#define MPI_File_write_at PCF_MPI_File_write_at
#define MPI_File_write_at_all PCF_MPI_File_write_at_all
#define MPI_File_sync PCF_MPI_File_sync
int PCF_MPI_File_open( MPI_Comm comm, char *filename, int amode,
MPI_Info info, MPI_File *fh );
int PCF_MPI_File_close( MPI_File *fh );
int PCF_MPI_File_delete( char *filename, MPI_Info info );
int PCF_MPI_File_set_size( MPI_File fh, MPI_Offset size );
int PCF_MPI_File_get_size( MPI_File fh, MPI_Offset *size );
int PCF_MPI_File_set_view( MPI_File fh, MPI_Offset disp, MPI_Datatype etype,
MPI_Datatype filetype, char *datarep,
MPI_Info info );
int PCF_MPI_File_get_view( MPI_File fh, MPI_Offset *disp,
MPI_Datatype *etype, MPI_Datatype *filetype,
char *datarep );
int PCF_MPI_File_read_at( MPI_File fh, MPI_Offset offset, void *buf,
int count, MPI_Datatype datatype,
MPI_Status *status );
int PCF_MPI_File_read_at_all( MPI_File fh, MPI_Offset offset, void *buf,
int count, MPI_Datatype datatype,
MPI_Status *status );
int PCF_MPI_File_write_at( MPI_File fh, MPI_Offset offset, void *buf,
int count, MPI_Datatype datatype,
MPI_Status *status );
int PCF_MPI_File_write_at_all( MPI_File fh, MPI_Offset offset, void *buf,
int count, MPI_Datatype datatype,
MPI_Status *status );
int PCF_MPI_File_sync( MPI_File fh );
#else
#define MPI_File_open HDF_MPI_File_open
#define MPI_File_close HDF_MPI_File_close
#define MPI_File_set_size HDF_MPI_File_set_size
@ -35,3 +74,4 @@ int HDF_MPI_File_write_at_all( MPI_File fh, MPI_Offset offset, void *buf,
int count, MPI_Datatype datatype,
MPI_Status *status );
int HDF_MPI_File_sync( MPI_File fh );
#endif /* PCF_BUILD */

View File

@ -9,6 +9,7 @@ top_builddir=..
srcdir=@srcdir@
@COMMENCE@
TRACE=perl ../bin/trace
.SUFFIXES: .c .o .lo .x
###############################################################################
## MODIFICATONS FOR CREATING THE PABLO INSTRUMENTED LIBRARY libhdf5-inst.a
## For Pablo instrumenation of parallel code, remove the # from in front of
@ -19,7 +20,8 @@ TRACE=perl ../bin/trace
###############################################################################
#PABLO_MPIO_FLAGS = -DH5_HAVE_PARALLEL -DH5_HAVE_MPIOTRACE
PABLO_INC = $(PABLO_TRACELIB)/include
PABLO_FLAGS = -I. -I../src -I$(PABLO_INC) -DH5_HAVE_PABLO $(PABLO_MPIO_FLAGS)
PABLO_FLAGS = -I../src -I$(PABLO_INC) -DH5_HAVE_PABLO $(PABLO_MPIO_FLAGS)
CPPFLAGS=-I. -I. -I../src -DH5_DEBUG_API -DNDEBUG $(PABLO_FLAGS) -D$(PABLO_BLD)_BUILD
## This is our main target:
LIB=libhdf5-inst.a
@ -45,17 +47,15 @@ LIB_SRC= \
H5FDlog.c H5Gnode.c H5Olayout.c H5Spoint.c \
H5FDmpio.c H5Gstab.c H5Omtime.c H5Sselect.c
PABLO_OBJ = PabloHDF.o PabloHDF_RT.o PabloHDF_SDDF.o
PABLO_OBJ = PabloHDF.o PabloHDF_RT.o PabloHDF_SDDF.o PabloHDF_MPIO.o
LIB_COBJ = $(LIB_SRC:.c=.o)
LIB_XOBJ = $(LIB_SRC:.c=.x)
LIB_COBJ = $(LIB_XOBJ:.x=.o)
LIB_OBJ = $(PABLO_OBJ) $(LIB_COBJ)
lib_obj: $(LIB_OBJ)
copy_src:
cp ../src/*.c .
touch ../src/*.c
touch *.c
touch copy_src
.c.x:
$(CC) $(CFLAGS) $(CPPFLAGS) -c ../src/$*.c -o $*.o
cp $*.o $@
# 'vpath' directive is only supported in gmake, take out - QAK
#vpath %.c $(shell echo $(SRCDIRS) | sed 's/ /:/g')
@ -74,8 +74,8 @@ PABLO_HDR = HDFentryNames.h HDFidList.h ProcIDs.h HDFTrace.h ProcTrace.h \
## makefile.
##
lib: $(LIB)
$(LIB): $(LIB_OBJ)
$(AR) -rc $@ *.o
$(LIB): $(PABLO_OBJ) $(LIB_XOBJ)
$(AR) -rc $@ $(LIB_OBJ)
$(RANLIB) $@
##
## Dummy this out so that there is no redundant make of the library
@ -116,14 +116,14 @@ uninstall:
## remove things like object files but not libraries or executables.
##
mostlyclean:
$(RM) $(LIB_OBJ) $(TEST_OBJ) $(PROG_OBJ) $(MOSTLYCLEAN)
$(RM) $(LIB_OBJ) $(LIB_XOBJ) $(TEST_OBJ) $(PROG_OBJ) $(MOSTLYCLEAN)
## Like `mostlyclean' except it also removes the final targets: things like
## libraries and executables. This target doesn't remove any file that
## is part of the HDF5 distribution.
##
clean: mostlyclean
$(RM) $(LIB) $(TESTS) $(PROGS) $(CLEAN) $(PABLO_CLEAN) H*.c copy_src
$(RM) $(LIB) $(TESTS) $(PROGS) $(CLEAN) $(PABLO_CLEAN) H*.c
## Like `clean' except it also removes files that were created by running
## configure. If you've unpacked the source and built HDF5 without creating
@ -142,11 +142,9 @@ distclean: clean
maintainer-clean: distclean
$(RM) *~ core core.* *.core *.bak *.contrib gmon.out
.c.o:
$(CC) $(CFLAGS) $(CPPFLAGS) $(PABLO_FLAGS) -c $<
.c.lo:
@$(LT_COMPILE) $(CFLAGS) $(CPPFLAGS) $(PABLO_FLAGS) -c $<
@$(LT_COMPILE) $(CFLAGS) $(CPPFLAGS) -c ../src/$*.c $<
PABLO_INCLUDES = HDFentryNames.h HDFidList.h ProcIDs.h HDFTrace.h ProcTrace.h \
@ -188,14 +186,85 @@ ProcTrace.inc: HDFidList.h
echo " parameter (NoTrace = 4)" >> $@
PabloHDF.o: PabloHDF.c $(PABLO_INCLUDES) copy_src
PabloHDF.o: PabloHDF.c $(PABLO_INCLUDES)
$(CC) -g $(CFLAGS) $(CPPFLAGS) $(PABLO_FLAGS) -c $<
PabloHDF_RT.o: PabloHDF_RT.c $(PABLO_INCLUDES) copy_src
PabloHDF_RT.o: PabloHDF_RT.c $(PABLO_INCLUDES)
$(CC) $(CFLAGS) $(CPPFLAGS) $(PABLO_FLAGS) -c $<
PabloHDF_SDDF.o: PabloHDF_SDDF.c $(PABLO_INCLUDES) copy_src
PabloHDF_SDDF.o: PabloHDF_SDDF.c $(PABLO_INCLUDES)
$(CC) $(CFLAGS) $(CPPFLAGS) $(PABLO_FLAGS) -c $<
PabloHDFff.o: PabloHDFff.f $(PABLO_INCLUDES) copy_src
PabloHDF_MPIO.o: PabloHDF_MPIO.c $(PABLO_INCLUDES)
$(CC) $(CFLAGS) $(CPPFLAGS) $(PABLO_FLAGS) -c $<
PabloHDFff.o: PabloHDFff.f $(PABLO_INCLUDES)
$(F77) $(FFLAGS) -O -c PabloHDFff.f
H5.c: ../src/H5.c
H5A.c: ../src/H5A.c
H5AC.c: ../src/H5AC.c
H5B.c: ../src/H5B.c
H5D.c: ../src/H5D.c
H5E.c: ../src/H5E.c
H5F.c: ../src/H5F.c
H5FD.c: ../src/H5FD.c
H5FDcore.c: ../src/H5FDcore.c
H5FDdpss.c: ../src/H5FDdpss.c
H5FDfamily.c: ../src/H5FDfamily.c
H5FDgass.c: ../src/H5FDgass.c
H5FDlog.c: ../src/H5FDlog.c
H5FDmpio.c: ../src/H5FDmpio.c
H5FDmulti.c: ../src/H5FDmulti.c
H5FDsec2.c: ../src/H5FDsec2.c
H5FDsrb.c: ../src/H5FDsrb.c
H5FDstdio.c: ../src/H5FDstdio.c
H5FDstream.c: ../src/H5FDstream.c
H5FL.c: ../src/H5FL.c
H5Farray.c: ../src/H5Farray.c
H5Fcontig.c: ../src/H5Fcontig.c
H5Fistore.c: ../src/H5Fistore.c
H5Fseq.c: ../src/H5Fseq.c
H5G.c: ../src/H5G.c
H5Gent.c: ../src/H5Gent.c
H5Gnode.c: ../src/H5Gnode.c
H5Gstab.c: ../src/H5Gstab.c
H5HG.c: ../src/H5HG.c
H5HL.c: ../src/H5HL.c
H5I.c: ../src/H5I.c
H5MF.c: ../src/H5MF.c
H5MM.c: ../src/H5MM.c
H5O.c: ../src/H5O.c
H5Oattr.c: ../src/H5Oattr.c
H5Ocomp.c: ../src/H5Ocomp.c
H5Ocont.c: ../src/H5Ocont.c
H5Odtype.c: ../src/H5Odtype.c
H5Oefl.c: ../src/H5Oefl.c
H5Ofill.c: ../src/H5Ofill.c
H5Olayout.c: ../src/H5Olayout.c
H5Omtime.c: ../src/H5Omtime.c
H5Oname.c: ../src/H5Oname.c
H5Onull.c: ../src/H5Onull.c
H5Osdspace.c: ../src/H5Osdspace.c
H5Oshared.c: ../src/H5Oshared.c
H5Ostab.c: ../src/H5Ostab.c
H5P.c: ../src/H5P.c
H5R.c: ../src/H5R.c
H5S.c: ../src/H5S.c
H5Sall.c: ../src/H5Sall.c
H5Shyper.c: ../src/H5Shyper.c
H5Smpio.c: ../src/H5Smpio.c
H5Snone.c: ../src/H5Snone.c
H5Spoint.c: ../src/H5Spoint.c
H5Sselect.c: ../src/H5Sselect.c
H5T.c: ../src/H5T.c
H5TB.c: ../src/H5TB.c
H5TS.c: ../src/H5TS.c
H5Tbit.c: ../src/H5Tbit.c
H5Tconv.c: ../src/H5Tconv.c
H5Tinit.c: ../src/H5Tinit.c
H5Tvlen.c: ../src/H5Tvlen.c
H5V.c: ../src/H5V.c
H5Z.c: ../src/H5Z.c
H5Zdeflate.c: ../src/H5Zdeflate.c
H5detect.c: ../src/H5detect.c

File diff suppressed because it is too large Load Diff

1364
pablo/PabloHDF_MPIO.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -109,6 +109,7 @@
// printFileMappingsRT : print map of named identifiers *
// _hdfNameDescriptor() : writes SDDF descriptor packet for names *
//======================================================================*/
#ifndef PCF_BUILD
#ifdef _HDF5_
#include "H5config.h"
#endif
@ -217,6 +218,7 @@ char *FileName; /* Name of Trace file */
HDFsetInfo openInfo; /* Info about file opened */
char openName[256]; /* Name of opened file */
extern char *hdfRecordPointer;
extern char HDFprocNames[][40];
/*======================================================================*
// NAME *
// HDFinitTrace_RT-- initialize HDF real-time tracing *
@ -1584,7 +1586,8 @@ void _hdfDescriptorRT( char *recordName, char *recordDescription,
//======================================================================*/
void writeHDFRecDescrptrsRT( void )
{
char HDFProcNames[][40] = {
/*
char HDFprocNames[][40] = {
"noName",
"noName",
"noName",
@ -1593,13 +1596,14 @@ void writeHDFRecDescrptrsRT( void )
# include "HDFentryNames.h"
"HDF_Last_Entry"
};
*/
int j, FAMILY;
char BUF1[256], BUF2[256] ;
_hdfNameDescriptor(); /* Descriptor for named identifiers */
for ( j = 0; j < NumHDFProcs; ++j ) {
if ( HDFQueues[j] != NULL ) {
strcpy( BUF2, "HDF ");
strcat( BUF2, HDFProcNames[j] );
strcat( BUF2, HDFprocNames[j] );
strcat( BUF2, " Procedure Summary");
strcpy( BUF1, BUF2 );
strcat( BUF1, " Trace");
@ -1690,3 +1694,4 @@ void _hdfNameDescriptor( void )
putBytes( recordBuffer, (unsigned) recordLength );
}
#endif /* PCF_BUILD */

View File

@ -55,12 +55,9 @@
// Generate a SDDF binary format record descriptor *
// for the HDF procedure exits *
//======================================================================*/
#ifndef PCF_BUILD
#include <stdio.h>
#ifdef H5_HAVE_PARALLEL
#include "mpi.h"
#endif
#include "H5config.h"
#undef H5_HAVE_PABLO
#include "H5private.h"
@ -112,6 +109,7 @@ void endIOTrace( void );
void endMPIOTrace( void ) {return;}
#endif
extern char *hdfRecordPointer;
extern char HDFprocNames[][40];
/*======================================================================*
// Prototypes of functions in this file. *
//======================================================================*/
@ -206,7 +204,7 @@ int *procEntryCalled;
/*======================================================================*
// The HDFProcNames array holds the names of the HDF entries. *
//======================================================================*/
static char HDFProcNames[][40] = {
/*static char HDFprocNames[][40] = {
"noName",
"noName",
"noName",
@ -214,7 +212,7 @@ static char HDFProcNames[][40] = {
"noName",
#include "HDFentryNames.h"
"HDF_LAST_ENTRY"
};
};*/
/*=======================================================================
// NAME *
// HDFinitTrace_SDDF -- initalize HDF tracing with SDDF records *
@ -675,7 +673,7 @@ void createHDFTraceDescriptor( int Inx )
char BUF1[256], BUF2[256] ;
int FAMILY;
strcpy( BUF2, "HDF ");
strcat( BUF2, HDFProcNames[Inx] );
strcat( BUF2, HDFprocNames[Inx] );
strcat( BUF2, " Procedure");
strcpy( BUF1, BUF2 );
strcat( BUF1, " Trace");
@ -826,4 +824,4 @@ void _hdfMiscDescriptor( void )
putBytes( recordBuffer, (unsigned) recordLength );
}
/*#endif */ /* H5_HAVE_PABLO */
#endif /* PCF_BUILD */

View File

@ -150,9 +150,16 @@ enum MPIeventIDs {
#define ProcIndexForHDFExit( ID ) ProcIndexForHDFEntry(-ID)
#define HDFIXtoEventID( ID ) ( (ID) + BEGIN_HDF )
#ifdef PCF_BUILD
#define TRACE_ON(mask, ID) \
if ( procTrace[mask] || procTrace[ID] ) startHDFtraceEvent( ID )
#define TRACE_OFF(mask, ID ) \
if ( procTrace[mask] || procTrace[ID] ) endHDFtraceEvent( ID, 0, NULL, 0 )
#else
#define TRACE_ON(mask, ID) \
if ( procTrace[mask] || procTrace[ID] ) startHDFtraceEvent( HDFIXtoEventID( ID ) )
#define TRACE_OFF(mask, ID ) \
if ( procTrace[mask] || procTrace[ID] ) endHDFtraceEvent(-HDFIXtoEventID(ID), 0, NULL, 0 )
#endif /* PCF_BUILD */
#endif /* PROCIDS_H */

View File

@ -88,11 +88,13 @@
#undef RUNTIME_TRACE
#endif
enum HDF_IDS {
NO_TRACE,
RUNTIME_TRACE,
SUMMARY_TRACE,
MPI_RUNTIME_TRACE,
MPI_SUMMARY_TRACE,
NO_TRACE,
DETAILED=RUNTIME_TRACE,
LAST_TRACE_TYPE=MPI_SUMMARY_TRACE,
#include "HDFidList.h"
NUM_HDF_IDS
} ;

View File

@ -4,10 +4,15 @@ To build the Pablo Instrumented version of the HDF 5 library
2) Make the normal HDF 5 library
3) Edit the make file in this directory:
- Find the variable PABLO_INC and set it to the path to the include
directory for the Pablo TraceLibrary
- If building to instrument MPI programs, uncomment the line beginning
PABLO_MPI_FLAGS. In this case, the Pablo TraceLibrary should be built
to trace the MPI-I/O calls.
- Issue the make or make install command
3) set the environment variable PABLO_TRACELIB to the path of the directory
continaining the Pablo TraceLibrary. This directory should contain the
lib and include directories as subdirectories
4) If building to instrument MPI programs, uncomment the line beginning
PABLO_MPI_FLAGS. In this case, the Pablo TraceLibrary should be built
to trace the MPI-I/O calls.
5) If you are going to link with the Pablo TraceLibraries, issue the
make or make install commands
If you are going to link with the Pablo PCF, issue one of the commands
make PABLO_BLD=PCF or make PABLO_BLD=PCF install