summaryrefslogtreecommitdiffstats
path: root/pablo/PabloHDF_SDDF.c
diff options
context:
space:
mode:
Diffstat (limited to 'pablo/PabloHDF_SDDF.c')
-rw-r--r--pablo/PabloHDF_SDDF.c820
1 files changed, 0 insertions, 820 deletions
diff --git a/pablo/PabloHDF_SDDF.c b/pablo/PabloHDF_SDDF.c
deleted file mode 100644
index 6326702..0000000
--- a/pablo/PabloHDF_SDDF.c
+++ /dev/null
@@ -1,820 +0,0 @@
-/*
- * This file is an extension to NCSA HDF to enable the use of the
- * Pablo trace library.
- *
- * Developed by: The TAPESTRY Parallel Computing Laboratory
- * University of Illinois at Urbana-Champaign
- * Department of Computer Science
- * 1304 W. Springfield Avenue
- * Urbana, IL 61801
- *
- * Copyright (c) 1995
- * 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: George Xin Zhou (xzhou@cs.uiuc.edu)
- * Contributing Author: Jonathan M. Reid (jreid@cs.uiuc.edu)
- *
- * Project Manager and Principal Investigator:
- * Daniel A. Reed (reed@cs.uiuc.edu)
- *
- * Funded by: National Aeronautics and Space Administration under NASA
- * Contracts NAG-1-613 and USRA 5555-22 and by the Advanced Research
- * Projects Agency under ARPA contracts DAVT63-91-C-0029 and
- * DABT63-93-C-0040.
- *
- */
-/*======================================================================*
-// File: PabloHDF_SDDF.c *
-// Purpose: support use of Pablo trace library to analyze HDF *
-// performance *
-// Contents: *
-// HDFinitTrace_SDDF: initialize SDDF tracing *
-// HDFendTrace_SDDF: end SDDF tracing *
-// startHDFtraceEvent: record start of HDF procedure *
-// endHDFtraceEvent: record end of HDF proc *
-// preInitHDFProcTrace: called by HDFinitTrace_SDDF to set up SDDF *
-// interface function calls *
-// initHDFProcTrace: called by HDFinitTrace_SDDF to initialize data *
-// structures used in tracing HDF procedures. *
-// writeHDFProcRecordDescriptors: *
-// generates the record descriptors for the HDF *
-// procedure entry/exit event families. *
-// HDFprocEventRecord: generates trace records for events which are *
-// to produce procedure entry or exit event family *
-// trace records. *
-// findHDFProcEvent: retruns procedure entry/exit index *
-// _hdfTraceEntryDescriptor: *
-// Generate a SDDF binary format record descriptor *
-// for HDF procedure entries *
-// _hdfTraceExitDescriptor: *
-// Generate a SDDF binary format record descriptor *
-// for the HDF procedure exits *
-//======================================================================*/
-#ifndef PCF_BUILD
-#include <stdio.h>
-
-#include "H5config.h"
-#undef H5_HAVE_PABLO
-#include "H5private.h"
-#define H5_HAVE_PABLO
-#include "ProcIDs.h"
-
-#include "SystemDepend.h"
-#include "SDDFparam.h"
-#include "TraceParam.h"
-#include "Trace.h"
-#include "IOTrace.h"
-#include "HDFTrace.h"
-void IOtraceInit( char*, int, int );
-void HDFendTrace_SDDF(void);
-void startHDFtraceEvent(int eventID);
-void endHDFtraceEvent(int , int , char *, int );
-int preInitHDFProcTrace( void );
-int initHDFProcTrace( int , int * );
-int writeHDFProcRecordDescriptors( void );
-int findHDFProcEvent( int ) ;
-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, TR_RECORD *(*)() );
-void HDFtraceIOEvent( int, void *, unsigned );
-void initIOTrace( void );
-void enableIOdetail( void );
-void disableLifetimeSummaries( void );
-void disableTimeWindowSummaries( void );
-void disableFileRegionSummaries( void );
-void _hdfTraceDescriptor( char *, char *, int );
-void createHDFTraceDescriptor( int );
-void HDFfinalTimeStamp( void );
-void getHDFprocName( int index, char buff[41] );
-void endIOTrace();
-
-#define PABLO 1
-/* on the ipsc/860 we don't include unistd.h */
-#ifndef __NX
-#include <unistd.h>
-#endif
-
-#define returnRecord(x) return x;
-
-#ifdef H5_HAVE_MPIOTRACE
- int initMPIOTrace( char *, int, int );
- void endMPIOTrace( void ) ;
-#else
- void endMPIOTrace( void ) {return;}
-#endif
-extern char *hdfRecordPointer;
-/*======================================================================*
-// Prototypes of functions in this file. *
-//======================================================================*/
-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 *
-// matchings which permits the ready identification of an event ID as *
-// being either an entry event or an exit event and for which procedure.*
-//======================================================================*/
-typedef struct procEventMatch {
- int entryID; /* procedure entry event ID */
- int exitID; /* procedure exit event ID */
-} PROC_EVENTS;
-
-static PROC_EVENTS *procEvents = /* array of event ID pairs */
- (PROC_EVENTS *) 0;
-/*======================================================================*
-// For each procedure being traced this code maintains a stack of *
-// procedure entry times. Each procedure entry event causes the *
-// corresponding procedure's stack to be pushed, each procedure exit *
-// event causes the corresponding procedure's stack to be popped, and *
-// from the difference in time between entry and exit the procedure *
-// duration may be calculated in a very straightforward subtraction. *
-// The above procedure entry-exit event ID matching is used to map *
-// events to their corresponding procedures. In addition, the *
-// cumulative total of these procedure durations is maintained for all *
-// traced subprocedures of each traced procedure. That is, when a *
-// traced procedure exits, it increases this duration sum for its most *
-// immediate traced ancestor procedure. By subtracting this *
-// subprocedure duration sum from the traced procedure's inclusive *
-// duration, we arrive at the exclusive duration of the procedure. *
-//======================================================================*/
-typedef struct procEntryTime {
- CLOCK entryTime; /* when proc entered */
- CLOCK subProcTime; /* subproc duration */
- struct procEntryTime *nextTime; /* stack pointer down */
- struct procEntryTime *ancestorProc; /* traced ancestor */
-} PROC_ENTRY;
-
-/*
-static PROC_ENTRY **procEntryStack =*/ /* array of pointers to */
-/* (PROC_ENTRY **) 0;*/ /* stack top elements */
-/*======================================================================*
-// Define data structure types for procedure entry and exit trace *
-// records, similarly to record data structures in Trace.h *
-//======================================================================*/
-
-/*======================================================================*
-// TraceRecord Data packets: *
-//======================================================================*/
-struct procTraceRecordData {
- int packetLength; /* bytes in packet */
- int packetType; /* == PKT_DATA */
- int packetTag; /* FAMILY_PROCEXIT | RECORD_TRACE */
- int eventID; /* ID of corresponding event */
- double seconds; /* floating-point timestamp */
- long setID; /* index of file | Data Set accessed */
- int nodeNumber; /* occurred on which node */
- int nameLen; /* Length of file or data set name */
- /* name comes next, but no space is allocated */
-};
-#define procTraceRecLen 6*sizeof(int) + sizeof(double) +sizeof(long)
-/*======================================================================*
-// misc Record Data packets: *
-//======================================================================*/
-struct miscTraceRecordData
-{
- int packetLength; /* bytes in packet */
- int packetType; /* == PKT_DATA */
- int packetTag; /* FAMILY_MISC | RECORD_TRACE */
- int eventID; /* ID of corresponding event */
- double seconds; /* floating-point timestamp */
- double duration; /* floating-point operation duration */
- unsigned long bytes; /* number of bytes requested */
- int nodeNumber; /* occurred on which node */
-};
-#define miscTraceLen 5*sizeof(int) + 2*sizeof(double) +sizeof(long)
-/*======================================================================*
-// The procEntries array specifies the event IDs of procedure entry *
-// events. *
-//======================================================================*/
-int procEntries[] =
-{
-0, 0, 0, 0, 0,
-#include "HDFidList.h"
-ID_HDF_Last_Entry
-};
-/*======================================================================*
-// The procEntryCalled array indicates whether or not a procedure entry *
-// was called. *
-//======================================================================*/
-int *procEntryCalled;
-/*=======================================================================
-// NAME *
-// HDFinitTrace_SDDF -- initalize HDF tracing with SDDF records *
-// USAGE *
-// HDFinitTrace_SDDF( traceFileName, porcNum ) *
-// PARAMETERS *
-// char *traceFileName -- name of trace file to hold output *
-// int procNum -- processor Number *
-// RETURNS *
-// None *
-//======================================================================*/
-void HDFinitTrace_SDDF( char *traceFileName, int procNum )
-{
- /*====================================================================
- // set traceFileName and set IO tracing switches. If MPIO *
- // tracing is available, MPIO tracing will also be initialized. *
- //===================================================================*/
-#ifdef H5_HAVE_MPIOTRACE
-// int myNode;
- /*====================================================================
- // in the parallel case, initialize MPI-IO tracing. This *
- // will initialize the traceFileName and set the I/O tracing *
- // switches. *
- //===================================================================*/
- /*====================================================================
- // MPIO Tracing is supported in the Pablo Library. Let the *
- // MPIO initialization be performed and handle the naming of *
- // trace files. *
- //===================================================================*/
- initMPIOTrace( traceFileName, procNum, RUNTIME_TRACE );
-// MPI_Comm_rank( MPI_COMM_WORLD, &myNode );
- setTraceProcessorNumber( procNum );
-#else
- IOtraceInit( traceFileName, procNum, RUNTIME_TRACE );
- /*====================================================================
- // complete HDF initiailization. *
- //===================================================================*/
- enableIOdetail();
- disableLifetimeSummaries();
- disableTimeWindowSummaries();
- disableFileRegionSummaries();
-#endif
- preInitHDFProcTrace();
- initHDFProcTrace( sizeof(procEntries)/sizeof(int), procEntries );
-}
-/*=======================================================================
-// NAME *
-// HDFendTrace_SDDF -- end HDF tracing *
-// USAGE *
-// HDFendTrace_SDDF() *
-// RETURNS *
-// None. *
-//======================================================================*/
-void HDFendTrace_SDDF()
-{
- HDFfinalTimeStamp();
-#ifdef H5_HAVE_MPIORACE
- /*====================================================================
- // 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
-}
-/*=======================================================================
-// NAME *
-// initHDFProcTrace: *
-// This function initializes data structures specific to *
-// the procedure entry/exit tracing extensions of the Pablo *
-// instrumentation library. The argument numProcs specifies *
-// how many procedures are to be traced. The argument procEntryID *
-// is a vector specifying the event IDs to be use as entry events *
-// for each of the procedures. The negative value is used for *
-// the exit event ID. *
-// USAGE *
-// result = initHDFProcTrace(numProcs,procEntryID) *
-// PARAMETERS *
-// int numProcs -- number of Procedures to be initialized *
-// int *procEntryID -- array of id entry codes for these procedures *
-// RETURNS *
-// SUCCESS or FAILURE *
-//======================================================================*/
-int initHDFProcTrace( int numProcs, int *procEntryID )
-{
- int procIndex;
- int IX;
- int ID;
-
- if (( numProcs <= 0 ) || ( procEntryID == (int *) 0 ) )
- {
- return FAILURE;
- }
- /*====================================================================
- // Allocate space to store a copy of the procedure entry-exit *
- // event ID matchings and also the procedure entry stacks. *
- //===================================================================*/
- procEvents = (PROC_EVENTS *)TRgetBuffer((numProcs+4)*sizeof(PROC_EVENTS));
-
- if ( procEvents == (PROC_EVENTS *) 0 )
- {
- TRfailure( "cannot allocate procedure events matching" );
- }
-
- procEntryCalled = ( int *)malloc( numProcs*sizeof(int) );
- if ( procEvents == NULL )
- {
- TRfailure( "cannot allocate procedure Called indicators" );
- }
- /*====================================================================
- // Initialize the procedure events matching from the arguments *
- // passed. Configure the trace record-generating function for *
- // these events. Initialize the flags indicating whether or *
- // not the procedure was called. *
- //===================================================================*/
- for ( procIndex = 0; procIndex < numProcs; procIndex++ )
- {
-
- IX = procEntryID[ procIndex ];
- ID = HDFIXtoEventID( IX );
- procEvents[ procIndex ].entryID = ID;
- procEvents[ procIndex ].exitID = -ID;
-
- setEventRecordFunction( ID, HDFprocEventRecord );
- setEventRecordFunction( -ID, HDFprocEventRecord );
- procEntryCalled[ procIndex ] = 0;
-
- }
-
- /*====================================================================
- // Initialize the procedure events for malloc. *
- // Configure the trace record-generating function for this *
- // event. *
- //===================================================================*/
- procEvents[ numProcs ].entryID = ID_malloc;
- procEvents[ numProcs ].exitID = -ID_malloc;
- setEventRecordFunction( ID_malloc, miscEventRecord );
- setEventRecordFunction( -ID_malloc, miscEventRecord );
- procEvents[ numProcs+1 ].entryID = ID_free;
- procEvents[ numProcs+1 ].exitID = -ID_free;
- setEventRecordFunction( ID_free, miscEventRecord );
- setEventRecordFunction( -ID_free, miscEventRecord );
-
- return SUCCESS;
-}
-/*=======================================================================
-// NAME *
-// preInitHDFProcTrace: *
-// This function calls the trace library interface function *
-// setRecordDescriptor, which records the address of the *
-// procedure that generates the record descriptors for the *
-// procedure trace event families. It is automatically *
-// invoked by HDFinitTrace_SDDF. *
-// USAGE *
-// result = preInitHDFProcTrace(); *
-// RESULT *
-// SUCCESS or FAILURE *
-/=======================================================================*/
-int preInitHDFProcTrace( void )
-{
- static int preInitDone = FALSE;
-
- if ( preInitDone == TRUE )
- {
- return SUCCESS;
- }
- /*====================================================================
- // Give the instrumentation library a pointer to the functions *
- // in which we output the specialized record descriptors for *
- // procedure entry/exit. *
- //===================================================================*/
- setRecordDescriptor( writeHDFProcRecordDescriptors );
-
- preInitDone = TRUE;
- return SUCCESS;
-}
-/*=======================================================================
-// NAME *
-// writeHDFProcRecordDescriptors: *
-// This function generates the record descriptors for the HDF *
-// procedure entry/exit event families. It will be invoked *
-// by the instrumentation library initialization routines. *
-// Patterned after instrumentation library internal function *
-// writeRecordDescriptors. *
-// USAGE *
-// result = writeHDFProcRecordDescriptors(); *
-// RESULT *
-// SUCCESS *
-/=======================================================================*/
-int writeHDFProcRecordDescriptors( void )
-{
-#ifdef PABLODEBUG
- fprintf( debugFile, "writeHDFProcRecordDescriptors\n" );
- fflush( debugFile );
-#endif /* PABLODEBUG */
-
- _hdfMiscDescriptor();
-
-#ifdef PABLODEBUG
- fprintf( debugFile, "writeHDFProcRecordDescriptors done\n" );
- fflush( debugFile );
-#endif /* PABLODEBUG */
- return SUCCESS;
-}
-/*=======================================================================
-// NAME *
-// HDFprocEventRecord: *
-// This function generates trace records for events which are *
-// to produce procedure entry or exit event family trace records. *
-// Patterned after the instrumentation library internal functions *
-// externalEventRecord and sddfRecord. *
-// USAGE *
-// REC = HDFprocEventRecord( recordType, eventPointer, timeStamp, *
-// dataPointer, dataLength) *
-// PARAMETERS *
-// int recordType -- type of event record *
-// TR_EVENT eventPointer -- pointer to event data structure *
-// CLOCK timeStamp -- time event is recorded *
-// HDFsetInfo dataPointer -- information about HDF data set accessed *
-// unsigned dataLength -- dummy for compatability *
-// RETURNS *
-// pointer to trace record for this event *
-//======================================================================*/
-TR_RECORD *
-HDFprocEventRecord( int recordType,
- TR_EVENT *eventPointer,
- CLOCK timeStamp,
- HDFsetInfo *dataPointer,
- unsigned dataLength )
-{
- static TR_RECORD traceRecord;
- static void *recordBuffer = NULL;
- static int bufferLength = 0;
- struct procTraceRecordData *TraceRecordHeader;
- int procIndex;
- int recordFamily;
- char *namePtr;
-
-#ifdef PABLODEBUG
- fprintf( debugFile, "HDFprocEventRecord\n" );
- fflush( debugFile );
-#endif /* PABLODEBUG */
-
- /*==============================================================*
- // Find the index in the tables for the procedure corresponding *
- // to this eventID. *
- //==============================================================*/
- procIndex = findHDFProcEvent( eventPointer->eventID );
- if ( procIndex < 0 )
- {
- return nullRecordFunction( recordType, eventPointer,
- timeStamp, (char *)dataPointer, dataLength );
- }
- /*===================================================================*
- // Produce a packet for the name of the procedure if one has *
- // not already been produced. *
- //===================================================================*/
- if ( procEntryCalled[procIndex] == 0 ) {
- createHDFTraceDescriptor( procIndex );
- procEntryCalled[procIndex] = 1;
- }
- /*===================================================================*
- // Determine whether this is a procedure entry or a procedure *
- // exit family event by lookup in the procedure event ID *
- // matching. *
- //===================================================================*/
- recordFamily = HDF_FAMILY + ( procIndex + 1)*8;
- /*===================================================================*
- // The time stamp stored in the event descriptor will be used *
- // unless one is specified in the timeStamp parameter. *
- //===================================================================*/
- if ( clockCompare( timeStamp, noSuchClock ) == 0 ) {
- timeStamp = eventPointer->eventLast;
- }
- /*===================================================================*
- // Determine how many bytes of storage will be needed for the *
- // contents of the trace record. *
- //===================================================================*/
- traceRecord.recordLength = sizeof *TraceRecordHeader;
- if ( dataPointer != NULL && dataPointer->setName != NULL )
- {
- traceRecord.recordLength += strlen( dataPointer->setName );
- }
- /*===================================================================*
- // If there is a previously-allocated buffer and its size will *
- // hold this record, re-use the buffer. Otherwise, deallocate *
- // the buffer (if allocated) and allocate a bigger one. *
- //===================================================================*/
- if ( bufferLength < traceRecord.recordLength )
- {
-
- if ( recordBuffer != NULL )
- {
- TRfreeBuffer( recordBuffer );
- }
-
- recordBuffer = (char *)TRgetBuffer( traceRecord.recordLength );
-
- if ( recordBuffer == NULL )
- {
- TRfailure( "cannot allocate storage for trace record" );
- }
- bufferLength = traceRecord.recordLength;
- }
-
- traceRecord.recordContents = recordBuffer;
- /*===================================================================*
- // Load the trace record fields into the allocated buffer *
- //===================================================================*/
- TraceRecordHeader = (struct procTraceRecordData *)recordBuffer;
- TraceRecordHeader->packetLength = traceRecord.recordLength;
- TraceRecordHeader->packetType = PKT_DATA;
- TraceRecordHeader->packetTag = recordFamily | recordType;
- TraceRecordHeader->seconds = clockToSeconds( timeStamp );
- TraceRecordHeader->eventID = eventPointer->eventID;
- TraceRecordHeader->nodeNumber = TRgetNode();
-
- if ( dataPointer != 0 )
- {
- TraceRecordHeader->setID = dataPointer->setID;
- if (dataPointer->setName != NULL )
- {
- TraceRecordHeader->nameLen = (int)strlen( dataPointer->setName );
- /*==============================================================*
- // copy name directly into the end of the buffer. *
- //==============================================================*/
- namePtr = (char *)TraceRecordHeader + procTraceRecLen;
- memcpy(namePtr, dataPointer->setName, TraceRecordHeader->nameLen);
- }
- else
- {
- TraceRecordHeader->nameLen = 0;
- }
- }
- else
- {
- TraceRecordHeader->setID = 0;
- TraceRecordHeader->nameLen = 0;
- }
-#ifdef PABLODEBUG
- fprintf( debugFile, "HDFprocEventRecord done\n" );
- fflush( debugFile );
-#endif /* PABLODEBUG */
- returnRecord(&traceRecord);
-}
-/*======================================================================*
-// Internal Routine: miscEventRecord *
-// Called for misc start and end events. *
-//======================================================================*/
-TR_RECORD *miscEventRecord( int recordType,
- TR_EVENT *eventPointer,
- CLOCK timeStamp,
- void *dataPointer,
- unsigned dataLength )
-{
- static TR_RECORD traceRecord;
- static struct miscTraceRecordData miscRecord;
- static int initialized = FALSE;
- int eventID;
-
- if ( clockCompare( timeStamp, noSuchClock ) == 0 )
- {
- timeStamp = eventPointer->eventLast;
- }
-
- eventID = eventPointer->eventID;
- if ( ! initialized )
- {
- miscRecord.packetLength = sizeof( miscRecord );
- miscRecord.packetType = PKT_DATA;
- miscRecord.packetTag = FAMILY_MISC | RECORD_TRACE;
- miscRecord.nodeNumber = traceProcessorNumber;
-
- traceRecord.recordLength = miscRecord.packetLength;
- traceRecord.recordContents = (char *) &miscRecord;
- initialized = TRUE;
- }
-
- switch ( eventID )
- {
- case ID_malloc:
- case ID_free:
- miscRecord.seconds = clockToSeconds( timeStamp ) ;
- miscRecord.eventID = eventID ;
- break;
- case -ID_malloc:
- case -ID_free:
- miscRecord.bytes = *(int *)dataPointer;
- miscRecord.duration = clockToSeconds( timeStamp)
- - miscRecord.seconds;
- return &traceRecord; /* generate trace record */
- default:
- fprintf( stderr, "miscEventRecord: unknown eventID %d\n", eventID );
- break;
- }
- /*===================================================================*
- // If we get here then no trace record generated. Normally we *
- // should get here if this is an entry call. *
- //===================================================================*/
- return( nullRecordFunction( recordType, eventPointer, timeStamp,
- dataPointer, dataLength ) );
-}
-/*======================================================================*
-// NAME *
-// findHDFProcEvent: *
-// Search the procedure entry/exit event ID matching data *
-// structure for an event ID (either entry or exit) which is *
-// the same as the argument eventID. If found, return the *
-// index from that table, which will be between 0 and *
-// numberProcedures - 1, inclusive. If not found, return -1; *
-// USAGE *
-// index = findHDFProcEvent *
-// RETURNS *
-// index of the procedure corresponding to this ID *
-//======================================================================*/
-int findHDFProcEvent( int eventID )
-{
- int procIndex;
-
-#ifdef PABLODEBUG
- fprintf( debugFile, "findHDFProcEvent\n" );
- fflush( debugFile );
-#endif /* PABLODEBUG */
- if ( isBeginHDFEvent(eventID) )
- {
- procIndex = eventID - BEGIN_HDF;
- }
- else if ( isEndHDFEvent( eventID ) )
- {
- procIndex = -eventID - BEGIN_HDF;
- }
- else
- {
- procIndex = -1 ;
- }
- return procIndex;
-}
-void createHDFTraceDescriptor( int Inx )
-{
- char BUF1[256];
- char BUF2[256] ;
- char buff[41];
- int FAMILY;
- getHDFprocName( Inx, buff );
- strcpy( BUF2, "HDF ");
- strcat( BUF2, buff );
- strcat( BUF2, " Procedure");
- strcpy( BUF1, BUF2 );
- strcat( BUF1, " Trace");
-
- FAMILY = HDF_FAMILY + (Inx + 1)*8;
- _hdfTraceDescriptor( BUF1, BUF2, FAMILY );
-}
-/*======================================================================*
-// NAME *
-// _hdfTraceDescriptor *
-// Generate a SDDF binary format record descriptor for the *
-// full trace class of events in the HDF procedure entry *
-// USAGE *
-// _hdfTraceDescriptro( recordName, recordDescription, recordFamily ) *
-// RETURNS *
-// void *
-//======================================================================*/
-void _hdfTraceDescriptor( char *recordName,
- char *recordDescription,
- int recordFamily )
-{
- static char recordBuffer[ 4096 ];
- int recordLength;
-
- hdfRecordPointer = recordBuffer;
- /*====================================================================
- // Allow space at the beginning of the record for the packet *
- //length which will be computed after the packet is complete. *
- //===================================================================*/
- sddfWriteInteger( &hdfRecordPointer, 0 );
- /*====================================================================
- // The record type, tag, and name *
- //===================================================================*/
- sddfWriteInteger( &hdfRecordPointer, PKT_DESCRIPTOR );
- sddfWriteInteger( &hdfRecordPointer, ( recordFamily | RECORD_TRACE ) );
- sddfWriteString( &hdfRecordPointer, recordName );
- /*====================================================================
- // The record attribute count and string pair *
- //===================================================================*/
- sddfWriteInteger( &hdfRecordPointer, 1 );
- sddfWriteString( &hdfRecordPointer, "description" );
- sddfWriteString( &hdfRecordPointer, recordDescription );
- /*===================================================================*
- // The record field count *
- //===================================================================*/
- sddfWriteInteger( &hdfRecordPointer, 5);
- /*===================================================================*
- // Create fields *
- //===================================================================*/
- WRITE_HDF_FIELD( "Event Identifier",
- "Event ID",
- "Event Identifier Number",
- INTEGER,
- 0 );
- WRITE_HDF_FIELD( "Seconds",
- "Seconds",
- "Floating Point Timestamp",
- DOUBLE,
- 0 );
- WRITE_HDF_FIELD2( "HDF ID",
- "HDF ID",
- "File, Data Set or Dim Identifier number",
- "0",
- "No HDF ID specified",
- LONG,
- 0 );
- WRITE_HDF_FIELD( "Processor Number",
- "Node",
- "Processor number",
- INTEGER,
- 0 );
- WRITE_HDF_FIELD( "HDF Name",
- "HDF Name",
- "Name of File, Data Set or Dim",
- CHARACTER,
- 1 );
-
- recordLength = (int)(hdfRecordPointer - recordBuffer);
-
- hdfRecordPointer = recordBuffer;
- sddfWriteInteger( &hdfRecordPointer, recordLength );
-
- putBytes( recordBuffer, (unsigned) recordLength );
-}
-/*======================================================================*
-// NAME *
-// _hdfMiscDescriptor *
-// Generate a SDDF binary format record descriptor for the *
-// misc procedure *
-// USAGE *
-// _hdfMiscDescriptor() *
-// RETURNS *
-// void *
-//======================================================================*/
-void _hdfMiscDescriptor( void )
-{
- static char recordBuffer[ 4096 ];
- int recordLength;
-
-#ifdef PABLODEBUG
- fprintf( debugFile, "_hdfMiscDescriptor entered\n" );
- fflush( debugFile );
-#endif /* PABLODEBUG */
- hdfRecordPointer = recordBuffer;
- /*===================================================================*
- // Allow space at the beginning of the record for the packet *
- //length which will be computed after the packet is complete. *
- //===================================================================*/
- sddfWriteInteger( &hdfRecordPointer, 0 );
- /*===================================================================*
- // The record type, tag, and name *
- //===================================================================*/
- sddfWriteInteger( &hdfRecordPointer, PKT_DESCRIPTOR );
- sddfWriteInteger( &hdfRecordPointer, ( FAMILY_MISC | RECORD_TRACE ) );
- sddfWriteString( &hdfRecordPointer, "Misc Trace" );
- /*===================================================================*
- // The record attribute count and string pair *
- //===================================================================*/
- sddfWriteInteger( &hdfRecordPointer, 1 );
- sddfWriteString( &hdfRecordPointer, "description" );
- sddfWriteString( &hdfRecordPointer, "Misc Trace Record" );
- /*===================================================================*
- // The record field count *
- //===================================================================*/
- sddfWriteInteger( &hdfRecordPointer, 5);
- /*===================================================================*
- // Create fields *
- //===================================================================*/
- WRITE_HDF_FIELD( "Event Identifier",
- "Event ID",
- "Event Identifier Number",
- INTEGER,
- 0 );
- WRITE_HDF_FIELD( "Seconds",
- "Seconds",
- "Floating Point Timestamp",
- DOUBLE,
- 0 );
- WRITE_HDF_FIELD( "Duration",
- "Duration",
- "Operation Duration",
- DOUBLE,
- 0 );
- WRITE_HDF_FIELD( "Bytes",
- "Bytes",
- "Bytes Requested",
- LONG,
- 0 );
- WRITE_HDF_FIELD( "Processor Number",
- "Node",
- "Processor number",
- INTEGER,
- 0 );
-
- recordLength = (int)(hdfRecordPointer - recordBuffer);
-
- hdfRecordPointer = recordBuffer;
- sddfWriteInteger( &hdfRecordPointer, recordLength );
-
- putBytes( recordBuffer, (unsigned) recordLength );
-}
-
-#endif /* PCF_BUILD */