mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-21 01:04:10 +08:00
a5d53d6dac
Purpose: These changes allow the user to determine bytes requested and bytes received by MPI I/O calls. Description: User wished to know if the number of bytes requested in MPI I/O calls was save as the number actually received. Solution: Added additional fields to the HDFrecord structure for bytes requested and bytes received. Other files reflect these changes. Platforms tested: Solaris IRIX64 parallel
216 lines
8.1 KiB
C
216 lines
8.1 KiB
C
/*
|
|
* 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 HDFRECORD_RT_H
|
|
#define HDFRECORD_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,
|
|
MPIOread,
|
|
MPIOreadAll,
|
|
MPIOwrite,
|
|
MPIOwriteAll,
|
|
MPIOiRead,
|
|
MPIOiWrite,
|
|
MPIOother,
|
|
nTallyFields,
|
|
MPIOreadTrans,
|
|
MPIOreadAllTrans,
|
|
MPIOwriteTrans,
|
|
MPIOwriteAllTrans
|
|
};
|
|
/*======================================================================*
|
|
// Enumeration of byte fields in an HDFrec_t below *
|
|
//======================================================================*/
|
|
enum ByteFields{ MallocBytes,
|
|
ReadBytes,
|
|
WriteBytes,
|
|
AreadBytes,
|
|
AwriteBytes,
|
|
MPIOreadBytesReq,
|
|
MPIOreadBytesTrans,
|
|
MPIOwriteBytesReq,
|
|
MPIOwriteBytesTrans,
|
|
MPIOreadAllBytesReq,
|
|
MPIOreadAllBytesTrans,
|
|
MPIOwriteAllBytesReq,
|
|
MPIOwriteAllBytesTrans,
|
|
MPIOiReadBytesReq,
|
|
MPIOiWriteBytesReq,
|
|
nByteFields,
|
|
nHistFields = AwriteBytes+1 };
|
|
/*======================================================================*
|
|
// 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 */
|
|
CLOCK lastCall; /* time of last call */
|
|
CLOCK incDur; /* inclusive duration */
|
|
CLOCK excDur; /* exclusive duration */
|
|
CLOCK times[nTallyFields]; /* Tally op/calls times */
|
|
int counts[nTallyFields]; /* Tally op/calls counts */
|
|
int bytes[nByteFields]; /* Tally bytes transferred */
|
|
int Hists[nHistFields][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 {
|
|
CLOCK 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;
|
|
long hdfID;
|
|
long PabloID;
|
|
char *fileName;
|
|
} fileRec_t;
|
|
/*=======================================================================
|
|
// Utility programs to determine field index for a given eventID *
|
|
//=====================================================================*/
|
|
int getHDFFieldIndex( int eventID );
|
|
int getHDFByteFieldIndex( int eventID );
|
|
|
|
/*
|
|
* Define flags to distinguish misc i/o begin from misc i/o end
|
|
*/
|
|
#define MISC_BEGIN 0
|
|
#define MISC_END 1
|
|
|
|
#endif /* HDFRECORD_RT_H */
|