diff options
-rw-r--r-- | pablo/HDF5record_RT.h | 78 | ||||
-rw-r--r-- | pablo/HDFentries.txt | 520 | ||||
-rw-r--r-- | pablo/Makefile.in | 46 | ||||
-rw-r--r-- | pablo/PabloHDF5.c (renamed from pablo/PabloHDF.c) | 454 | ||||
-rw-r--r-- | pablo/PabloHDF_RT.c | 66 | ||||
-rw-r--r-- | pablo/PabloHDF_SDDF.c | 127 | ||||
-rw-r--r-- | pablo/ProcIDs.h | 118 | ||||
-rw-r--r-- | pablo/ProcTrace.h | 198 |
8 files changed, 927 insertions, 680 deletions
diff --git a/pablo/HDF5record_RT.h b/pablo/HDF5record_RT.h index d86871e..f3bbe4e 100644 --- a/pablo/HDF5record_RT.h +++ b/pablo/HDF5record_RT.h @@ -167,84 +167,6 @@ typedef struct fileRec { int getHDFFieldIndex( int eventID ); int getHDFByteFieldIndex( int eventID ); -#define IOerrorID 700000 - -#define openBeginID 700001 -#define openEndID 700002 - -#define fopenBeginID 700003 -#define fopenEndID 700004 - -#define closeBeginID 700005 -#define closeEndID 700006 - -#define fcloseBeginID 700007 -#define fcloseEndID 700008 - -#define readBeginID 700009 -#define readEndID 700010 - -#define freadBeginID 700011 -#define freadEndID 700012 - -#define lseekBeginID 700013 -#define lseekEndID 700014 - -#define fseekBeginID 700015 -#define fseekEndID 700016 - -#define writeBeginID 700017 -#define writeEndID 700018 - -#define fwriteBeginID 700019 -#define fwriteEndID 700020 - -#define fflushBeginID 700021 -#define fflushEndID 700022 - -#define flushBeginID 700023 -#define flushEndID 700024 - -#define rewindBeginID 700025 -#define rewindEndID 700026 - -#define fsetposBeginID 700027 -#define fsetposEndID 700028 - -#define lifetimeID 700040 -#define timeSummaryID 700041 -#define regionSummaryID 700042 - -#define IOinitTraceID 700100 -#define IOendTraceID 700101 -#define IOenableTraceID 700102 -#define IOdisableTraceID 700103 -#define IOenableDetailID 700104 -#define IOdisableDetailID 700105 -#define IOenableLifeSummID 700106 -#define IOdisableLifeSummID 700107 -#define IOenableTimeSummID 700108 -#define IOdisableTimeSummID 700109 -#define IOchangeTimeWindowID 700110 -#define IOenableRegionSummID 700111 -#define IOdisableRegionSummID 700112 -#define IOchangeFileRegionID 700113 - -/* - * Define the masks for the I/O event families, - */ -#define FAMILY_OPEN 0500 -#define FAMILY_FLUSH 0510 -#define FAMILY_CLOSE 0520 -#define FAMILY_READ 0530 -#define FAMILY_SEEK 0540 -#define FAMILY_WRITE 0550 -#define FAMILY_LIFETIME 0560 -#define FAMILY_TIME_SUMMARY 0570 -#define FAMILY_REGION_SUMMARY 0600 -#define FAMILY_IOTRACE_STATE 0610 -#define FAMILY_IO_MISC 0620 - /* * Define flags to distinguish misc i/o begin from misc i/o end */ diff --git a/pablo/HDFentries.txt b/pablo/HDFentries.txt index adca079..9892628 100644 --- a/pablo/HDFentries.txt +++ b/pablo/HDFentries.txt @@ -1,138 +1,137 @@ -ANannlen -ANannlist -ANcreate -ANcreatef -ANend -ANendaccess -ANfileinfo -ANnumann -ANreadann -ANselect -ANstart -ANwriteann -DAcreate_array -DAdel_elem -DAdestroy_array -DAget_elem -DAset_elem -DAsize_array -DF24addimage -DF24getdims -DF24getimage -DF24lastref -DF24nimages -DF24putimage -DF24readref -DF24reqil -DF24restart -DF24setcompress -DF24setdims -DF24setil -DFANaddfds -DFANaddfid -DFANclear -DFANgetdesc -DFANgetdesclen -DFANgetfds -DFANgetfdslen -DFANgetfid -DFANgetfidlen -DFANgetlabel -DFANgetlablen -DFANlablist -DFANlastref -DFANputdesc -DFANputlabel -DFPaddpal -DFPgetpal -DFPlastref -DFPnpals -DFPputpal -DFPreadref -DFPrestart -DFPwriteref -DFR8Istart -DFR8addimage -DFR8getdims -DFR8getimage -DFR8lastref -DFR8nimages -DFR8putimage -DFR8readref -DFR8restart -DFR8setcompress -DFR8setpalette -DFR8writeref -DFSDadddata -DFSDclear -DFSDendslab -DFSDendslice -DFSDgetNT -DFSDgetcal -DFSDgetdata -DFSDgetdatalen -DFSDgetdatastrs -DFSDgetdimlen -DFSDgetdims -DFSDgetdimscale -DFSDgetdimstrs -DFSDgetfillvalue -DFSDgetrange -DFSDgetslice -DFSDlastref -DFSDndatasets -DFSDpre32sdg -DFSDputdata -DFSDputslice -DFSDreadref -DFSDreadslab -DFSDrestart -DFSDsetNT -DFSDsetcal -DFSDsetdatastrs -DFSDsetdims -DFSDsetdimscale -DFSDsetdimstrs -DFSDsetfillvalue -DFSDsetlengths -DFSDsetrange -DFSDstartslab -DFSDstartslice -DFSDwriteref -DFSDwriteslab -GRattrinfo -GRcreate -GRdiminfo -GRend -GRendaccess -GRfileinfo -GRfindattr -GRgetattr -GRgetchunkinfo -GRgetdimid -GRgetiminfo -GRgetlutid -GRgetlutinfo -GRidtoref -GRluttoref -GRnametoindex -GRreadimage -GRreadlut -GRreftoindex -GRreqimageil -GRreqlutil -GRselect -GRsetaccesstype -GRsetattr -GRsetchunk -GRsetchunkcache -GRsetcompress -GRsetdimname -GRsetexternalfile -GRstart -GRwriteimage -GRwritelut -H5AC_create +H5I_debug +H5F_flush_all +H5F_close_all +H5S_none_select_serialize +H5S_none_select_deserialize +H5T_conv_enum_init +H5T_conv_enum +H5T_conv_schar_uchar +H5T_conv_uchar_schar +H5T_conv_schar_short +H5T_conv_schar_ushort +H5T_conv_uchar_short +H5T_conv_uchar_ushort +H5T_conv_schar_int +H5T_conv_schar_uint +H5T_conv_uchar_int +H5T_conv_uchar_uint +H5T_conv_schar_long +H5T_conv_schar_ulong +H5T_conv_uchar_long +H5T_conv_uchar_ulong +H5T_conv_schar_llong +H5T_conv_schar_ullong +H5T_conv_uchar_llong +H5T_conv_uchar_ullong +H5T_conv_short_schar +H5T_conv_short_uchar +H5T_conv_ushort_schar +H5T_conv_ushort_uchar +H5T_conv_short_ushort +H5T_conv_ushort_short +H5T_conv_short_int +H5T_conv_short_uint +H5T_conv_ushort_int +H5T_conv_ushort_uint +H5T_conv_short_long +H5T_conv_short_ulong +H5T_conv_ushort_long +H5T_conv_ushort_ulong +H5T_conv_short_llong +H5T_conv_short_ullong +H5T_conv_ushort_llong +H5T_conv_ushort_ullong +H5T_conv_int_schar +H5T_conv_int_uchar +H5T_conv_uint_schar +H5T_conv_uint_uchar +H5T_conv_int_short +H5T_conv_int_ushort +H5T_conv_uint_short +H5T_conv_uint_ushort +H5T_conv_int_uint +H5T_conv_uint_int +H5T_conv_int_long +H5T_conv_int_ulong +H5T_conv_uint_long +H5T_conv_uint_ulong +H5T_conv_int_llong +H5T_conv_int_ullong +H5T_conv_uint_llong +H5T_conv_uint_ullong +H5T_conv_long_schar +H5T_conv_long_uchar +H5T_conv_ulong_schar +H5T_conv_ulong_uchar +H5T_conv_long_short +H5T_conv_long_ushort +H5T_conv_ulong_short +H5T_conv_ulong_ushort +H5T_conv_long_int +H5T_conv_long_uint +H5T_conv_ulong_int +H5T_conv_ulong_uint +H5T_conv_long_ulong +H5T_conv_ulong_long +H5T_conv_long_llong +H5T_conv_long_ullong +H5T_conv_ulong_llong +H5T_conv_ulong_ullong +H5T_conv_llong_schar +H5T_conv_llong_uchar +H5T_conv_ullong_schar +H5T_conv_ullong_uchar +H5T_conv_llong_short +H5T_conv_llong_ushort +H5T_conv_ullong_short +H5T_conv_ullong_ushort +H5T_conv_llong_int +H5T_conv_llong_uint +H5T_conv_ullong_int +H5T_conv_ullong_uint +H5T_conv_llong_long +H5T_conv_llong_ulong +H5T_conv_ullong_long +H5T_conv_ullong_ulong +H5T_conv_llong_ullong +H5T_conv_ullong_llong +H5Tset_precision +H5Tenum_create +H5Tenum_insert +H5Tget_super +H5Tget_member_value +H5Tenum_nameof +H5Tenum_valueof +H5Tregister +H5T_isa +H5T_set_size +H5T_set_precision +H5T_set_offset +H5T_struct_insert +H5T_sort_value +H5T_sort_name +H5T_enum_insert +H5T_enum_nameof +H5T_enum_valueof +H5T_convert +H5T_print_stats +H5S_select_elements +H5S_select_all +H5S_select_none +H5S_select_serial_size +H5S_select_serialize +H5S_select_deserialize +H5S_point_select_serial_size +H5S_point_select_serialize +H5S_point_select_deserialize +H5S_hyper_node_release +H5S_hyper_select_serial_size +H5S_hyper_select_serialize +H5S_hyper_select_deserialize +H5S_all_select_deserialize +H5S_all_select_serialize +H5RA_isa +H5Pset_gc_references H5AC_debug H5AC_dest H5AC_find @@ -140,6 +139,7 @@ H5AC_flush H5AC_protect H5AC_rename H5AC_set +H5AC_create H5AC_unprotect H5A_close H5A_copy @@ -185,8 +185,7 @@ H5D_get_file H5D_get_space H5D_init_interface H5D_init_storage -H5D_isa -H5D_new +H5D_new H5D_open H5D_open_oid H5D_read @@ -318,12 +317,10 @@ H5G_ent_modified H5G_find H5G_get_comment H5G_get_objinfo -H5G_get_type H5G_getcwg H5G_init_interface H5G_insert H5G_insertion_file -H5G_isa H5G_link H5G_linkval H5G_loc @@ -345,7 +342,6 @@ H5G_node_remove H5G_open H5G_pop H5G_push -H5G_register_type H5G_reopen H5G_rootof H5G_set @@ -445,15 +441,14 @@ H5O_efl_reset H5O_efl_size H5O_efl_total_size H5O_efl_write -H5O_exists -H5O_fill_convert -H5O_fill_copy -H5O_fill_debug +H5O_find_in_ohdr H5O_fill_decode H5O_fill_encode -H5O_fill_reset +H5O_fill_copy H5O_fill_size -H5O_find_in_ohdr +H5O_fill_reset +H5O_fill_debug +H5O_fill_convert H5O_flush H5O_free H5O_init_interface @@ -510,6 +505,9 @@ H5P_copy H5P_create H5P_get_class H5P_init_interface +H5PC_Signal_right_neighbor +H5PC_Wait_for_left_neighbor +H5PC_Wait_for_right_neighbor H5Pclose H5Pcopy H5Pcreate @@ -561,19 +559,6 @@ H5Pset_stdio H5Pset_sym_k H5Pset_userblock H5Pset_xfer -H5RA_close -H5RA_create -H5RA_fix_overflow -H5RA_init_interface -H5RA_isa -H5RA_open -H5RA_read -H5RA_write -H5RAclose -H5RAcreate -H5RAopen -H5RAread -H5RAwrite H5R_close H5R_create H5R_dereference @@ -590,6 +575,18 @@ H5Rget_region H5Ropen H5Rread H5Rwrite +H5RAcreate +H5RA_create +H5RAopen +H5RA_open +H5RAclose +H5RA_close +H5RA_init_interface +H5RAwrite +H5RA_write +H5RA_fix_overflow +H5RAread +H5RA_read H5S_all_favail H5S_all_fgath H5S_all_fscat @@ -716,7 +713,6 @@ H5T_init H5T_init_interface H5T_insert H5T_is_atomic -H5T_isa H5T_lock H5T_open H5T_pack @@ -794,201 +790,9 @@ H5_init_thread H5dont_atexit H5get_libversion H5open -HAatom_group -HAatom_object -HAdestroy_group -HAinit_group -HAregister_atom -HAremove_atom -HAsearch_atom -HDFnewentry -HDdont_atexit -HDreuse_tagref -HEclear -HEprint -HEpush -HEreport -HEstring -HIbitstart -HIstart -HLconvert -HLcreate -HMCPchunkread -HMCPchunkwrite -HMCPendaccess -HMCPinfo -HMCPinquire -HMCPread -HMCPseek -HMCPstread -HMCPstwrite -HMCPwrite -HMCcreate -HMCreadChunk -HMCsetMaxcache -HMCwriteChunk -HPregister_term_func -HULadd_node -HULcreate_list -HULdestroy_list -HULfirst_node -HULnext_node -HULremove_node -HULsearch_node -HXcreate -HXsetcreatedir -HXsetdir -Happendable -Hcache -Hclose -Hdeldd -Hdupdd -Hendaccess -Hexist -Hfidinquire -Hfind -Hgetelement -Hgetfileversion -Hgetlibversion -Hinquire -Hisappendable -Hishdf -Hlength -Hnewref -Hnextread -Hnumber -Hoffset -Hopen -Hputelement -Hread -Hseek -Hsetaccesstype -Hsetlength -Hstartaccess -Hstartread -Hstartwrite -Hsync -Htagnewref -Htell -Htrunc -Hwrite -SDattrinfo -SDcheckempty -SDcreate -SDdiminfo -SDend -SDendaccess -SDfileinfo -SDfindattr -SDgetcal -SDgetchunkinfo -SDgetdatastrs -SDgetdimid -SDgetdimscale -SDgetdimstrs -SDgetfillvalue -SDgetinfo -SDgetrange -SDidtoref -SDiscoordvar -SDisdimval_bwcomp -SDisrecord -SDnametoindex -SDreadattr -SDreadchunk -SDreaddata -SDreftoindex -SDselect -SDsetaccesstype -SDsetattr -SDsetblocksize -SDsetcal -SDsetchunk -SDsetchunkcache -SDsetcompress -SDsetdatastrs -SDsetdimname -SDsetdimscale -SDsetdimstrs -SDsetdimval_comp -SDsetexternalfile -SDsetfillmode -SDsetfillvalue -SDsetnbitdataset -SDsetrag -SDsetrange -SDstart -SDwritechunk -SDwritedata -VFfieldesize -VFfieldisize -VFfieldname -VFfieldorder -VFfieldtype -VFnfields -VHmakegroup -VHstoredata -VHstoredatam -VSappendable -VSattach -VSattrinfo -VSdelete -VSdetach -VSelts -VSfdefine -VSfexist -VSfind -VSfindattr -VSfindclass -VSfindex -VSfnattrs -VSfpack -VSgetattr -VSgetclass -VSgetfields -VSgetid -VSgetinterlace -VSgetname -VSinquire -VSisattr -VSlone -VSnattrs -VSread -VSseek -VSsetattr -VSsetclass -VSsetfields -VSsetinterlace -VSsetname -VSsizeof -VSwrite -Vaddtagref -Vattach -Vattrinfo -Vdeletetagref -Vdetach -Vfind -Vfindattr -Vfindclass -Vfinish -Vgetattr -Vgetclass -Vgetid -Vgetname -Vgettagref -Vgettagrefs -Vgetversion -Vinitialize -Vinqtagref -Vinquire -Vinsert -Vlone -Vnattrs -Vntagrefs -Vsetattr -Vsetclass -Vsetname -vpackvg -vpackvs -vunpackvg -vunpackvs +H5D_isa +H5F_init +H5G_register_type +H5G_isa +H5G_get_type +H5O_exists diff --git a/pablo/Makefile.in b/pablo/Makefile.in index 8091ae4..9a2a458 100644 --- a/pablo/Makefile.in +++ b/pablo/Makefile.in @@ -29,9 +29,9 @@ LIB_SRC=H5.c H5A.c H5AC.c H5B.c H5D.c H5E.c H5F.c H5Farray.c H5Fcore.c \ H5Fstdio.c H5G.c H5Gent.c H5Gnode.c H5Gstab.c H5HG.c H5HL.c H5I.c H5MF.c \ H5MM.c H5O.c H5Oattr.c H5Ocomp.c H5Ocont.c H5Odtype.c H5Oefl.c H5Ofill.c \ H5Olayout.c H5Omtime.c H5Oname.c H5Onull.c H5Osdspace.c H5Oshared.c \ - H5Ostab.c H5P.c H5R.c H5RA.c H5S.c H5Sall.c H5Shyper.c H5Smpio.c H5Spoint.c \ - H5Sselect.c H5T.c H5Tbit.c H5Tconv.c H5Tinit.c H5TB.c H5V.c H5Z.c \ - PabloHDF.c PabloHDF_RT.c PabloHDF_SDDF.c + H5Ostab.c H5P.c H5R.c H5RA.c H5S.c H5Sall.c H5Shyper.c H5Smpio.c \ + H5Snone.c H5Spoint.c H5Sselect.c H5T.c H5Tbit.c H5Tconv.c H5Tinit.c \ + H5TB.c H5V.c H5Z.c PabloHDF5.c PabloHDF_RT.c PabloHDF_SDDF.c LIB_OBJ=$(LIB_SRC:.c=.o) @@ -53,8 +53,8 @@ PRIVATE_HDR=H5private.h H5Aprivate.h H5Apkg.h H5ACprivate.h H5Bprivate.h \ H5Tprivate.h H5TBprivate.h H5Tpkg.h H5Vprivate.h H5Zprivate.h # Number format detection -H5Tinit.c: ../src/H5detect - $(RUNTEST) ../src/H5detect >H5Tinit.c +H5Tinit.c: ../src/H5Tinit.c + cp ../src/H5Tinit.c . #------------------------------------------------------------- -*- makefile -*- # The following section of this makefile comes from the @@ -138,9 +138,10 @@ maintainer-clean: distclean .c.o: $(CC) $(CFLAGS) $(CPPFLAGS) -c ../src/$*.c -PABLO_INCLUDES = HDFentryNames.h HDFidList.h HDF5record_RT.h ProcIDs.h +PABLO_INCLUDES = HDFentryNames.h HDFidList.h HDF5record_RT.h ProcIDs.h \ + ProcTrace.h -PabloHDF.o: PabloHDF.c $(PABLO_INCLUDES) +PabloHDF5.o: PabloHDF5.c $(PABLO_INCLUDES) $(CC) $(CFLAGS) $(CPPFLAGS) -c $< PabloHDF_RT.o: PabloHDF_RT.c $(PABLO_INCLUDES) @@ -150,10 +151,10 @@ PabloHDF_SDDF.o: PabloHDF_SDDF.c $(PABLO_INCLUDES) $(CC) $(CFLAGS) $(CPPFLAGS) -c $< HDFentryNames.h: HDFentries.txt - sed "s/.*/\"&\",/" $? > $@ + sort $? | sed "s/.*/\"&\",/" > $@ HDFidList.h: HDFentries.txt - sed "s/.*/ID_&,/" $? > $@ + sort $? | sed "s/.*/ID_&,/" > $@ #------------------------------------------------------------------------------ # The following section of this makefile contains dependencies between the @@ -1250,6 +1251,33 @@ HDFidList.h \ ../src/H5HGpublic.h \ ../src/H5Tprivate.h \ ../src/H5Tpublic.h +H5Snone.c: ../src/H5Snone.c +H5Snone.o: \ +H5Snone.c \ +ProcIDs.h \ +HDFidList.h \ +../src/H5private.h \ +../src/H5public.h \ +../src/H5config.h \ +../src/H5api_adpt.h \ +../src/H5Eprivate.h \ +../src/H5Epublic.h \ +../src/H5Ipublic.h \ +../src/H5Sprivate.h \ +../src/H5Spublic.h \ +../src/H5Fprivate.h \ +../src/H5Fpublic.h \ +../src/H5Dpublic.h \ +../src/H5Gprivate.h \ +../src/H5Gpublic.h \ +../src/H5Bprivate.h \ +../src/H5Bpublic.h \ +../src/H5Oprivate.h \ +../src/H5Opublic.h \ +../src/H5HGprivate.h \ +../src/H5HGpublic.h \ +../src/H5Tprivate.h \ +../src/H5Tpublic.h H5Spoint.c: ../src/H5Spoint.c H5Spoint.o: \ H5Spoint.c \ diff --git a/pablo/PabloHDF.c b/pablo/PabloHDF5.c index cba0c87..c239357b 100644 --- a/pablo/PabloHDF.c +++ b/pablo/PabloHDF5.c @@ -77,6 +77,7 @@ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> +#include <stdarg.h> #ifndef fileno int fileno ( FILE * ); #endif @@ -111,31 +112,37 @@ int HDFtrace3OPEN( const char *, int, mode_t ); typedef unsigned int mode_t; #endif -int OUTPUT_SWITCH; +int OUTPUT_SWITCH = 1; +int *procTrace; extern void preInitIOTrace( void ); -#include "ProcIDs.h" +#include "ProcTrace.h" #include "HDF5Trace.h" #include "IOTrace.h" +#define ID_HDFprocName 9996 +#define ID_malloc 9997 +#define ID_free 9998 +#define ID_timeStamp 9999 +#define DUMMY_HDF 10000 + #ifdef HAVE_PARALLEL #include "mpio.h" -#include "MPIO_Init.h" -#include "MPIO_EventArgs.h" #include "MPIO_TraceParams.h" -#include "HDFmpioProtos.h" #endif /* HAVE_PARALLEL*/ -#define NO_OUTPUT 0 -#define SDDF_OUTPUT 1 -#define RT_OUTPUT 2 -void HDFinitTrace_RT ( const char *, unsigned int ); -void HDFinitTrace_SDDF ( const char *, unsigned int ); -void hinittracex_ ( int [], int *, unsigned *, int * ); -void hdfendtrace_ ( void ) ; -void HDFendTrace (void); -void HDFendTrace_RT (void); -void HDFendTrace_SDDF(void); +#ifdef HAVE_MPIOTRACE +#include "MPIO_Init.h" +#include "MPIO_EventArgs.h" +#include "HDFmpioProtos.h" +#endif /* HAVE_MPIOTRACE */ + +void HDFinitTrace_RT ( const char *, int ); +void HDFinitTrace_SDDF ( const char *, int ); +void h5inittracex_ ( int [], int *, int[], int *,unsigned * ); +void hdf5endtrace_ ( void ) ; +void HDFendTrace_RT (int); +void HDFendTrace_SDDF(int); void HDFfinalTimeStamp( void ); void startHDFtraceEvent (int ); int computeProcMask (int eventID); @@ -144,19 +151,22 @@ void endHDFtraceEvent (int , int , char *, int ); void traceEvent ( int , char *, unsigned ); void HDFtraceEvent_RT ( int , HDFsetInfo *, unsigned ); void HDFtraceIOEvent( int , void *, unsigned ); -uint procTrace; extern int IOtracingEnabled; char *hdfRecordPointer; +double WriteTotals = 0.0; +double ReadTotals = 0.0; /*======================================================================* // NAME * -// HDFinitTrace -- initialize HDF tracing * +// HDF5initTrace -- initialize HDF tracing * // USAGE * -// VOID HDFinitTrace( traceFileName, procTraceMask, out_sw ) * +// VOID HDFinitTrace( traceFileName, out_sw ) * // char *traceFileName; IN: name of the generated trace output * // file * -// uint32 procTraceMask; IN: families of procedures to trace * -// int out_sw IN: indicates whether to produce SDDF * -// file or Final Summary * +// int ... IN: indicates which routines to trace * +// The list is terminated by the * +// OUTPUT_SWITCH value indicating * +// whether to do RunTime or Summary * +// tracing. * // RETURNS * // None. * //======================================================================*/ @@ -166,62 +176,159 @@ char *hdfRecordPointer; // function. This program converts it from integer to char, then * // passes it to the C initialization routine. * //======================================================================*/ -void hinittracex_( int *file, int *len, unsigned *procMask, int *out_sw ) +void h5inittracex_( int *file, int *len, int flags[], int *nflags, + unsigned *out_sw ) { - char *fileName; + char *traceFileName; int i; - fileName = (char *)malloc(*len+1); + traceFileName = (char *)malloc(*len+1); for ( i = 0; i < *len; ++i ) { - fileName[i] = file[i]; + traceFileName[i] = file[i]; } - fileName[*len+1] = 0; - HDFinitTrace ( fileName, *procMask, *out_sw ); -} -void HDFinitTrace( const char *traceFileName, unsigned procTraceMask, - unsigned out_sw ) -{ - OUTPUT_SWITCH = out_sw; - if ( out_sw == SDDF_OUTPUT ) { - HDFinitTrace_SDDF( traceFileName, procTraceMask ); + traceFileName[*len+1] = 0; + /*==============================================================* + // Allocate space for trace indicators. * + //==============================================================*/ + procTrace = ( int * ) malloc( NUM_HDF5_IDS*sizeof(int) ); + if ( procTrace == NULL ) { + fprintf(stderr,">> Error: Unable to allocate procTrace "); + fprintf(stderr,"array in program HDF5initTrace. <<<\n"); + fprintf(stderr,">>> Exiting program! <<<\n"); + exit (-1); + } + /*==============================================================* + // Initialize to 0. * + //==============================================================*/ + for ( i = 0; i <= NUM_HDF5_IDS; ++i ) { + procTrace[i] = 0; + } + /*==============================================================* + // Read in the flags indicating which procedures to trace. * + // The last parameter passed is an indicator of the type of * + // tracing to do. This indicator has a value larger than any * + // of the flags. * + //==============================================================*/ + for ( i = 0; i < *nflags; ++i ) { + procTrace[flags[i]] = 1; + } + OUTPUT_SWITCH = *out_sw; + /*==============================================================* + // if no flags were passed, the default is to trace all of the * + // procedures. * + //==============================================================*/ + if ( *nflags == 0 || procTrace[AllHDF5] ) { + for ( i = ID_HDF_Last_Entry + 1; i < NUM_HDF5_IDS; ++i ) { + procTrace[i] = 1; + } + } + if ( OUTPUT_SWITCH == RUNTIME_TRACE + || OUTPUT_SWITCH == MPI_RUNTIME_TRACE ) { + HDFinitTrace_SDDF( traceFileName, OUTPUT_SWITCH ); IOtracingEnabled = 1; - } else if ( out_sw == RT_OUTPUT ) { - HDFinitTrace_RT( traceFileName, procTraceMask ); + } else if ( OUTPUT_SWITCH == SUMMARY_TRACE + || OUTPUT_SWITCH == MPI_SUMMARY_TRACE ) { + HDFinitTrace_RT( traceFileName, OUTPUT_SWITCH ); IOtracingEnabled = 1; - } else if ( out_sw == NO_OUTPUT ) { - procTrace = 0; + } else if ( OUTPUT_SWITCH == NO_TRACE ) { IOtracingEnabled = 0; } else { - fprintf(stderr,">> Error in HDFinitTrace: the third argument "); - fprintf(stderr,"must have the value 0, 1, <<<\n"); - fprintf(stderr,">> or 2. The value received was %u.", out_sw); - fprintf(stderr," Exiting program. <<<\n"); + fprintf(stderr,">> Error in HDF5initTrace: the third argument "); + fprintf(stderr,"must have a value between %4d<<\n",RUNTIME_TRACE); + fprintf(stderr,">> and %4d, inclusive.",NO_TRACE); + fprintf(stderr," The value received was %4u.", OUTPUT_SWITCH); + fprintf(stderr," Exiting Program. <<\n"); exit (-1); } } +void HDF5initTrace( const char *traceFileName, int id_flag, ... ) +{ + int i, nIDs; + va_list ap; + + /*==============================================================* + // Allocate space for trace indicators. * + //==============================================================*/ + procTrace = ( int * ) malloc( NUM_HDF5_IDS*sizeof(int) ); + if ( procTrace == NULL ) { + fprintf(stderr,">> Error: Unable to allocate procTrace "); + fprintf(stderr,"array in program HDF5initTrace. <<<\n"); + fprintf(stderr,">>> Exiting program! <<<\n"); + exit (-1); + } + /*==============================================================* + // Initialize to 0. * + //==============================================================*/ + for ( i = 0; i < NUM_HDF5_IDS; ++i ) { + procTrace[i] = 0; + } + /*==============================================================* + // Read in the flags indicating which procedures to trace. * + // The last parameter passed is an indicator of the type of * + // tracing to do. This indicator has a value larger than any * + // of the flags. * + //==============================================================*/ + nIDs = 0; + va_start( ap, id_flag ); + while ( id_flag > NO_TRACE ) { + procTrace[id_flag] = 1; + ++nIDs; + id_flag = va_arg ( ap, int ); + } + OUTPUT_SWITCH = id_flag; + /*==============================================================* + // if no flags were passed, the default is to trace all of the * + // procedures. * + //==============================================================*/ + if ( nIDs == 0 || procTrace[AllHDF5] ) { + for ( i = ID_HDF_Last_Entry + 1; i < NUM_HDF5_IDS; ++i ) { + procTrace[i] = 1; + } + } + if ( OUTPUT_SWITCH == RUNTIME_TRACE + || OUTPUT_SWITCH == MPI_RUNTIME_TRACE ) { + HDFinitTrace_SDDF( traceFileName, OUTPUT_SWITCH ); + IOtracingEnabled = 1; + } else if ( OUTPUT_SWITCH == SUMMARY_TRACE + || OUTPUT_SWITCH == MPI_SUMMARY_TRACE ) { + HDFinitTrace_RT( traceFileName, OUTPUT_SWITCH ); + IOtracingEnabled = 1; + } else if ( OUTPUT_SWITCH == NO_TRACE ) { + IOtracingEnabled = 0; + } else { + fprintf(stderr,">> Error in HDF5initTrace: the third argument "); + fprintf(stderr,"must have a value between %4d<<\n",RUNTIME_TRACE); + fprintf(stderr,">> and %4d, inclusive.",NO_TRACE); + fprintf(stderr," The value received was %4u.", OUTPUT_SWITCH); + fprintf(stderr," Exiting Program. <<\n"); + exit (-1); + } +} /*======================================================================* // NAME * -// HDFendTrace -- end HDF tracing * +// HDF5endTrace -- end HDF tracing * // USAGE * -// VOID HDFendTrace(VOID) * +// VOID HDF5endTrace(VOID) * // RETURNS * // None. * //======================================================================*/ -void hdfendtrace_( void ) +void hdf5endtrace_( void ) { - HDFendTrace (); + HDF5endTrace (); } -void HDFendTrace(void) +void HDF5endTrace(void) { - if ( OUTPUT_SWITCH == SDDF_OUTPUT ) { - HDFendTrace_SDDF( ); - } else if ( OUTPUT_SWITCH == RT_OUTPUT ) { - HDFendTrace_RT( ); + if ( OUTPUT_SWITCH == RUNTIME_TRACE + || OUTPUT_SWITCH == MPI_RUNTIME_TRACE ) { + HDFendTrace_SDDF( OUTPUT_SWITCH ); + } else if ( OUTPUT_SWITCH == SUMMARY_TRACE + || OUTPUT_SWITCH == MPI_SUMMARY_TRACE ) { + HDFendTrace_RT( OUTPUT_SWITCH ); } - procTrace = 0; } void startHDFtraceEvent(int eventID) { - if ( OUTPUT_SWITCH == SDDF_OUTPUT ) { + if ( OUTPUT_SWITCH == RUNTIME_TRACE + || OUTPUT_SWITCH == MPI_RUNTIME_TRACE ) { traceEvent( eventID, NULL, 0 ) ; } else { HDFtraceEvent_RT( eventID, NULL, 0 ) ; @@ -232,11 +339,13 @@ void endHDFtraceEvent(int eventID, int setID, char *setName, int IDtype ) HDFsetInfo info; info.setID = setID; info.setName = setName; - if ( OUTPUT_SWITCH == SDDF_OUTPUT ) { + if ( OUTPUT_SWITCH == RUNTIME_TRACE + || OUTPUT_SWITCH == MPI_RUNTIME_TRACE ) { traceEvent( eventID, (char *)&info, 0 ) ; - } else if (OUTPUT_SWITCH == RT_OUTPUT ) { + } else if ( OUTPUT_SWITCH == SUMMARY_TRACE + || OUTPUT_SWITCH == MPI_SUMMARY_TRACE ) { HDFtraceEvent_RT( eventID, &info, 0 ) ; - } else if ( OUTPUT_SWITCH < 0 ) { + } else if ( OUTPUT_SWITCH != NO_TRACE ) { fprintf(stderr,"endHDFtraceEvent: "); fprintf(stderr,"invalid OUTPUT_SWITCH %d, IDtype = %d\n", OUTPUT_SWITCH, IDtype ) ; @@ -490,6 +599,7 @@ size_t HDFtraceREAD( int fd, char *buf, int nbyte ) struct read_write_args readArgs; size_t ret; int bytes; + CLOCK t1, t2, incDur; if ( IOtracingEnabled ) { readArgs.fileID = c_mappedID( fd ); @@ -499,7 +609,11 @@ size_t HDFtraceREAD( int fd, char *buf, int nbyte ) HDFtraceIOEvent( readBeginID, (void *) &readArgs, sizeof(readArgs) ); } + t1 = getClock(); ret = read( fd, buf, nbyte ); + t2 = getClock(); + incDur = clockSubtract(t2,t1); + ReadTotals += clockToSeconds( incDur ); if ( IOtracingEnabled ) { if ( ret > 0 ) { @@ -527,6 +641,7 @@ size_t HDFtraceFREAD( void *ptr, int size, int nitems, FILE *stream ) size_t ret; int nbytes; int fd = fileno( stream ); + CLOCK t1, t2, incDur; if ( IOtracingEnabled ) { readArgs.fileID = c_mappedID( fd ); @@ -535,7 +650,11 @@ size_t HDFtraceFREAD( void *ptr, int size, int nitems, FILE *stream ) HDFtraceIOEvent( freadBeginID, (void *) &readArgs, sizeof(readArgs) ); } + t1 = getClock(); ret = fread( ptr, size, nitems, stream ); + t2 = getClock(); + incDur = clockSubtract(t2,t1); + ReadTotals += clockToSeconds( incDur ); if ( IOtracingEnabled ) { if ( ret > 0 ) { @@ -692,6 +811,7 @@ size_t HDFtraceWRITE( int fd, const char *buf, int nbyte ) struct read_write_args writeArgs; size_t ret; int bytes; + CLOCK t1, t2, incDur; if ( IOtracingEnabled ) { writeArgs.fileID = c_mappedID( fd ); @@ -701,7 +821,11 @@ size_t HDFtraceWRITE( int fd, const char *buf, int nbyte ) HDFtraceIOEvent( writeBeginID, (void *) &writeArgs, sizeof(writeArgs) ); } - ret = write( fd, buf, nbyte ); + t1 = getClock(); + ret = (size_t)write( fd, buf, nbyte ); + t2 = getClock(); + incDur = clockSubtract(t2,t1); + WriteTotals += clockToSeconds( incDur ); if ( IOtracingEnabled ) { if ( ret > 0 ) { @@ -728,6 +852,7 @@ size_t HDFtraceFWRITE( const char *ptr, int size, int nitems, FILE *stream ) size_t ret; int nbytes; int fd = fileno( stream ); + CLOCK t1, t2, incDur; if ( IOtracingEnabled ) { writeArgs.fileID = c_mappedID( fd ); @@ -737,7 +862,12 @@ size_t HDFtraceFWRITE( const char *ptr, int size, int nitems, FILE *stream ) HDFtraceIOEvent( fwriteBeginID, (void *) &writeArgs, sizeof(writeArgs) ); } + t1 = getClock(); ret = fwrite( ptr, size, nitems, stream ); + t2 = getClock(); + incDur = clockSubtract(t2,t1); + WriteTotals += clockToSeconds( incDur ); + if ( IOtracingEnabled ) { if ( ret > 0 ) { @@ -864,7 +994,8 @@ void *HDFtraceMALLOC(size_t bytes ) void HDFtraceIOEvent( int eventType, void *dataPtr, unsigned dataLen ) { - if ( OUTPUT_SWITCH == 1 ) { + if ( OUTPUT_SWITCH == RUNTIME_TRACE + || OUTPUT_SWITCH == MPI_RUNTIME_TRACE ) { traceEvent( eventType, dataPtr, dataLen ); } else { HDFtraceEvent_RT( eventType, (HDFsetInfo *)dataPtr, dataLen ); @@ -875,7 +1006,6 @@ void HDFtraceIOEvent( int eventType, void *dataPtr, unsigned dataLen ) //======================================================================*/ void HDFfinalTimeStamp( void ) { - TR_LOCK criticalSection; CLOCK currentTime; double seconds; struct { @@ -889,7 +1019,6 @@ void HDFfinalTimeStamp( void ) dataLen; } Packet; - criticalSection = TRlock(); currentTime = getClock(); seconds = clockToSeconds( currentTime ); @@ -903,7 +1032,99 @@ void HDFfinalTimeStamp( void ) Packet.dataLen = 0; putBytes( (void *)&Packet , sizeof(Packet) ); } +/*======================================================================* +// This Program is called to specify which routines are to be traced. * +// On first entry, the program allocates storage for and initializes a * +// global array procTrace. The array has one element for each possible * +// HDF5 procedure and HDF5 library file. If a procedure or all of the * +// procedure in an HDF file are to be traced, then the elemen in the * +// array corresponding to the procedure or file is turned on. This is * +// used by the macros TRACE_ON and TRACE_OFF to enable tracing. If * +// this procedure is not called prior to initialization, then all of * +// the elements of procTrace corresponding to HDF 5 files will be * +// turned on, in which case all HDF 5 procedures will be traced. * +//======================================================================*/ +void PabloHDF5Trace( int ID ) +{ + int i; + if ( procTrace == NULL ) { + procTrace = ( int * ) malloc( NUM_HDF5_IDS*sizeof(int) ); + if ( procTrace == NULL ) { + fprintf(stderr,">> Error: Unable to allocate procTrace "); + fprintf(stderr,"array in program PabloHDF5Trace. <<<\n"); + fprintf(stderr," Exiting program. <<<\n"); + exit (-1); + } + for ( i = 0; i < NUM_HDF5_IDS; ++i ) { + procTrace[i] = 0; + } + } + if ( ID >= 0 && ID < NUM_HDF5_IDS ) { + procTrace[ID] = 1; + } else { + fprintf(stderr,">> Error: Value passed to PabloHDF5Trace, "); + fprintf(stderr,"%d, is out of range. <<<\n",ID); + fprintf(stderr," Exiting program. <<<\n"); + exit (-1); + } +} #ifdef HAVE_PARALLEL +int HDF_XMPI_File_open( MPI_Comm comm, char *filename, int amode, + MPI_Info info, MPI_File *fh ); +int HDF_XMPI_File_close( MPI_File *fh ); +int HDF_XMPI_File_delete( char *filename, MPI_Info info ); +int HDF_XMPI_File_set_size( MPI_File fh, MPI_Offset size ); +int HDF_XMPI_File_preallocate( MPI_File fh, MPI_Offset size); +int HDF_XMPI_File_get_size( MPI_File fh, MPI_Offset *size ); +int HDF_XMPI_File_get_group( MPI_File fh, MPI_Group *group ); +int HDF_XMPI_File_get_amode( MPI_File fh, int *amode ); +int HDF_XMPI_File_set_view( MPI_File fh, MPI_Offset disp, MPI_Datatype etype, + MPI_Datatype filetype, char *datarep, + MPI_Info info ); +int HDF_XMPI_File_get_view( MPI_File fh, MPI_Offset *disp, + MPI_Datatype *etype, MPI_Datatype *filetype, + char *datarep ); +int HDF_XMPI_File_read_at( MPI_File fh, MPI_Offset offset, void *buf, + int count, MPI_Datatype datatype, + MPI_Status *status ); +int HDF_XMPI_File_read_at_all( MPI_File fh, MPI_Offset offset, void *buf, + int count, MPI_Datatype datatype, + MPI_Status *status ); +int HDF_XMPI_File_write_at( MPI_File fh, MPI_Offset offset, void *buf, + int count, MPI_Datatype datatype, + MPI_Status *status ); +int HDF_XMPI_File_write_at_all( MPI_File fh, MPI_Offset offset, void *buf, + int count, MPI_Datatype datatype, + MPI_Status *status ); + +int HDF_XMPI_File_iread_at( MPI_File fh, MPI_Offset offset, void *buf, + int count, MPI_Datatype datatype, + MPIO_Request *request ); +int HDF_XMPI_File_iwrite_at( MPI_File fh, MPI_Offset offset, void *buf, + int count, MPI_Datatype datatype, + MPIO_Request *request ); +int HDF_XMPI_File_read( MPI_File fh, void *buf, int count, + MPI_Datatype datatype, MPI_Status *status ); +int HDF_XMPI_File_read_all( MPI_File fh, void *buf, int count, + MPI_Datatype datatype, MPI_Status *status ); +int HDF_XMPI_File_write( MPI_File fh, void *buf, int count, + MPI_Datatype datatype, MPI_Status *status ); +int HDF_XMPI_File_write_all( MPI_File fh, void *buf, int count, + MPI_Datatype datatype, MPI_Status *status ); +int HDF_XMPI_File_iread( MPI_File fh, void *buf, int count, + MPI_Datatype datatype, MPIO_Request *request ); +int HDF_XMPI_File_iwrite( MPI_File fh, void *buf, int count, + MPI_Datatype datatype, MPIO_Request *request ); +int HDF_XMPI_File_seek( MPI_File fh, + MPI_Offset offset, int whence ) ; +int HDF_XMPI_File_get_position( MPI_File fh, MPI_Offset *offset ); +int HDF_XMPI_File_get_byte_offset( MPI_File fh, MPI_Offset offset, + MPI_Offset *disp) ; +int HDF_XMPI_File_get_type_extent( MPI_File fh, MPI_Datatype datatype, + MPI_Aint *extent ); +int HDF_XMPI_File_set_atomicity( MPI_File fh, int flag ); +int HDF_XMPI_File_get_atomicity( MPI_File fh, int *flag ); +int HDF_XMPI_File_sync( MPI_File fh ); /*======================================================================* // Pass call through to regular MPIO entry except in case of Real Time * // tracing. * @@ -916,8 +1137,8 @@ int HDF_MPI_File_open( MPI_Comm comm, char *filename, int amode, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_open( comm, filename, amode, info, fh ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_open( comm, filename, amode, info, fh ); } else { dataLen = sizeof( HDFsetInfo ); dataPtr.setID = (long)fh; @@ -943,8 +1164,8 @@ int HDF_MPI_File_close( MPI_File *fh ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_close( fh ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_close( fh ); } else { dataLen = sizeof( HDFsetInfo ); dataPtr.setID = (long)fh; @@ -968,8 +1189,8 @@ int HDF_MPI_File_delete( char *filename, MPI_Info info ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_delete( filename, info ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_delete( filename, info ); } else { dataLen = sizeof( HDFsetInfo ); dataPtr.setID = 0; @@ -994,8 +1215,8 @@ int HDF_MPI_File_set_size( MPI_File fh, MPI_Offset size ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_set_size( fh, size ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_set_size( fh, size ); } else { dataLen = 0; HDFtraceEvent_RT( mpiSetSizeBeginID,&dataPtr,dataLen ); @@ -1016,8 +1237,8 @@ int HDF_MPI_File_preallocate( MPI_File fh, MPI_Offset size) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_preallocate( fh, size); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_preallocate( fh, size); } else { dataLen = 0; HDFtraceEvent_RT( mpiPreallocateBeginID, @@ -1040,8 +1261,8 @@ int HDF_MPI_File_get_size( MPI_File fh, MPI_Offset *size ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_get_size( fh, size); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_get_size( fh, size); } else { dataLen = 0; HDFtraceEvent_RT( mpiGetSizeBeginID, @@ -1064,8 +1285,8 @@ int HDF_MPI_File_get_group( MPI_File fh, MPI_Group *group ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_get_group( fh, group); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_get_group( fh, group); } else { dataLen = 0; HDFtraceEvent_RT( mpiGetGroupBeginID, @@ -1088,8 +1309,8 @@ int HDF_MPI_File_get_amode( MPI_File fh, int *amode ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_get_amode( fh, amode); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_get_amode( fh, amode); } else { dataLen = 0; HDFtraceEvent_RT( mpiGetAmodeBeginID, @@ -1113,14 +1334,14 @@ int HDF_MPI_File_set_view( MPI_File fh, MPI_Offset disp, MPI_Datatype etype, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_set_view( fh, disp, etype, filetype, + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_set_view( fh, disp, etype, filetype, datarep, info ); } else { dataLen = 0; HDFtraceEvent_RT( mpiSetViewBeginID, &dataPtr,dataLen ); - returnVal = MPI_File_set_view( fh, disp, etype, filetype, + returnVal = PMPI_File_set_view( fh, disp, etype, filetype, datarep, info ); HDFtraceEvent_RT( mpiSetViewEndID, &dataPtr,dataLen ); @@ -1140,8 +1361,8 @@ int HDF_MPI_File_get_view( MPI_File fh, MPI_Offset *disp, MPI_Datatype *etype, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_get_view(fh, disp, etype, filetype, datarep); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_get_view(fh, disp, etype, filetype, datarep); } else { dataLen = 0; HDFtraceEvent_RT( mpiSetViewBeginID, @@ -1167,8 +1388,8 @@ int HDF_MPI_File_read_at( MPI_File fh, MPI_Offset offset, void *buf, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_read_at( fh, offset, buf, count, datatype, + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_read_at( fh, offset, buf, count, datatype, status ); } else { dataLen = 0; @@ -1195,8 +1416,8 @@ int HDF_MPI_File_read_at_all( MPI_File fh, MPI_Offset offset, void *buf, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_read_at_all( fh, offset, buf, + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_read_at_all( fh, offset, buf, count, datatype, status ); } else { dataLen = 0; @@ -1223,8 +1444,8 @@ int HDF_MPI_File_write_at( MPI_File fh, MPI_Offset offset, void *buf, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_write_at( fh, offset, buf, count, datatype, + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_write_at( fh, offset, buf, count, datatype, status ); } else { dataLen = 0; @@ -1250,8 +1471,8 @@ int HDF_MPI_File_write_at_all( MPI_File fh, MPI_Offset offset, void *buf, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_write_at_all( fh, offset, buf, + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_write_at_all( fh, offset, buf, count, datatype, status ); } else { dataLen = 0; @@ -1273,7 +1494,7 @@ int HDF_MPI_File_write_at_all( MPI_File fh, MPI_Offset offset, void *buf, int HDF_MPI_File_iread_at( MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request ) { - return MPI_File_iread_at( fh, offset, buf, count, datatype, request ); + return HDF_XMPI_File_iread_at( fh, offset, buf, count, datatype, request ); } /*======================================================================* @@ -1284,7 +1505,7 @@ int HDF_MPI_File_iread_at( MPI_File fh, MPI_Offset offset, void *buf, int HDF_MPI_File_iwrite_at( MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request) { - return MPI_File_iwrite_at( fh, offset, buf, count, datatype, request ); + return HDF_XMPI_File_iwrite_at( fh, offset, buf, count, datatype, request ); } /*======================================================================* @@ -1299,8 +1520,8 @@ int HDF_MPI_File_read( MPI_File fh, void *buf, int count, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_read( fh, buf, count, datatype, status ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_read( fh, buf, count, datatype, status ); } else { dataLen = 0; HDFtraceEvent_RT( mpiReadBeginID, @@ -1324,8 +1545,8 @@ int HDF_MPI_File_read_all( MPI_File fh, void *buf, int count, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_read_all( fh, buf, count, datatype, status ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_read_all( fh, buf, count, datatype, status ); } else { dataLen = 0; HDFtraceEvent_RT( mpiReadAllBeginID, @@ -1349,8 +1570,8 @@ int HDF_MPI_File_write( MPI_File fh, void *buf, int count, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_write( fh, buf, count, datatype, status ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_write( fh, buf, count, datatype, status ); } else { dataLen = 0; HDFtraceEvent_RT( mpiWriteBeginID, @@ -1374,8 +1595,8 @@ int HDF_MPI_File_write_all( MPI_File fh, void *buf, int count, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_write_all( fh, buf, count, datatype, status ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal =HDF_XMPI_File_write_all( fh, buf, count, datatype, status ); } else { dataLen = 0; HDFtraceEvent_RT( mpiWriteAllBeginID, @@ -1395,7 +1616,7 @@ int HDF_MPI_File_write_all( MPI_File fh, void *buf, int count, int HDF_MPI_File_iread( MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request ) { - return MPI_File_iread( fh, buf, count, datatype, request ); + return HDF_XMPI_File_iread( fh, buf, count, datatype, request ); } /*======================================================================* @@ -1406,7 +1627,7 @@ int HDF_MPI_File_iread( MPI_File fh, void *buf, int count, int HDF_MPI_File_iwrite( MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPIO_Request *request ) { - return MPI_File_iwrite( fh, buf, count, datatype, request ); + return HDF_XMPI_File_iwrite( fh, buf, count, datatype, request ); } /*======================================================================* @@ -1421,8 +1642,8 @@ int HDF_MPI_File_seek( MPI_File fh, MPI_Offset offset, int whence ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_seek( fh, offset, whence ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_seek( fh, offset, whence ); } else { dataLen = 0; HDFtraceEvent_RT( mpiSeekBeginID, @@ -1446,8 +1667,8 @@ int HDF_MPI_File_get_position( MPI_File fh, MPI_Offset *offset ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_get_position( fh, offset ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_get_position( fh, offset ); } else { dataLen = 0; HDFtraceEvent_RT( mpiGetPositionBeginID, @@ -1471,8 +1692,8 @@ int HDF_MPI_File_get_byte_offset( MPI_File fh, MPI_Offset offset, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_get_byte_offset( fh, offset, disp ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_get_byte_offset( fh, offset, disp ); } else { dataLen = 0; HDFtraceEvent_RT( mpiGetByteOffsetBeginID, @@ -1497,8 +1718,8 @@ int HDF_MPI_File_get_type_extent( MPI_File fh, MPI_Datatype datatype, HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_get_type_extent( fh, datatype, extent ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_get_type_extent( fh, datatype, extent ); } else { dataLen = 0; HDFtraceEvent_RT( mpiGetTypeExtentBeginID, @@ -1521,8 +1742,8 @@ int HDF_MPI_File_set_atomicity( MPI_File fh, int flag ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_set_atomicity( fh, flag ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_set_atomicity( fh, flag ); } else { dataLen = 0; HDFtraceEvent_RT( mpiSetAtomicityBeginID, @@ -1546,8 +1767,8 @@ int HDF_MPI_File_get_atomicity( MPI_File fh, int *flag ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_get_atomicity( fh, flag ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_get_atomicity( fh, flag ); } else { dataLen = 0; HDFtraceEvent_RT( mpiGetAtomicityBeginID, @@ -1570,16 +1791,17 @@ int HDF_MPI_File_sync( MPI_File fh ) HDFsetInfo dataPtr; int dataLen; - if ( OUTPUT_SWITCH != RT_OUTPUT ) { - returnVal = MPI_File_sync ( fh ); + if ( OUTPUT_SWITCH != MPI_SUMMARY_TRACE ) { + returnVal = HDF_XMPI_File_sync ( fh ); } else { dataLen = 0; HDFtraceEvent_RT( mpiSyncBeginID, &dataPtr,dataLen ); - returnVal = MPI_File_sync ( fh ); + returnVal = PMPI_File_sync ( fh ); HDFtraceEvent_RT( mpiSyncEndID, &dataPtr,dataLen ); } return returnVal; } + #endif /* HAVE_PARALLEL */ diff --git a/pablo/PabloHDF_RT.c b/pablo/PabloHDF_RT.c index 7daf6b1..c3bbc21 100644 --- a/pablo/PabloHDF_RT.c +++ b/pablo/PabloHDF_RT.c @@ -114,6 +114,7 @@ #include "Trace.h" #include "TraceParam.h" #include "ProcIDs.h" +#include "IO_TraceParams.h" #include "HDF5Trace.h" #include "SDDFparam.h" #include <string.h> @@ -141,9 +142,12 @@ #ifdef HAVE_PARALLEL #include "mpio.h" +#include "MPIO_TraceParams.h" #include "MPIO_Init.h" #include "MPIO_EventArgs.h" -#include "MPIO_TraceParams.h" +#endif + +#ifdef HAVE_MPIOTRACE #endif #ifndef TRgetThreadID @@ -156,8 +160,6 @@ #define AllThreads -1 -#define set_c_mappedID( fd ) (fd) -#define c_mappedID( fd ) (fd) /*======================================================================* // User output file pointer. * //======================================================================*/ @@ -183,8 +185,8 @@ fileRec_t *HDFfileList; /*======================================================================* // Internal Function prototypes * //======================================================================*/ -void HDFinitTrace_RT( char *, unsigned ); -void HDFendTrace_RT( void ); +void HDFinitTrace_RT( char *, int ); +void HDFendTrace_RT( int ); int initproctracert_( void ); int initHDFProcTrace_RT( void ); void HDFtraceEvent_RT( int , char *, unsigned ) ; @@ -222,14 +224,14 @@ extern char *hdfRecordPointer; // NAME * // HDFinitTrace_RT-- initialize HDF real-time tracing * // USAGE * -// VOID HDFinitTrace_RT( fileName, procTraceMask) * +// VOID HDFinitTrace_RT( fileName, OUTSW ) * // * // char *fileName; IN: name of output file * -// unsigned procTraceMask; IN: families of procedures to trace * +// int OUTSW ; IN: Type of tracing * // RETURNS * // None. * //======================================================================*/ -void HDFinitTrace_RT( char *fileName, unsigned procTraceMask ) +void HDFinitTrace_RT( char *fileName, int OUTSW ) { #ifdef HAVE_PARALLEL int myNode; @@ -239,7 +241,6 @@ void HDFinitTrace_RT( char *fileName, unsigned procTraceMask ) TRgetClock( &epoch ); criticalSection = TRlock(); error = initHDFProcTrace_RT() ; - procTrace = procTraceMask; TRunlock( criticalSection ); if ( error != SUCCESS ) { fprintf (stderr,"Unable to Initialize properly. Exiting program\n"); @@ -247,13 +248,21 @@ void HDFinitTrace_RT( char *fileName, unsigned procTraceMask ) } FileName = ( char * ) malloc ( strlen( fileName ) + 10 ); #ifdef HAVE_PARALLEL - MPI_Comm_rank( MPI_COMM_WORLD, &myNode ); - setTraceProcessorNumber( myNode ); - sprintf(FileName,"%s.nd%d",fileName,myNode); /*==============================================================* - // In the parallel case, initialize MPI-IO tracing. This will * - // set the trace file name. * + // Here the library was built to linked with the MPI and MPIO * + // libraries. However, the use may chose not to run with MPI. * + // A check is made to see if MPI has been initialized. If so, * + // a trace file is assigned to the current node with the number * + // of the node as a suffix; if not, only one file is opened * + // and it is not given a suffix. * //==============================================================*/ + if ( OUTSW == MPI_SUMMARY_TRACE ) { + MPI_Comm_rank( MPI_COMM_WORLD, &myNode ); + setTraceProcessorNumber( myNode ); + sprintf(FileName,"%s.nd%d",fileName,myNode); + } else { + strcpy( FileName, fileName ) ; + } #else /*==============================================================* // In the non-parallel case, set the trace file name and * @@ -272,14 +281,16 @@ void HDFinitTrace_RT( char *fileName, unsigned procTraceMask ) // RETURNS * // None. * //======================================================================*/ -void HDFendTrace_RT( void ) +void HDFendTrace_RT( int OUTSW ) { int j, numSetIDs; HDFnode_t *P; char **Names; char* mapFile; + TR_LOCK criticalSection; HDFfinalTimeStamp(); + criticalSection = TRlock(); /*==============================================================* // Assing pablo ids to named identifiers and tag records * //==============================================================*/ @@ -303,23 +314,7 @@ void HDFendTrace_RT( void ) HDFSummarySDDF( HDFQueues[j], j ); } endTracing(); - /*==============================================================* - // Clean up storage * - //==============================================================*/ - free( (void *)mapFile ); - for ( j = 0; j < numSetIDs; ++j ) { - if ( Names[j] != NULL ) { - free((void *)Names[j]); - } - } - free( (void *)Names ); - P = CallStack; - if ( P->ptr != NULL ) { - fprintf(stderr,"CallStack not empty at termination\n"); - } else { - free((void *)P); - } - free((void *)HDFQueues) ; + TRunlock( criticalSection ); } /*======================================================================* // initHFDProcTrace_RT * @@ -726,6 +721,7 @@ void EndHDFEventRecord ( int eventID, CLOCK secs, void *dataPtr ) HDFnode_t *HDFrec; CLOCK incSecs; static int dummyIDs = -4; + eventID = 0; /*==============================================================* // pop record from top of the stack, compute inclusive duration * // and set the corresponding record field and increment nCalls. * @@ -1114,7 +1110,6 @@ void HDFSummarySDDF( HDFnode_t *P, int procIndex ) arrayLen = 0; /* name length */ memcpy( Packet, &arrayLen, sizeof(int) ); putBytes( buff, Header.packetLen ); - free((void *)P); P = Q; } } @@ -1411,6 +1406,11 @@ void _hdfDescriptorRT( char *recordName, char *recordDescription, void writeHDFRecDescrptrsRT( void ) { char HDFProcNames[][40] = { + "noName", + "noName", + "noName", + "noName", + "noName", # include "HDFentryNames.h" "HDF_Last_Entry" }; diff --git a/pablo/PabloHDF_SDDF.c b/pablo/PabloHDF_SDDF.c index 7c5f272..c2c9119 100644 --- a/pablo/PabloHDF_SDDF.c +++ b/pablo/PabloHDF_SDDF.c @@ -72,7 +72,7 @@ #include "TraceParam.h" #include "Trace.h" #include "HDF5Trace.h" -void HDFendTrace_SDDF(void); +void HDFendTrace_SDDF(int); void startHDFtraceEvent(int eventID); void endHDFtraceEvent(int , int , char *, int ); int preInitHDFProcTrace( void ); @@ -83,7 +83,8 @@ TR_RECORD *HDFprocEventRecord( int, TR_EVENT *, CLOCK, HDFsetInfo *, unsigned ); TR_RECORD *miscEventRecord( int , TR_EVENT *, CLOCK, void *, unsigned ); void _hdfMiscDescriptor( void ); void _hdfProcNameDescriptor( void ); -int setEventRecordFunction( int, void *(*)() ); +/*int setEventRecordFunction( int, void *(*)() );*/ +int setEventRecordFunction( int, TR_RECORD *(*)() ); void HDFtraceIOEvent( int, void *, unsigned ); void initIOTrace( void ); void enableIOdetail( void ); @@ -107,12 +108,14 @@ void endIOTrace( void ); #ifdef HAVE_MPIOTRACE int initMPIOTrace( char *, int ); void endMPIOTrace( void ) ; +#else + void endMPIOTrace( void ) {return;} #endif extern char *hdfRecordPointer; /*======================================================================* // Prototypes of functions in this file. * //======================================================================*/ -void HDFinitTrace_SDDF( char *, uint32 ); +void HDFinitTrace_SDDF( char *, int ); /*======================================================================* // Each procedure being traced has associated with it a distinct pair * // of entry and exit event IDs. This code maintains a vector of such * @@ -191,6 +194,7 @@ struct miscTraceRecordData { // events. * //======================================================================*/ int procEntries[] = { +0, 0, 0, 0, 0, #include "HDFidList.h" ID_HDF_Last_Entry }; @@ -203,6 +207,11 @@ int *procEntryCalled; // The HDFProcNames array holds the names of the HDF entries. * //======================================================================*/ static char HDFProcNames[][40] = { +"noName", +"noName", +"noName", +"noName", +"noName", #include "HDFentryNames.h" "HDF_LAST_ENTRY" }; @@ -218,30 +227,64 @@ static char HDFProcNames[][40] = { // RETURNS * // None * //======================================================================*/ -void HDFinitTrace_SDDF( char *traceFileName, uint32 procTraceMask ) +void HDFinitTrace_SDDF( char *traceFileName, int OUTSW ) { /*=============================================================== // set traceFileName and set IO tracing switches. If MPIO * - // tracing is available, this will be initialized also. * + // tracing is available, MPIO tracing will also be initialized. * //==============================================================*/ #ifdef HAVE_PARALLEL + /*=============================================================== + // The code is built to handle parallel processing using MPI. * + // However, the code may or may not be run using MPI and there * + // may or may not be support for MPIO tracing in the Pablo * + // Trace libraries. The type of initialization performed * + // depends on these factors. * + //==============================================================*/ int myNode; char *buff; /*=============================================================== - // in the parallel case, initialize MPI-IO tracing. This will * - // initialize the traceFileName and set the I/O tracing * - // switches. * + // Determine if MPI is running the program. * //==============================================================*/ - MPI_Comm_rank( MPI_COMM_WORLD, &myNode ); - setTraceProcessorNumber( myNode ); + if ( OUTSW == MPI_RUNTIME_TRACE ) { + /*============================================================ + // in the parallel case, initialize MPI-IO tracing. This * + // will initialize the traceFileName and set the I/O tracing * + // switches. * + //===========================================================*/ + MPI_Comm_rank( MPI_COMM_WORLD, &myNode ); + setTraceProcessorNumber( myNode ); #ifdef HAVE_MPIOTRACE - initMPIOTrace( traceFileName, 0 ); + /*============================================================ + // MPIO Tracing is supported in the Pablo Library. Let the * + // MPIO initialization be performed and handle the naming of * + // trace files. * + //===========================================================*/ + initMPIOTrace( traceFileName, RUNTIME_TRACE ); #else - buff = (char *)malloc( strlen(traceFileName)+12); - sprintf( buff, "%s.nd%.4d\0",traceFileName,myNode); - setTraceFileName( buff ); - free( buff ); + /*============================================================ + // MPIO tracing is not supported. * + // Set up the trace file names depending on the number of * + // current node. * + //===========================================================*/ + buff = (char *)malloc( strlen(traceFileName)+12); + sprintf( buff, "%s.nd%.4d\0",traceFileName,myNode); + setTraceFileName( buff ); + free( buff ); #endif + } else { + /*============================================================ + // The HDF library was built to run with MPI, but the * + // application is being run in serial mode. Initialization * + // is done as in the serial case. * + //===========================================================*/ + setTraceFileName(traceFileName); + initIOTrace(); + enableIOdetail(); + disableLifetimeSummaries(); + disableTimeWindowSummaries(); + disableFileRegionSummaries(); + } #else /*=============================================================== // in the non-parallel case, set the trace file name and the * @@ -259,7 +302,6 @@ void HDFinitTrace_SDDF( char *traceFileName, uint32 procTraceMask ) //==============================================================*/ preInitHDFProcTrace(); initHDFProcTrace( sizeof(procEntries)/sizeof(int), procEntries ); - procTrace = procTraceMask; } /*======================================================================= // NAME * @@ -269,22 +311,23 @@ void HDFinitTrace_SDDF( char *traceFileName, uint32 procTraceMask ) // RETURNS * // None. * //======================================================================*/ -void HDFendTrace_SDDF(void) +void HDFendTrace_SDDF(int OUTSW) { HDFfinalTimeStamp(); -#ifdef HAVE_MPIOTRACE - /*=============================================================== - // termintate MPI-IO tracing in the parallel case. This will * - // terminate the I/O tracing and close tracing as well. * - //==============================================================*/ - endMPIOTrace(); -#else - /*=============================================================== - // terminate tracing * - //==============================================================*/ - endIOTrace(); - endTracing(); -#endif + if ( OUTSW == MPI_RUNTIME_TRACE ) { + /*============================================================ + // termintate MPI-IO tracing in the parallel case. This * + // will terminate the I/O tracing and close tracing as well. * + //===========================================================*/ + endMPIOTrace(); + } else { + /*============================================================ + // terminate tracing * + //===========================================================*/ + endIOTrace(); + endTracing(); + exit(1); + } } /*======================================================================= // NAME * @@ -306,7 +349,7 @@ void HDFendTrace_SDDF(void) //======================================================================*/ int initHDFProcTrace( int numProcs, int *procEntryID ) { - int procIndex; + int procIndex, IX, ID; if (( numProcs <= 0 ) || ( procEntryID == (int *) 0 ) ) return FAILURE; @@ -331,13 +374,13 @@ int initHDFProcTrace( int numProcs, int *procEntryID ) //==============================================================*/ for ( procIndex = 0; procIndex < numProcs; procIndex++ ) { - procEvents[ procIndex ].entryID = procEntryID[ procIndex ]; - procEvents[ procIndex ].exitID = -procEntryID[ procIndex ]; + IX = procEntryID[ procIndex ]; + ID = HDFIXtoEventID( IX ); + procEvents[ procIndex ].entryID = ID; + procEvents[ procIndex ].exitID = -ID; - setEventRecordFunction( procEntryID[ procIndex ], - (void *(*)())HDFprocEventRecord ); - setEventRecordFunction( -procEntryID[ procIndex ], - (void *(*)())HDFprocEventRecord ); + setEventRecordFunction( ID, HDFprocEventRecord ); + setEventRecordFunction( -ID, HDFprocEventRecord ); procEntryCalled[ procIndex ] = 0; } @@ -349,12 +392,12 @@ int initHDFProcTrace( int numProcs, int *procEntryID ) //==============================================================*/ procEvents[ numProcs ].entryID = ID_malloc; procEvents[ numProcs ].exitID = -ID_malloc; - setEventRecordFunction( ID_malloc, (void *(*)())miscEventRecord ); - setEventRecordFunction( -ID_malloc, (void *(*)())miscEventRecord ); + setEventRecordFunction( ID_malloc, miscEventRecord ); + setEventRecordFunction( -ID_malloc, miscEventRecord ); procEvents[ numProcs+1 ].entryID = ID_free; procEvents[ numProcs+1 ].exitID = -ID_free; - setEventRecordFunction( ID_free, (void *(*)())miscEventRecord ); - setEventRecordFunction( -ID_free, (void *(*)())miscEventRecord ); + setEventRecordFunction( ID_free, miscEventRecord ); + setEventRecordFunction( -ID_free, miscEventRecord ); return SUCCESS; } @@ -533,7 +576,7 @@ HDFprocEventRecord( int recordType, TR_EVENT *eventPointer, CLOCK timeStamp, TraceRecordHeader->nameLen = 0; } } else { - TraceRecordHeader->setID = NoDSid; + TraceRecordHeader->setID = 0; TraceRecordHeader->nameLen = 0; } diff --git a/pablo/ProcIDs.h b/pablo/ProcIDs.h index 87e63c0..80d4bef 100644 --- a/pablo/ProcIDs.h +++ b/pablo/ProcIDs.h @@ -81,55 +81,85 @@ #ifndef PROCIDS_H /* avoid re-inclusion */ #define PROCIDS_H -#include "ProcMasks.h" -extern unsigned procTrace; +extern int *procTrace; /* - * Define the event IDs that will be used for the various I/O events + * Define the event IDs that will be used for the various HDF events */ +#include "ProcTrace.h" -/*======================================================================*/ -/* Assign HDF identifier routine tags */ -/*======================================================================*/ -enum HDF_IDS { - ID_HDFprocName=9996, - ID_malloc=9997, - ID_free=9998, - ID_timeStamp=9999, - DUMMY_HDF = 10000, -/*======================================================================*/ -/* the following part of the enumeration is only needed when the */ -/* instrumented HDF library is built. It is created in the pablo */ -/* subdirectory of HDF. */ -/*======================================================================*/ -#include "HDFidList.h" -ID_HDF_Last_Entry -} ; +#define H5_mask ID_H5_c +#define H5A_mask ID_H5A_c +#define H5AC_mask ID_H5AC_c +#define H5B_mask ID_H5B_c +#define H5D_mask ID_H5D_c +#define H5E_mask ID_H5E_c +#define H5F_mask ID_H5F_c +#define H5F_arr_mask ID_H5Farray_c +#define H5F_core_mask ID_H5Fcore_c +#define H5F_family_mask ID_H5Ffamily_c +#define H5F_istore_mask ID_H5Fistore_c +#define H5F_low_mask ID_H5Flow_c +#define H5F_mpio_mask ID_H5Fmpio_c +#define H5F_sec2_mask ID_H5Fsec2_c +#define H5F_split_mask ID_H5Fsplit_c +#define H5F_stdio_mask ID_H5Fstdio_c +#define H5G_mask ID_H5G_c +#define H5G_ent_mask ID_H5Gent_c +#define H5G_node_mask ID_H5Gnode_c +#define H5G_stab_mask ID_H5Gstab_c +#define H5HG_mask ID_H5HG_c +#define H5HL_mask ID_H5HL_c +#define H5I_mask ID_H5I_c +#define H5MF_mask ID_H5MF_c +#define H5MM_mask ID_H5MM_c +#define H5O_mask ID_H5O_c +#define H5O_attr_mask ID_H5Oattr_c +#define H5O_pline_mask ID_H5Ocomp_c +#define H5O_cont_mask ID_H5Ocont_c +#define H5O_dtype_mask ID_H5Odtype_c +#define H5O_efl_mask ID_H5Oefl_c +#define H5O_fill_mask ID_H5Ofill_c +#define H5O_layout_mask ID_H5Olayout_c +#define H5O_mtime_mask ID_H5Omtime_c +#define H5O_name_mask ID_H5Oname_c +#define H5O_null_mask ID_H5Onull_c +#define H5O_sdspace_mask ID_H5Osdspace_c +#define H5O_shared_mask ID_H5Oshared_c +#define H5O_stab_mask ID_H5Ostab_c +#define H5P_mask ID_H5P_c +#define H5R_mask ID_H5R_c +#define H5RA_mask ID_H5RA_c +#define H5S_mask ID_H5S_c +#define H5S_all_mask ID_H5Sall_c +#define H5S_hyper_mask ID_H5Shyper_c +#define H5S_mpio_mask ID_H5Smpio_c +#define H5S_none_mask ID_H5Snone_c +#define H5S_point_mask ID_H5Spoint_c +#define H5S_select_mask ID_H5Sselect_c +#define H5T_mask ID_H5T_c +#define H5TB_mask ID_H5TB_c +#define H5Tbit_mask ID_H5Tbit_c +#define H5T_conv_mask ID_H5Tconv_c +#define H5T_init_mask ID_H5Tinit_c +#define H5V_mask ID_H5V_c +#define H5Z_mask ID_H5Z_c + +#define ID_HDFprocName 9996 +#define ID_malloc 9997 +#define ID_free 9998 +#define ID_timeStamp 9999 +#define DUMMY_HDF 10000 #define BEGIN_HDF (DUMMY_HDF + 1) -#define END_HDF ID_HDF_Last_Entry -#define NumHDFProcs ( END_HDF - BEGIN_HDF ) -/*======================================================================*/ -/* HDF attribute, file, data_set, etc ID codes. May not be used. */ -/*======================================================================*/ -#define NoDSid 0 /* no data set id */ -#define HDF_NULL_ID 0 -#define HDF_File_ID 1 -#define HDF_SDS_ID 2 -#define HDF_Dim_ID 3 -#define HDF_Attribute_ID 4 -#define HDF_Label_ID 5 -#define HDF_Access_ID 6 -#define HDF_Directory_ID 7 -#define HDF_Annotation_ID 8 -#define HDF_Gen_Raster_ID 9 -#define HDF_Look_Up_Table_ID 10 -#define HDF_Vdata_ID 11 +#define END_HDF (ID_HDF_Last_Entry + DUMMY_HDF) +#define NumHDFProcs ( ID_HDF_Last_Entry ) + #define BEGIN_MPIO 900800 #define END_MPIO 900899 /*======================================================================*/ /* Macros to tell if the ID is that of an HDF Entry or Exit */ /*======================================================================*/ -#define isBeginHDFEvent( ID ) ( BEGIN_HDF <= (ID) && (ID) < END_HDF ) +#define isBeginHDFEvent( ID ) ( BEGIN_HDF <= (ID) && (ID) <= END_HDF ) #define isEndHDFEvent( ID ) isBeginHDFEvent(-(ID)) #define isBeginMPIOEvent( ID ) \ ( BEGIN_MPIO <= (ID) && (ID) <= END_MPIO && (ID)%2 == 0 ) @@ -143,11 +173,11 @@ ID_HDF_Last_Entry #define ProcIndex( ID ) ( (ID) - BEGIN_HDF ) #define ProcIndexForHDFEntry( ID ) ( (ID) - BEGIN_HDF ) #define ProcIndexForHDFExit( ID ) ProcIndexForHDFEntry(-ID) -#define HDFProcIXtoEventID( ID ) ( (ID) + BEGIN_HDF ) +#define HDFIXtoEventID( ID ) ( (ID) + BEGIN_HDF ) -#define TRACE_ON(mask, eventID) \ - if (procTrace & mask) startHDFtraceEvent(eventID) -#define TRACE_OFF(mask, eventID ) \ - if (procTrace & mask) endHDFtraceEvent(-eventID, 0, NULL, 0 ) +#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 /* PROCIDS_H */ diff --git a/pablo/ProcTrace.h b/pablo/ProcTrace.h new file mode 100644 index 0000000..7060725 --- /dev/null +++ b/pablo/ProcTrace.h @@ -0,0 +1,198 @@ +/* This file is part of the Pablo Performance Analysis Environment +// +// (R) +// The Pablo Performance Analysis Environment software is NOT in +// the public domain. However, it is freely available without fee for +// education, research, and non-profit purposes. By obtaining copies +// of this and other files that comprise the Pablo Performance Analysis +// Environment, you, the Licensee, agree to abide by the following +// conditions and understandings with respect to the copyrighted software: +// +// 1. The software is copyrighted in the name of the Board of Trustees +// of the University of Illinois (UI), and ownership of the software +// remains with the UI. +// +// 2. Permission to use, copy, and modify this software and its documentation +// for education, research, and non-profit purposes is hereby granted +// to Licensee, provided that the copyright notice, the original author's +// names and unit identification, and this permission notice appear on +// all such copies, and that no charge be made for such copies. Any +// entity desiring permission to incorporate this software into commercial +// products should contact: +// +// Professor Daniel A. Reed reed@cs.uiuc.edu +// University of Illinois +// Department of Computer Science +// 2413 Digital Computer Laboratory +// 1304 West Springfield Avenue +// Urbana, Illinois 61801 +// USA +// +// 3. Licensee may not use the name, logo, or any other symbol of the UI +// nor the names of any of its employees nor any adaptation thereof in +// advertizing or publicity pertaining to the software without specific +// prior written approval of the UI. +// +// 4. THE UI MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE +// SOFTWARE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT EXPRESS +// OR IMPLIED WARRANTY. +// +// 5. The UI shall not be liable for any damages suffered by Licensee from +// the use of this software. +// +// 6. The software was developed under agreements between the UI and the +// Federal Government which entitle the Government to certain rights. +// +// ************************************************************************* +// +// Developed by: The Pablo Research Group +// University of Illinois at Urbana-Champaign +// Department of Computer Science +// 1304 W. Springfield Avenue +// Urbana, IL 61801 +// +// http://www-pablo.cs.uiuc.edu +// +// Send comments to: pablo-feedback@guitar.cs.uiuc.edu +// +// Copyright (c) 1987-1998 +// The University of Illinois Board of Trustees. +// All Rights Reserved. +// +// PABLO is a registered trademark of +// The Board of Trustees of the University of Illinois +// registered in the U.S. Patent and Trademark Office. +// +// Project Manager and Principal Investigator: +// Daniel A. Reed (reed@cs.uiuc.edu) +// +// Funded in part by the Defense Advanced Research Projects Agency under +// DARPA contracts DABT63-94-C0049 (SIO Initiative), F30602-96-C-0161, +// and DABT63-96-C-0027 by the National Science Foundation under the PACI +// program and grants NSF CDA 94-01124 and ASC 97-20202, and by the +// Department of Energy under contracts DOE B-341494, W-7405-ENG-48, and +// 1-B-333164. +//-------------------------------------------------------------------------*/ +/*-------------------------------------------------------------------------- + * File: ProcTrace.h + * Purpose: define entities for tracing HDF procedures + *-------------------------------------------------------------------------*/ + +#ifndef PROCTRACE_H /* avoid re-inclusion */ +#define PROCTRACE_H +#include <stdarg.h> +/*======================================================================* +// By default, all HDF procedures are traced. Tracing of individual * +// procedures or all of the procedures in a particular source file in * +// the HDF 5 library can be done by calling the procedure PabloHDF5trace* +// with the appropriate argument. The call must be made prior to * +// calling HDF5initTrace. As many calls as necessary may be made prior * +// to calling HDF5initTrace so several specific procedures can be * +// traced. * +// PabloHDF5trace has the following syntax. * +// #include "ProcTrace.h" * +// void PabloHDF5trace( int traceID ); * +// where * +// traceID specifies the procedure or procedures within an HDF 5 file * +// that are to be traced. If a single procedure named <proc> is to * +// be traced, then traceID should have the value ID_<proc>. If all * +// of the procedures within the HDF 5 library routine <file>.c are to * +// be traced, then the value of traceID should be FID_<file>. The * +// constants ID_<proc> and FID_<file> are declared for all possible * +// values of <proc> and <file> below. * +// * +// Example: * +// To enable tracing of the individual procedures H5I_register and * +// H5Topen and all of the procedures in the HDF 5 library source * +// files H5A.c and H5Gent.c the following code segements could be * +// used: * +// * +// #include "ProcTrace.h" * +// ... * +// PabloHDF5trace( ID_H5I_register ); * +// PabloHDF5trace( ID_H5Topenr ); * +// PabloHDF5trace( FID_H5A ); * +// PabloHDF5trace( FID_H5Gent ); * +// ... * +// HDF5initTrace( ... ); * +// * +// See the document PabloHDF5.doc for further information * +//======================================================================*/ +/*======================================================================*/ +/* Assign HDF identifier routine tags */ +/*======================================================================*/ +#ifdef RUNTIME_TRACE +#undef RUNTIME_TRACE +#endif +enum HDF_IDS { +RUNTIME_TRACE, +SUMMARY_TRACE, +MPI_RUNTIME_TRACE, +MPI_SUMMARY_TRACE, +NO_TRACE, +#include "HDFidList.h" +ID_HDF_Last_Entry, +AllHDF5 = ID_HDF_Last_Entry, +ID_H5_c, +ID_H5A_c, +ID_H5AC_c, +ID_H5B_c, +ID_H5D_c, +ID_H5E_c, +ID_H5F_c, +ID_H5Farray_c, +ID_H5Fcore_c, +ID_H5Ffamily_c, +ID_H5Fistore_c, +ID_H5Flow_c, +ID_H5Fmpio_c, +ID_H5Fsec2_c, +ID_H5Fsplit_c, +ID_H5Fstdio_c, +ID_H5G_c, +ID_H5Gent_c, +ID_H5Gnode_c, +ID_H5Gstab_c, +ID_H5HG_c, +ID_H5HL_c, +ID_H5I_c, +ID_H5MF_c, +ID_H5MM_c, +ID_H5O_c, +ID_H5Oattr_c, +ID_H5Ocomp_c, +ID_H5Ocont_c, +ID_H5Odtype_c, +ID_H5Oefl_c, +ID_H5Ofill_c, +ID_H5Olayout_c, +ID_H5Omtime_c, +ID_H5Oname_c, +ID_H5Onull_c, +ID_H5Osdspace_c, +ID_H5Oshared_c, +ID_H5Ostab_c, +ID_H5P_c, +ID_H5R_c, +ID_H5RA_c, +ID_H5S_c, +ID_H5Sall_c, +ID_H5Shyper_c, +ID_H5Smpio_c, +ID_H5Snone_c, +ID_H5Spoint_c, +ID_H5Sselect_c, +ID_H5T_c, +ID_H5TB_c, +ID_H5Tbit_c, +ID_H5Tconv_c, +ID_H5Tinit_c, +ID_H5V_c, +ID_H5Z_c, +NUM_HDF5_IDS +} ; + +void PabloHDF5Trace( int ) ; +void HDF5initTrace( const char *, int trace_id, ... ); +void HDF5endTrace( void ); +#endif /* PROCTRACE_H */ |