diff options
-rw-r--r-- | pablo/HDF5record_RT.h | 254 | ||||
-rw-r--r-- | pablo/ProcIDs.h | 153 |
2 files changed, 407 insertions, 0 deletions
diff --git a/pablo/HDF5record_RT.h b/pablo/HDF5record_RT.h new file mode 100644 index 0000000..8a62f82 --- /dev/null +++ b/pablo/HDF5record_RT.h @@ -0,0 +1,254 @@ +/* + * 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-1996 + * 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. + * + * Author: Dan Wells (dwells@cs.uiuc.edu) + * + * Project Manager and Principal Investigator: + * Daniel A. Reed (reed@cs.uiuc.edu) + * + * Funded in part by National Science Foundation grants NSF CCR87-06653 + * and NSF CDA87-22836 (Tapestry), DARPA contracts DABT63-91-K-0004, + * DABT63-93-C-0040, DABT63-94-C-0049 (SIO), and F30602-96-C-0161, NASA + * contracts NAG-1-613 (ICLASS), USRA 5555-22, and NGT-51023, and a + * collaborative research agreement with the Intel Supercomputer + * Systems Division + */ +/* + * HDFrecord.h: Class to represent HDF records. + * + * $Header$ + */ + +#ifndef HDF5RECORD_RT_H +#define HDF5RECORD_RT_H +#ifndef NULL +#define NULL 0 +#endif + +#include <string.h> +#include <stdlib.h> +#include <limits.h> +#include "ProcIDs.h" + +#ifndef min +#define min( x , y ) ( x <= y ? x : y ) +#endif +#ifndef max +#define max( x , y ) ( x >= y ? x : y ) +#endif +/*======================================================================* +// Enumeration of time fields in an HDFrec_t below * +//======================================================================*/ +enum TimeFields { HDF_, MPI, Malloc, AllIO, Open, Close, Read, Write, ARead, + AWrite, Seek, Wait, Misc, nTallyFields }; +/*======================================================================* +// Enumeration of byte fields in an HDFrec_t below * +//======================================================================*/ +enum ByteFields{ MallocBytes, ReadBytes, WriteBytes, AReadBytes, AWriteBytes, + nByteFields }; +/*======================================================================* +// Definition of first and last IO event. * +//======================================================================*/ +#define FirstIO Open +#define LastIO Misc +#define nBkts 4 +#define ONEK 1024 +int BktLim[] = { 1, 4*ONEK, 64*ONEK, 256*ONEK, INT_MAX } ; +/*======================================================================* +// Definition of structure used to account activity in an HDF call * +//======================================================================*/ +typedef struct { + int nCalls; /* number of proc calls */ + double lastCall; /* time of last call */ + double incDur; /* inclusive duration */ + double excDur; /* exclusive duration */ + double times[nTallyFields]; /* Tally op/calls times */ + int counts[nTallyFields]; /* Tally op/calls counts */ + int bytes[nByteFields]; /* Tally bytes transferred */ + int Hists[nByteFields][nBkts]; /* Historgrams */ + long hdfID; /* data set ID */ + long xRef; /* data set cross reference */ +} HDFrec_t; +/*======================================================================* +// Node used to maintain linked lists of HDF procedure activity. * +//======================================================================*/ +typedef struct HDFnode { + double lastIOtime; /* last IO time stamp */ + HDFrec_t record; /* data */ + struct HDFnode *ptr; /* link pointer */ + int eventID; /* event ID */ +} HDFnode_t; +/*======================================================================* +// Structure used to produce SDDF packets for Named identifiers. * +//======================================================================*/ +typedef struct { + int packetLength; /* bytes in packet */ + int packetType; /* == PKT_DATA */ + int packetTag; /* == FAMILY_<name> */ + int fileType; /* Type of data set */ + int fileID; /* File ID */ + int nameLen; /* length of file */ +} HDFNamePacket_t; +/*======================================================================* +// Node used to form linked lists to track named identifiers. * +//======================================================================*/ +typedef struct fileRec { + struct fileRec *ptr; + int hdfID; + int PabloID; + char *fileName; +} fileRec_t; +/*======================================================================= +// Utility programs to determine field index for a given eventID * +//=====================================================================*/ +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 + */ +#define MISC_BEGIN 0 +#define MISC_END 1 + +#endif /* HDF5RECORD_RT_H */ diff --git a/pablo/ProcIDs.h b/pablo/ProcIDs.h new file mode 100644 index 0000000..87e63c0 --- /dev/null +++ b/pablo/ProcIDs.h @@ -0,0 +1,153 @@ +/* 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: ProcIDs.h + * Purpose: define IDs for identifying procedures in traces + *-------------------------------------------------------------------------*/ + +#ifndef PROCIDS_H /* avoid re-inclusion */ +#define PROCIDS_H + +#include "ProcMasks.h" +extern unsigned procTrace; +/* + * Define the event IDs that will be used for the various I/O events + */ + +/*======================================================================*/ +/* 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 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 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 isEndHDFEvent( ID ) isBeginHDFEvent(-(ID)) +#define isBeginMPIOEvent( ID ) \ + ( BEGIN_MPIO <= (ID) && (ID) <= END_MPIO && (ID)%2 == 0 ) + +#define isEndMPIOEvent( ID ) \ + ( BEGIN_MPIO <= (ID) && (ID) <= END_MPIO && (ID)%2 == 1 ) +#define isBeginIOEvent( ID ) \ + ( IOerrorID < (ID) && (ID) <= fsetposEndID && (ID)%2 == 1 ) +#define isEndIOEvent( ID ) \ + ( IOerrorID < (ID) && (ID) <= fsetposEndID && (ID)%2 == 0 ) +#define ProcIndex( ID ) ( (ID) - BEGIN_HDF ) +#define ProcIndexForHDFEntry( ID ) ( (ID) - BEGIN_HDF ) +#define ProcIndexForHDFExit( ID ) ProcIndexForHDFEntry(-ID) +#define HDFProcIXtoEventID( 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 ) + +#endif /* PROCIDS_H */ |