moved
This commit is contained in:
171
Sapfor/_src/Predictor/Lib/Interval.h
Normal file
171
Sapfor/_src/Predictor/Lib/Interval.h
Normal file
@@ -0,0 +1,171 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user