⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpe_log_genproc.c

📁 fortran并行计算包
💻 C
字号:
/*   (C) 2001 by Argonne National Laboratory.       See COPYRIGHT in top-level directory.*//**\ --MPE_Log--*  * mpe_log_genproc.c - general routines used in MPE_Log internally*  **  * MPE_Log currently represents some code written by Dr. William*  * Gropp, stolen from Chameleon's 'blog' logging package and*  * modified by Ed Karrels, as well as some fresh code written*  * by Ed Karrels.*  **  * All work funded by Argonne National Laboratory\**//* static MPE_Log_BLOCK *bblock = 0, *btail = 0; */static MPE_Log_BLOCK *MPE_Log_thisBlock = 0, *MPE_Log_firstBlock = 0;static int    MPE_Log_size = MPE_Log_BUF_SIZE;static int    MPE_Log_i    = MPE_Log_BUF_SIZE+1;static int    MPE_Log_clockIsRunning = 0;static int    MPE_Log_isLockedOut = 0;static int    MPE_Log_AdjustedTimes = 0;#define MPE_HAS_PROCIDstatic int    MPE_Log_procid;static double MPE_Log_tinit;	/* starting time */#if DEBUGstatic FILE *debug_file;#endif/* need to put doubles at non-aligned locations */#define MOVEDBL( dest, src ) {memcpy( dest, src, sizeof( double ) );}MPE_Log_BLOCK *MPE_Log_GetBuf (void)  /* get another block of memory (or the first block) */{  MPE_Log_BLOCK *newBlock;  newBlock = (MPE_Log_BLOCK *)MALLOC(MPE_Log_size * sizeof(int) + 				sizeof(MPE_Log_BLOCK) );  newBlock->next = 0;  newBlock->size = 0;#if DEBUGfprintf( debug_file, "[%d] new block at %p\n", MPE_Log_procid, newBlock );fflush( debug_file );#endif  return newBlock;}MPE_Log_BLOCK *MPE_Log_Flush (void){  if (MPE_Log_thisBlock) {    MPE_Log_thisBlock->next = MPE_Log_GetBuf();    MPE_Log_thisBlock->size = MPE_Log_i;    MPE_Log_thisBlock = MPE_Log_thisBlock->next;  } else {    MPE_Log_firstBlock = MPE_Log_thisBlock = MPE_Log_GetBuf();  }  MPE_Log_i = 0;  return MPE_Log_thisBlock;}int MPE_Log_FreeLogMem (headBlk)MPE_Log_BLOCK *headBlk;{  MPE_Log_BLOCK *tmpBlk;  while (headBlk) {    tmpBlk = (MPE_Log_BLOCK *)(headBlk->next);    FREE (headBlk);    headBlk = tmpBlk;  }return 0;}#if DEBUGMPE_Log_PrintTimes()   /* for debugging purposes */{  int               i, procid, *bp, n;  double            t;  MPE_Log_BLOCK    *bl;  MPE_Log_HEADER   *ap;  MPI_Comm_rank( MPI_COMM_WORLD, &procid );  bl       = MPE_Log_firstBlock;  while (bl) {    n      = bl->size;    bp     = (int *)(bl + 1);    i   = 0;    while (i < n) {      ap    = (MPE_Log_HEADER *)bp;      MOVEDBL( &t, &ap->time );      fprintf (stderr, "[%d] event: %d time: %20.10lf\n", procid, ap->event, t );      i += ap->len;      bp   += ap->len;    }    bl = bl->next;  }}#endif/* This routine is called by the MPE_Log initialization routine to   set the 0-point for the clocks */		    int MPE_Log_init_clock (void){  if (!MPE_Log_clockIsRunning) {    MPE_Log_tinit = MPI_Wtime();      /* _tinit is a varible static to this module, defined in this file */    MPE_Log_clockIsRunning = 1;  }return 0;}/* add string containing an event def to the logfile */void MPE_Log_def(event,str)int  event;char *str;{  MPE_Log_HEADER *b;  MPE_Log_VFIELD *v;  int ln, ln4;    ln = strlen(str) + 1;  ln4 = (ln + sizeof(int) - 1) / sizeof(int);  if (MPE_Log_i + 2 * MPE_Log_HEADERSIZE + 2*MPE_Log_VFIELDSIZE(1) +       MPE_Log_VFIELDSIZE(ln4) > MPE_Log_size)    if (!MPE_Log_Flush()) return;  b = (MPE_Log_HEADER *)((int *)(MPE_Log_thisBlock+1) + MPE_Log_i);  MPE_Log_ADDHEADER(b,-9);  MPE_Log_ZEROTIME(b);  MPE_Log_ADDINTS(b,v,1,&event);  MPE_Log_ADDSTRING(b,v,str);  MPE_Log_ADDHEADER(b,-10);  MPE_Log_ZEROTIME(b);  MPE_Log_ADDINTS(b,v,1,&event);  MPID_trvalid( "Log_def" );}#if DEBUGvoid PrintSomeInts( outf, ptr, n )FILE *outf;int *ptr, n;{  int i;  for (i=0; i<n; i++) fprintf( outf, "%d ", ptr[i] );}void PrintBlockLinks( outf )FILE *outf;{  MPE_Log_BLOCK *thisBlock;  thisBlock = MPE_Log_firstBlock;  if (!thisBlock) {    fprintf( outf, "no blocks\n" );    return;  }  while (thisBlock) {    fprintf( outf, "block at %p, next one at %p\n", thisBlock,	    thisBlock->next );    thisBlock = thisBlock->next;  }}void PrintRecord( outf, recHdr )FILE *outf;MPE_Log_HEADER *recHdr;{    int recIntsRead, fldIntsRead, i;  MPE_Log_VFIELD *fldPtr;  double temp_time;/*  fprintf( outf, "Raw record: " );  PrintSomeInts( outf, (int *)recHdr, recHdr->len );  putc( '\n', outf );*/  MOVEDBL( &temp_time, &recHdr->time );  fprintf( outf, "Header: pid %d ln %d evt %d %10.5lf Field lengths: ",	  MPE_Log_procid, recHdr->len, recHdr->event, temp_time );  recIntsRead = MPE_Log_HEADERSIZE;  fldPtr = (MPE_Log_VFIELD *)(recHdr + 1);    while (recIntsRead < recHdr->len) {    fprintf( outf, "%d ", fldPtr->len );    recIntsRead += fldPtr->len;    fldPtr = (MPE_Log_VFIELD *)((int*)fldPtr + fldPtr->len);  } /* per field in a record */  putc( '\n', outf );}void PrintBlockChain( outf, firstBlock )FILE *outf;MPE_Log_BLOCK *firstBlock;{  int blkIntsRead=0;  MPE_Log_BLOCK  *thisBlock;  MPE_Log_HEADER *recHdr;  thisBlock = firstBlock;  fprintf( outf, "\n[%d] start block chain \n\n", MPE_Log_procid );  while (thisBlock) {    fprintf( outf, "Parsing block at %p\n", thisBlock );    recHdr = (MPE_Log_HEADER *)(thisBlock + 1);    blkIntsRead = 0;    while (blkIntsRead < thisBlock->size) {      PrintRecord( outf, recHdr );      blkIntsRead += recHdr->len;/*      fprintf( outf, "blkIntsRead=%d, recHdr->len=%d, thisBlock->size=%d\n", 	      blkIntsRead, recHdr->len, thisBlock->size );*/      recHdr = (MPE_Log_HEADER *)((int*)recHdr + recHdr->len);    } /* per record in a block */    thisBlock = thisBlock -> next;  }  fprintf( outf, "\n[%d] end of block chain\n\n", MPE_Log_procid );}#endif /* if DEBUG */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -