172 lines
5.2 KiB
C++
172 lines
5.2 KiB
C++
#ifndef _INTERVAL_H
|
||
#define _INTERVAL_H
|
||
|
||
#include <limits.h>
|
||
|
||
#include <fstream>
|
||
|
||
#include "FuncCall.h"
|
||
#include "Processor.h"
|
||
|
||
enum IntervalType {
|
||
__IT_MAIN = 0,
|
||
__IT_SEQ,
|
||
__IT_PAR,
|
||
__IT_USER
|
||
};
|
||
|
||
#define NO_EXPR 2000000000
|
||
|
||
enum PredType{
|
||
_Lost_time,
|
||
_Insuff_parallelism,
|
||
_Insuff_parallelism_usr, // User insufficient parallelism
|
||
_Insuff_parallelism_sys, // System Insufficient parallelism
|
||
_Idle, // Idle time
|
||
_Communication, // Communications
|
||
_Synchronization, // Synchronization
|
||
_Real_synchronization, // Synchronization
|
||
_Variation, // Time variation
|
||
_Overlap, // Overlap
|
||
_Load_imbalance, // Load imbalance
|
||
_Execution_time, // Execution time
|
||
_CPU_time, // CPU_time_usr + CPU_time_sys
|
||
_CPU_time_usr, // Usefull processor time
|
||
_CPU_time_sys, // Usefull system time
|
||
_IO_time,
|
||
|
||
_IO_comm, // IO: Communications
|
||
_IO_real_synch, // IO: Real synch
|
||
_IO_synch, // IO: Synchronization
|
||
_IO_vary, // IO: Time variation
|
||
_IO_overlap, // IO: Overlap
|
||
|
||
_Wait_reduction, // Reduction: Communications
|
||
_Reduction_real_synch, // Reduction: Real synch
|
||
_Reduction_synch, // Reduction synchronization
|
||
_Reduction_vary, // Time variation
|
||
_Reduction_overlap, // Reduction: Overlap
|
||
|
||
_Wait_shadow, // Shadow: Communications
|
||
_Shadow_real_synch, // Shadow: Real synch
|
||
_Shadow_synch, // Shadow synchronization
|
||
_Shadow_vary, // Time variation
|
||
_Shadow_overlap, // Shadow: Overlap
|
||
|
||
_Remote_access, // Remote access: Communications
|
||
_Remote_real_synch, // Remote access: Real synch
|
||
_Remote_vary, // Remote access: Time variation
|
||
_Remote_synch, // Remote access: synchronization
|
||
_Remote_overlap, // Remote access: Overlap
|
||
|
||
_Redistribution, // Redistribution: Communications
|
||
_Redistribution_real_synch, // Redistribution: Real synch
|
||
_Redistribution_synch, // Redistribution: synchronization
|
||
_Redistribution_vary, // Redistribution: time vary
|
||
_Redistribution_overlap, // Redistribution: Overlap
|
||
|
||
_Total_time,
|
||
_Efficiency,
|
||
_Productive_time,
|
||
_Productive_CPU_time,
|
||
_Productive_SYS_time
|
||
};
|
||
|
||
|
||
class Interval : public Processor {
|
||
|
||
|
||
static int Intervallevel; // current interval level
|
||
static int IntervalID; // current interval ID
|
||
|
||
IntervalType type; // Interval type
|
||
long index;
|
||
int level; // Interval level
|
||
int EXE_count;
|
||
int source_line;
|
||
int ID;
|
||
|
||
|
||
//for intelval's tree
|
||
Interval * parent_interval;
|
||
int count;
|
||
Interval ** nested_intervals;
|
||
|
||
Processor ** Procs; // processor's vector
|
||
|
||
double Total_time;
|
||
double Efficiency;
|
||
double Productive_time;
|
||
double Productive_CPU_time;
|
||
double Productive_SYS_time;
|
||
|
||
public:
|
||
|
||
char * source_file; //==//
|
||
bool io_trafic; // start FORTRAN I/O
|
||
int num_op_io;
|
||
int num_op_reduct;
|
||
int num_op_shadow;
|
||
int num_op_remote;
|
||
int num_op_redist;
|
||
char *html_title;
|
||
|
||
Interval(int arg); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Interval(int iline = TraceLine::first_line_number,
|
||
char * ifile = TraceLine::first_file_name,
|
||
IntervalType itype = __IT_MAIN,
|
||
long index = NO_EXPR,
|
||
Interval * parent_interval = NULL);
|
||
|
||
~Interval();
|
||
|
||
void AddTime(TimeType InfoType, int proc_no, double TimeDelta);
|
||
|
||
void AddMPSTime(TimeType InfoType, double TimeDelta);
|
||
//grig
|
||
void AddMPSTime(TimeType InfoType, std::vector<double> vTimeDelta);
|
||
double GetEffectiveParameter(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
double GetExecTime(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//\grig
|
||
void AddTimeSynchronize(TimeType InfoType, int proc_no, double TimeDelta);
|
||
void AddTimeVariation(TimeType InfoType, int proc_no, double TimeDelta);
|
||
void CalcIdleAndImbalance();
|
||
static void Enter(IntervalType int_type, int line, char* file, long index);
|
||
static void Leave();
|
||
void Integrate();
|
||
void SaveInFile(std::ofstream& hfile, int up, int next, int pred);
|
||
void SaveTree(std::ofstream& hfile, int up, int next, int pred);
|
||
void setIOTrafic() { io_trafic = true; }
|
||
void resetIOTrafic() { io_trafic = false; }
|
||
|
||
//====
|
||
int copy(Interval* from);
|
||
int copy_poss(Interval* from, double p1, double p2);
|
||
double GetProcPred(int proc_no, PredType pred);
|
||
double GetPred(PredType pred);
|
||
//=***
|
||
|
||
friend void CreateHTMLfile();
|
||
};
|
||
|
||
extern Interval * CurrInterval; // pointer to current interval
|
||
|
||
inline void AddTime(TimeType InfoType, int proc_no, double TimeDelta)
|
||
{ CurrInterval->AddTime(InfoType, proc_no, TimeDelta); }
|
||
|
||
inline void AddMPSTime(TimeType InfoType, double TimeDelta)
|
||
{ CurrInterval->AddMPSTime(InfoType, TimeDelta); }
|
||
|
||
//grig
|
||
inline void AddMPSTime(TimeType InfoType, std::vector<double> vTimeDelta)
|
||
{ CurrInterval->AddMPSTime(InfoType, vTimeDelta); }
|
||
//\grig
|
||
|
||
inline void AddTimeSynchronize(TimeType InfoType, int proc_no, double TimeDelta)
|
||
{ CurrInterval->AddTimeSynchronize(InfoType, proc_no, TimeDelta); }
|
||
|
||
inline void AddTimeVariation(TimeType InfoType, int proc_no, double TimeDelta)
|
||
{ CurrInterval->AddTimeVariation(InfoType, proc_no, TimeDelta); }
|
||
|
||
#endif
|