#if !defined( __STRALL_H ) #define __STRALL_H #if defined (_STATFILE_) #include "sysstat.h" #endif #define SZSH sizeof(short) #define SZL sizeof(long) #define SZINT sizeof(int) #define SZD sizeof(double) #define SZV sizeof(void*) enum typecollect {INOUT=1,SINOUT,WINOUT,NINOUT,REDUC,SREDUC,WREDUC,NREDUC, SHAD,SSHAD,WSHAD,NSHAD,RACC,SRACC,WRACC,NRACC,REDISTR,SREDISTR,WREDISTR, NREDISTR}; /* new operation insert before REDISTR */ #define QCOLLECT NREDISTR /* 4 type for 5 collective operation */ enum typefrag {PREFIX=QCOLLECT,SEQ,PAR,USER}; #if !defined (_STATFILE_) struct vms_const { unsigned char reverse[2],szsh[2],szl[2], szv[2],szd[2]; }; struct vms_short { unsigned char rank[SZSH],maxnlev[SZSH], smallbuff[SZSH],lvers[SZSH]; }; struct vms_long{ unsigned char proccount[SZL],mpstype[SZL],ioproc[SZL], qfrag[SZL],lbuf[SZL],linter[SZL],lsynchro[SZL]; }; struct vms_void{ unsigned char pbuffer[SZV]; }; struct vms_double{ unsigned char proctime[SZD]; }; /* if change here chahge statread.h */ typedef struct tvms_ch { struct vms_const shc; struct vms_short sh; struct vms_long l; struct vms_void v; struct vms_double d; } *pvms_ch; // -- Статистические интервалы ----------------------------------------------------------------------------------------- /** * Группа характеристик описания статистического интервала * * @see pinter_ch */ struct inter_short { unsigned char nlev[SZSH]; /**< номер уровня вложенности */ unsigned char type[SZSH]; /**< тип интервала */ }; /** * Группа характеристик описания статистического интервала * * @see pinter_ch */ struct inter_long { unsigned char nline [SZL]; /**< начало фрагмента (номер строки пользовательской программы) */ unsigned char nline_end [SZL]; /**< конец фрагмента (номер строки пользовательской программы) */ unsigned char valvar [SZL]; /**< пользовательский идентификатор интервала */ unsigned char qproc [SZL]; /**< количество процессоров, на которых выполнялся интервал */ unsigned char ninter [SZL]; /**< порядковый номер интервала */ unsigned char SendCallCount[SZL]; /**< */ unsigned char RecvCallCount[SZL]; /**< */ }; /** * Группа характеристик описания статистического интервала * * @see pinter_ch */ struct inter_void{ unsigned char up [SZV]; /**< ссылка на родительский интервал */ unsigned char next [SZV]; /**< ссылка на следующего соседа по уровню */ unsigned char down [SZV]; /**< ссылка на первый дочерний интервал */ unsigned char ptimes [SZV]; /**< ссылка на массив времен */ }; /** * Группа характеристик описания статистического интервала * * @see pinter_ch */ struct inter_double{ unsigned char nenter [SZD]; /**< число вхождений в интервал */ unsigned char SendCallTime [SZD]; /**< */ unsigned char MinSendCallTime[SZD]; /**< */ unsigned char MaxSendCallTime[SZD]; /**< */ unsigned char RecvCallTime [SZD]; /**< */ unsigned char MinRecvCallTime[SZD]; /**< */ unsigned char MaxRecvCallTime[SZD]; /**< */ unsigned char times [STM][SZD]; /**< матрица времен */ }; /** * Структура описывающая статистические интервалы * * Элемсенты разделены по подгруппам разделенные по типу. * If change here change treeinter.h */ typedef struct tinter_ch { struct inter_short sh; /**< группа параметров типа short */ struct inter_long l; /**< группа параметров типа long */ struct inter_void v; /**< группа параметров типа void* */ struct inter_double d; /**< группа параметров типа double */ // -- unsigned char dvmhStat[DVMH_STAT_INTERVAL_SIZE]; /**< статистика dvmh */ } *pinter_ch; struct syn_short{ unsigned char nitem[SZSH]; }; struct syn_long{ unsigned char ninter[SZL]; }; struct syn_void{ unsigned char pgrp[SZV]; }; struct syn_double{ unsigned char time[SZD]; }; /* if change here change potensyn.h*/ typedef struct tsyn_ch { struct syn_short sh; struct syn_long l; struct syn_void v; struct syn_double d; }*psyn_ch; #define CPYMEM(to,from)\ memcpy(&(to),&(from),sizeof(to)); #define CPYMEMC(to,from)\ smfrom=0;\ stcond = sizeof(from)>sizeof(to);\ if (stcond && toright==1) smfrom=sizeof(from)-sizeof(to);\ memcpy(&(to),(unsigned char *)(&(from))+smfrom,sizeof(to)); #else #define min_(a,b) (((a) <(b)) ? (a):(b)) #define MAKESHORT(p,nm,nmfirst)\ (&(p->sh.nm)-&(p->sh.nmfirst))*szsh #define MAKELONG(p,nm,nmfirst,q_short)\ q_short*szsh+(&(p->l.nm)-&(p->l.nmfirst))*szl #define MAKEVOID(p,nm,nmfirst,q_short,q_long)\ q_short*szsh+q_long*szl+(&(p->v.nm)-&(p->v.nmfirst))*szv #define MAKEDOUBLE(p,nm,nmfirst,q_short,q_long,q_void)\ q_short*szsh+q_long*szl+q_void*szv+(&(p->d.nm)-&(p->d.nmfirst))*szd #define MAKEDOUBLEA(p,nm,nmfirst,q_short,q_long,q_void,a)\ a=q_short*szsh+q_long*szl+q_void*szv+(&(p->d.nm)-&(p->d.nmfirst))*szd; #define CPYMEM(to,pfrom,sz_var)\ {\ int sz_to;\ int smfrom=0,smto=0,mmin;\ sz_to=sizeof(to);\ mmin=min_(sz_to,sz_var);\ if (sz_to!=sz_var) {\ if (sz_to>sz_var) {\ if (torightto==1) smto=sz_to-sz_var;\ } else {\ if (torightfrom==1) smfrom=sz_var-sz_to;\ }\ }\ if (reverse!=1) {\ memcpy((unsigned char *)(&(to))+smto,pfrom+smfrom,mmin);\ } else {\ int imcpy;\ for (imcpy=mmin-1;imcpy>=0;imcpy--) {\ *((unsigned char*)(&(to))+imcpy+smto)=\ *(pfrom+smfrom+mmin-1-imcpy);\ }\ }\ } #endif #endif