Files
SAPFOR/dvm/tools/pppa/trunk/src/inter.h
2023-09-15 08:30:58 +03:00

179 lines
6.2 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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