Files
SAPFOR/dvm/tools/pppa/trunk/src/inter.h

179 lines
6.2 KiB
C
Raw Normal View History

2023-09-15 08:30:58 +03:00
#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