179 lines
6.2 KiB
C
179 lines
6.2 KiB
C
|
|
#ifndef _INTER_H
|
|||
|
|
#define _INTER_H
|
|||
|
|
|
|||
|
|
#include "sysstat.h"
|
|||
|
|
#include "strall.h"
|
|||
|
|
#include "dvmh_stat.h"
|
|||
|
|
|
|||
|
|
enum typegrp {
|
|||
|
|
COM,
|
|||
|
|
RCOM,
|
|||
|
|
SYN,
|
|||
|
|
VAR,
|
|||
|
|
OVERLAP,
|
|||
|
|
CALL
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
enum typetimeim {
|
|||
|
|
CALLSMT,
|
|||
|
|
LOSTMT,
|
|||
|
|
PRODMT
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
enum typetime {
|
|||
|
|
LOST,
|
|||
|
|
INSUFUSR,
|
|||
|
|
INSUF,
|
|||
|
|
IDLE,
|
|||
|
|
SUMCOM,
|
|||
|
|
SUMRCOM,
|
|||
|
|
SUMSYN,
|
|||
|
|
SUMVAR,
|
|||
|
|
SUMOVERLAP,
|
|||
|
|
IMB,
|
|||
|
|
EXEC,
|
|||
|
|
CPUUSR,
|
|||
|
|
CPU,
|
|||
|
|
IOTIME,
|
|||
|
|
START,
|
|||
|
|
DVMH_THREADS_USER_TIME,
|
|||
|
|
DVMH_THREADS_SYSTEM_TIME,
|
|||
|
|
DVMH_GPU_TIME_PRODUCTIVE,
|
|||
|
|
DVMH_GPU_TIME_LOST,
|
|||
|
|
PROC,
|
|||
|
|
ITER
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
enum typecom {
|
|||
|
|
IO,
|
|||
|
|
RD,
|
|||
|
|
SH,
|
|||
|
|
RA,
|
|||
|
|
RED
|
|||
|
|
};
|
|||
|
|
//5 collective operation. new operation insert before RED
|
|||
|
|
//if insert new time don't forget insert text in the statread.h
|
|||
|
|
//don't insert new time between SUMCOM...SUMOVERLAP
|
|||
|
|
|
|||
|
|
|
|||
|
|
/** Описатель интервала */
|
|||
|
|
typedef struct tident {
|
|||
|
|
typefrag t; // тип интервала
|
|||
|
|
short nlev; // номер уровня, вложенности
|
|||
|
|
char *pname; // имя исходного файла, где задан интервал
|
|||
|
|
long expr; // значение выражения.
|
|||
|
|
unsigned long nline; // номер строки исходного файла
|
|||
|
|
unsigned long nline_end; // ???
|
|||
|
|
unsigned long proc; // количество процессоров, на которых выполнялся интервал
|
|||
|
|
double nenter; // число вхождений в интервал
|
|||
|
|
} ident;
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct {
|
|||
|
|
double SendCallTime;
|
|||
|
|
double MinSendCallTime;
|
|||
|
|
double MaxSendCallTime;
|
|||
|
|
long SendCallCount;
|
|||
|
|
double RecvCallTime;
|
|||
|
|
double MinRecvCallTime;
|
|||
|
|
double MaxRecvCallTime;
|
|||
|
|
long RecvCallCount;
|
|||
|
|
} s_SendRecvTimes;
|
|||
|
|
|
|||
|
|
|
|||
|
|
class CInter {
|
|||
|
|
public:
|
|||
|
|
/**
|
|||
|
|
* Конструктор интервала
|
|||
|
|
*
|
|||
|
|
* @param pt указатель на массив времен, переписанный из файла
|
|||
|
|
* @param ps ???
|
|||
|
|
* @param id индентификатор интервала
|
|||
|
|
* @param nint номер интервала
|
|||
|
|
* @param iIM ??? (для отладки)
|
|||
|
|
* @param jIM ??? (для отладки)
|
|||
|
|
* @param sore ??? (для отладки)
|
|||
|
|
* @param dvmhStatInterval указатель на DVMH-статистику по интервалу
|
|||
|
|
*/
|
|||
|
|
CInter(
|
|||
|
|
s_GRPTIMES (*pt)[StatGrpCount],
|
|||
|
|
s_SendRecvTimes ps,
|
|||
|
|
ident id,
|
|||
|
|
unsigned long nint,
|
|||
|
|
int iIM,
|
|||
|
|
int jIM,
|
|||
|
|
short sore,
|
|||
|
|
dvmh_stat_interval *dvmhStatInterval
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
~CInter(void);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Эти функции-члены добавляют к ранее посчитанным или записывают новые значения временных
|
|||
|
|
* характеристик. Первая функция AddTime и WriteTime предназначены для работы с массивом mgen,
|
|||
|
|
* первый параметр - это номер индекса, а второй само значение. Вторая функция AddTime
|
|||
|
|
* предназначена для работы с остальными массивами, параметр t1 служит для выбора массива,
|
|||
|
|
* параметр t2 – значение индекса массива, а val - значение.
|
|||
|
|
*/
|
|||
|
|
void AddTime(typetime t2, double val);
|
|||
|
|
void WriteTime(typetime t2, double val);
|
|||
|
|
void AddTime(typegrp t1, typecom t2, double val);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Эти функции-члены читают значения временных характеристик, значения их параметров такие же,
|
|||
|
|
* как и для записи, только последний параметр передается ссылкой.
|
|||
|
|
*/
|
|||
|
|
void ReadTime(typetime t2,double &val);
|
|||
|
|
void ReadTime(typegrp t1,typecom t2,double &val);
|
|||
|
|
void ReadTime(typetimeim t1,int t2,double &val);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Сравнивает идентификатор интервала с другого процессора с идентификатором текущего интервала,
|
|||
|
|
* параметр р - указатель на идентификатор интервала. В случае совпадения идентификаторов по всем
|
|||
|
|
* элементам структуры возвращает 1, в противном случае – 0.
|
|||
|
|
*/
|
|||
|
|
int CompIdent(ident *p);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Устанавливает указатель равным адресу идентификатора интервала.
|
|||
|
|
*/
|
|||
|
|
void ReadIdent(ident **p);
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* Эта функция-член суммирует значения временных характеристик интервала со значениями интервала
|
|||
|
|
* более высокого уровня. Параметр р – указатель на интервал более высокого уровня.
|
|||
|
|
*/
|
|||
|
|
void SumInter(CInter *p);
|
|||
|
|
|
|||
|
|
// -- Открытые параметры
|
|||
|
|
unsigned long ninter; // номер интервала
|
|||
|
|
dvmh_stat_interval *dvmhStatInterval; // DVMH статитстика
|
|||
|
|
|
|||
|
|
private:
|
|||
|
|
ident idint; // описатель интервала
|
|||
|
|
|
|||
|
|
double mgen [ITER + 1]; // массив времен, для выдачи характеристик по процессорам
|
|||
|
|
|
|||
|
|
double mcom [RED + 1]; // массив времен передачи сообщений в коллективных операциях
|
|||
|
|
double mrcom [RED + 1]; // массив времен реальной рассинхронизации
|
|||
|
|
double msyn [RED + 1]; // массив времен рассинхронизации
|
|||
|
|
double mvar [RED + 1]; // массив разброса времен
|
|||
|
|
double moverlap[RED + 1]; // массив времен перекрытия операций
|
|||
|
|
double mcall [RED + 1]; // количество вызовов коллективных операций
|
|||
|
|
|
|||
|
|
double lost[StatGrpCount];
|
|||
|
|
double prod[StatGrpCount];
|
|||
|
|
double calls[StatGrpCount];
|
|||
|
|
|
|||
|
|
double SendCallTime;
|
|||
|
|
double MinSendCallTime;
|
|||
|
|
double MaxSendCallTime;
|
|||
|
|
long SendCallCount;
|
|||
|
|
double RecvCallTime;
|
|||
|
|
double MinRecvCallTime;
|
|||
|
|
double MaxRecvCallTime;
|
|||
|
|
long RecvCallCount;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif
|