1079 lines
26 KiB
C++
1079 lines
26 KiB
C++
#pragma once
|
||
|
||
#include <vector>
|
||
using namespace std;
|
||
|
||
typedef std::vector<long> long_vect;
|
||
typedef std::vector<int> int_vect;
|
||
|
||
//========================================== Structs Info ===================================================
|
||
|
||
// Common CallInfo structures
|
||
|
||
struct IDOnlyInfo {
|
||
long ID;
|
||
};
|
||
|
||
// Interval structures
|
||
|
||
struct binter_Info {
|
||
long line;
|
||
char * file;
|
||
long index;
|
||
|
||
~binter_Info() { delete file; }
|
||
};
|
||
|
||
typedef struct IDOnlyInfo einter_Info;
|
||
|
||
// Message sending structures
|
||
|
||
typedef struct IDOnlyInfo rtl_BarrierInfo;
|
||
|
||
struct rtl_BcastInfo {
|
||
long Count;
|
||
long Size;
|
||
};
|
||
|
||
// MPS/AM/AMView structures
|
||
|
||
typedef struct IDOnlyInfo CreateVMSInfo;
|
||
typedef struct IDOnlyInfo getam_Info;
|
||
|
||
struct crtps_Info {
|
||
long PSRef; // ID
|
||
long PSRefParent;
|
||
std::vector<long> InitIndexArray;
|
||
std::vector<long> LastIndexArray;
|
||
long StaticSign;
|
||
};
|
||
|
||
struct getps_Info {
|
||
long PSRef;
|
||
long AMRef;
|
||
};
|
||
|
||
struct psview_Info {
|
||
long PSRef; // ID
|
||
long PSRefParent;
|
||
long Rank;
|
||
std::vector<long> SizeArray;
|
||
long StaticSign;
|
||
};
|
||
|
||
struct setelw_Info {
|
||
long PSRef; // 16
|
||
long AMViewRef; // 16
|
||
long AddrNumber; // 10
|
||
std::vector<long> WeightNumber;
|
||
// length = sun i = [0,AddrNumber-1] WeightNumber[i]
|
||
std::vector<double> LoadWeight;
|
||
};
|
||
|
||
typedef struct IDOnlyInfo delps_Info;
|
||
|
||
struct getamr_Info {
|
||
long AMRef; // ID
|
||
long AMViewRef;
|
||
std::vector<long> IndexArray;
|
||
};
|
||
|
||
struct getamv_Info {
|
||
long ArrayHeader; // ArrayHeader
|
||
long AMViewRef;
|
||
};
|
||
|
||
struct mapam_Info {
|
||
long AMRef;
|
||
long PSRef;
|
||
};
|
||
|
||
typedef struct IDOnlyInfo runam_Info;
|
||
|
||
struct crtamv_Info {
|
||
long ID; // AMViewRef
|
||
long AM_ID; // AMRef
|
||
long StaticSign; // StaticSign
|
||
std::vector<long> SizeArray; // Rank + SizeArray
|
||
};
|
||
|
||
typedef struct IDOnlyInfo delamv_Info;
|
||
|
||
//====
|
||
struct blkdiv_Info {
|
||
long ID; // AMViewRef
|
||
std::vector<long> AMVAxisDiv; // AMVAxisDiv[]
|
||
};
|
||
//=***
|
||
|
||
struct distr_Info {
|
||
long ID; // AMViewRef
|
||
long PSRef; // PSRef
|
||
std::vector<long> AxisArray; // AxisArray[]
|
||
std::vector<long> DistrParamArray;// DistrParamArray[]
|
||
};
|
||
|
||
struct redis_Info {
|
||
long ID; // AMViewRef
|
||
long AID; // ArrayHeader
|
||
long PSRef; // PSRef
|
||
std::vector<long> AxisArray; // AxisArray[]
|
||
std::vector<long> DistrParamArray;// DistrParamArray[]
|
||
long NewSign;
|
||
};
|
||
|
||
// DArray structures
|
||
|
||
struct crtda_Info {
|
||
long ArrayHandlePtr; // ArrayHandlePtr
|
||
long ArrayHeader; // ArrayHeader
|
||
long TypeSize;
|
||
long StaticSign; //
|
||
long ReDistrSign; //
|
||
std::vector<long> SizeArray;
|
||
std::vector<long> LowShdWidthArray;
|
||
std::vector<long> HiShdWidthArray;
|
||
};
|
||
|
||
struct align_Info
|
||
{
|
||
long ArrayHeader; // ArrayHeader
|
||
long ArrayHandlePtr; // ArrayHandlePtr
|
||
long PatternRefPtr; // PatternRefPtr
|
||
long PatternRef; // PatternRef
|
||
int PatternType; // AMView = 1, DisArray = 2
|
||
std::vector<long> AxisArray;
|
||
std::vector<long> CoeffArray;
|
||
std::vector<long> ConstArray;
|
||
};
|
||
|
||
typedef struct IDOnlyInfo delda_Info;
|
||
|
||
struct realn_Info {
|
||
long ArrayHandlePtr; // ArrayHandlePtr
|
||
long ArrayHeader; // ArrayHeader
|
||
long PatternRefPtr; // PatternRefPtr
|
||
long PatternRef; // PatternRef
|
||
int PatternType; // AMView = 1, DisArray = 2
|
||
std::vector<long> AxisArray;
|
||
std::vector<long> CoeffArray;
|
||
std::vector<long> ConstArray;
|
||
long NewSign;
|
||
};
|
||
|
||
struct arrcpy_Info {
|
||
|
||
long FromBufferPtr;
|
||
long FromArrayHeader;
|
||
long FromArrayHandlePtr;
|
||
std::vector<long> FromInitIndexArray;
|
||
std::vector<long> FromLastIndexArray;
|
||
std::vector<long> FromStepArray;
|
||
|
||
long ToBufferPtr;
|
||
long ToArrayHeader;
|
||
long ToArrayHandlePtr;
|
||
std::vector<long> ToInitIndexArray;
|
||
std::vector<long> ToLastIndexArray;
|
||
std::vector<long> ToStepArray;
|
||
|
||
long CopyRegim;
|
||
long CopyFlagPtr;
|
||
};
|
||
|
||
struct waitcp_Info {
|
||
long CopyFlagPtr;
|
||
};
|
||
|
||
// ParLoop structures
|
||
|
||
struct crtpl_Info {
|
||
long ID;
|
||
long Rank;
|
||
};
|
||
|
||
struct mappl_Info {
|
||
long LoopRef; //ID;
|
||
long PatternRefPtr;
|
||
long PatternRef;
|
||
int PatternType; // AMView = 1, DisArray = 2
|
||
std::vector<long> AxisArray;
|
||
std::vector<long> CoeffArray;
|
||
std::vector<long> ConstArray;
|
||
std::vector<long> InInitIndexArray;
|
||
std::vector<long> InLastIndexArray;
|
||
std::vector<long> InStepArray;
|
||
};
|
||
|
||
typedef struct IDOnlyInfo dopl_Info;
|
||
typedef struct IDOnlyInfo endpl_Info;
|
||
|
||
//grig
|
||
struct dopl_full_Info
|
||
{
|
||
long ID;
|
||
std::vector<long> Dim;
|
||
std::vector<long> Step;
|
||
std::vector<long> Lower;
|
||
std::vector<long> Upper;
|
||
long ReturnVar; // DoPL //====//
|
||
};
|
||
//\grig
|
||
|
||
// Reduction structures
|
||
|
||
typedef struct IDOnlyInfo crtrg_Info;
|
||
|
||
struct crtred_Info {
|
||
long ID;
|
||
long RedArrayType;
|
||
long RedArrayLength;
|
||
long LocElmLength;
|
||
};
|
||
|
||
struct insred_Info {
|
||
long RG_ID;
|
||
long RV_ID;
|
||
};
|
||
|
||
typedef struct IDOnlyInfo delrg_Info;
|
||
typedef struct IDOnlyInfo delred_Info;
|
||
typedef struct IDOnlyInfo strtrd_Info;
|
||
typedef struct IDOnlyInfo waitrd_Info;
|
||
|
||
// Shadow structures
|
||
|
||
struct crtshg_Info {
|
||
long StaticSign;
|
||
long ShadowGroupRef;
|
||
};
|
||
|
||
struct inssh_Info {
|
||
char event_func;
|
||
// Event func; // function ID
|
||
long ShadowGroupRef; // SHG_ID;
|
||
long ArrayHeader; //
|
||
long ArrayHandlePtr; // DA_ID;
|
||
long FullShdSign; // only for inssh_, incsh_
|
||
long MaxShdCount; // only for insshd_, incshd
|
||
std::vector<long> ShdSignArray; // for insshd_, incshd_
|
||
|
||
std::vector<long> LowShdWidthArray;
|
||
std::vector<long> HiShdWidthArray;
|
||
|
||
std::vector<long> InitDimIndex;
|
||
std::vector<long> LastDimIndex;
|
||
|
||
std::vector<long> InitLowShdIndex;
|
||
std::vector<long> LastLowShdIndex;
|
||
|
||
std::vector<long> InitHiShdIndex;
|
||
std::vector<long> LastHiShdIndex;
|
||
};
|
||
|
||
struct exfrst_Info{
|
||
long ID; // LoopRef
|
||
long ShadowGroupRef;
|
||
};
|
||
|
||
struct imlast_Info{
|
||
long ID; // LoopRef
|
||
long ShadowGroupRef;
|
||
};
|
||
|
||
struct across_Info {
|
||
long AcrossType;
|
||
long OldShadowGroupRef;
|
||
long NewShadowGroupRef;
|
||
double PipeLinePar;
|
||
|
||
long CondPipeLine;
|
||
long ErrPipeLine;
|
||
long PipeLinePLAxis;
|
||
};
|
||
|
||
/*
|
||
AcrossType=1;
|
||
OldShadowGroupRef=9b7ac0;
|
||
NewShadowGroupRef=9b77c0;
|
||
PipeLinePar=0.000000;
|
||
CondPipeLine=0
|
||
ErrPipeLine=60
|
||
*/
|
||
|
||
typedef struct IDOnlyInfo delshg_Info;
|
||
typedef struct IDOnlyInfo strtsh_Info;
|
||
typedef struct IDOnlyInfo waitsh_Info;
|
||
typedef struct IDOnlyInfo sendsh_Info;
|
||
typedef struct IDOnlyInfo recvsh_Info;
|
||
|
||
// Regular access to remote data
|
||
|
||
struct crtrbl_Info {
|
||
long RemArrayHeader;
|
||
long BufferHeader;
|
||
long StaticSign;
|
||
long LoopRef;
|
||
std::vector<long> AxisArray;
|
||
std::vector<long> CoeffArray;
|
||
std::vector<long> ConstArray;
|
||
};
|
||
|
||
struct crtrbp_Info {
|
||
long ID; // BufferHeader;
|
||
long RemArrayHeader;
|
||
long StaticSign;
|
||
long PSRef;
|
||
long IsLocal;
|
||
std::vector<long> CoordArray;
|
||
};
|
||
|
||
struct loadrb_Info {
|
||
long ID; // BufferHeader;
|
||
long RenewSign;
|
||
};
|
||
|
||
typedef struct IDOnlyInfo waitrb_Info;
|
||
|
||
struct srmem_Info {
|
||
long MemoryCount;
|
||
std::vector<long> LengthArray;
|
||
};
|
||
|
||
// Root info
|
||
struct root_Info {
|
||
long VProcCount;
|
||
long VPSRank;
|
||
std::vector<long> VPSSize;
|
||
};
|
||
|
||
|
||
//================================================ Classes ===========================================================
|
||
|
||
|
||
|
||
enum Event {
|
||
|
||
Unknown_Func = -1,
|
||
Root_func = 0,
|
||
dvm_Init,
|
||
Event_dvm_exit,
|
||
|
||
//====
|
||
blkdiv_,
|
||
//=***
|
||
|
||
delrg_,
|
||
insred_,
|
||
arrcpy_,
|
||
aarrcp_,
|
||
waitcp_,
|
||
crtda_,
|
||
getam_,
|
||
crtamv_,
|
||
align_ ,
|
||
getps_,
|
||
saverv_,
|
||
tstelm_,
|
||
rwelm_,
|
||
rlocel_,
|
||
delda_,
|
||
delobj_,
|
||
copelm_,
|
||
elmcpy_,
|
||
wlocel_,
|
||
clocel_,
|
||
getlen_,
|
||
tron_,
|
||
delamv_,
|
||
distr_,
|
||
crtred_,
|
||
delred_,
|
||
begbl_,
|
||
endbl_,
|
||
crtpl_,
|
||
mappl_,
|
||
endpl_,
|
||
locind_,
|
||
tstda_,
|
||
srmem_,
|
||
tstio_,
|
||
getrnk_,
|
||
getsiz_,
|
||
realn_,
|
||
redis_,
|
||
arrmap_,
|
||
setpsw_,
|
||
setind_,
|
||
locsiz_,
|
||
imlast_,
|
||
malign_,
|
||
crtrg_,
|
||
mrealn_,
|
||
strtrd_,
|
||
waitrd_,
|
||
amvmap_,
|
||
exfrst_,
|
||
dopl_,
|
||
mdistr_,
|
||
mredis_,
|
||
delarm_,
|
||
delmvm_,
|
||
|
||
crtshg_,
|
||
inssh_,
|
||
insshd_,
|
||
incsh_,
|
||
incshd_,
|
||
strtsh_,
|
||
waitsh_,
|
||
delshg_,
|
||
recvsh_,
|
||
sendsh_,
|
||
across_,
|
||
|
||
getind_,
|
||
addhdr_,
|
||
delhdr_,
|
||
troff_,
|
||
biof_,
|
||
eiof_,
|
||
|
||
crtps_,
|
||
psview_,
|
||
delps_,
|
||
setelw_,
|
||
getamv_,
|
||
mapam_,
|
||
runam_,
|
||
stopam_,
|
||
getamr_,
|
||
dprstv_,
|
||
dstv_,
|
||
dldv_,
|
||
dbegpl_,
|
||
dbegsl_,
|
||
dendl_,
|
||
diter_,
|
||
drmbuf_,
|
||
dskpbl_,
|
||
|
||
binter_,
|
||
einter_,
|
||
bsloop_,
|
||
bploop_,
|
||
eloop_,
|
||
|
||
crtrbl_,
|
||
crtrbp_,
|
||
loadrb_,
|
||
waitrb_,
|
||
crtbg_,
|
||
insrb_,
|
||
loadbg_,
|
||
waitbg_,
|
||
|
||
dvm_fopen,
|
||
dvm_fclose,
|
||
dvm_void_vfprintf,
|
||
dvm_vfprintf,
|
||
dvm_fwrite,
|
||
dvm_fread,
|
||
dvm_vscanf,
|
||
dvm_fscanf,
|
||
dvm_scanf,
|
||
dvm_vfscanf,
|
||
dvm_clearerr,
|
||
dvm_feof,
|
||
dvm_ferror,
|
||
dvm_fflush,
|
||
dvm_fgetc,
|
||
dvm_fgetpos,
|
||
dvm_fgets,
|
||
dvm_fputc,
|
||
dvm_fputs,
|
||
dvm_freopen,
|
||
dvm_fseek,
|
||
dvm_fsetpos,
|
||
dvm_ftell,
|
||
dvm_getc,
|
||
dvm_getchar,
|
||
dvm_gets,
|
||
dvm_putc,
|
||
dvm_putchar,
|
||
dvm_puts,
|
||
dvm_rewind,
|
||
dvm_setbuf,
|
||
dvm_setvbuf,
|
||
dvm_tmpfile,
|
||
dvm_ungetc,
|
||
dvm_void_fprintf,
|
||
dvm_fprintf,
|
||
dvm_void_printf,
|
||
dvm_printf,
|
||
dvm_void_vprintf,
|
||
dvm_vprintf,
|
||
dvm_remove,
|
||
dvm_rename,
|
||
dvm_tmpnam,
|
||
dvm_close,
|
||
dvm_fstat,
|
||
dvm_lseek,
|
||
dvm_open,
|
||
dvm_read,
|
||
dvm_write,
|
||
dvm_access,
|
||
dvm_stat,
|
||
mps_Bcast,
|
||
mps_Barrier,
|
||
dvm_dfread,
|
||
dvm_dfwrite
|
||
};
|
||
//============================================= Class FuncCall =======================================================
|
||
|
||
// Structure for the final stage of file parsing -- call graph with parameters
|
||
|
||
class FuncCall
|
||
{
|
||
public:
|
||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> char Event func_id; // function identifier
|
||
// char event; // <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> Event, <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
Event func_id;
|
||
double call_time; // call time
|
||
double ret_time; // return time
|
||
void * call_params; // pointer to structure with function params
|
||
int source_line;
|
||
char * source_file;
|
||
|
||
//grig
|
||
vector<double> vcall_time;
|
||
vector<double> vret_time;
|
||
//\grig
|
||
|
||
|
||
public:
|
||
|
||
FuncCall();
|
||
~FuncCall();
|
||
|
||
void RegularTime();
|
||
void UnknownTime();
|
||
void IntervalTime();
|
||
void DArrayTime();
|
||
void crtda();
|
||
void align();
|
||
void delda();
|
||
void realn();
|
||
void arrcpy();
|
||
void aarrcp();
|
||
void waitcp();
|
||
void MPS_AMTime();
|
||
void crtps();
|
||
void psview();
|
||
void getps();
|
||
void setelw();
|
||
void delps();
|
||
void getam();
|
||
void getamr();
|
||
void crtamv();
|
||
void delamv();
|
||
void mapam();
|
||
void runam();
|
||
void stopam();
|
||
void blkdiv();
|
||
void distr();
|
||
void RedisTime();
|
||
|
||
void ParLoopTime();
|
||
void crtpl();
|
||
void endpl();
|
||
void mappl();
|
||
void dopl();
|
||
void ReductTime();
|
||
void crtrg();
|
||
void crtred();
|
||
void insred();
|
||
void delred();
|
||
void delrg();
|
||
void strtrd();
|
||
void waitrd();
|
||
void across();
|
||
void ShadowTime();
|
||
void crtshg();
|
||
void inssh();
|
||
void insshd();
|
||
void incsh();
|
||
void incshd();
|
||
void delshg();
|
||
void strtsh();
|
||
void waitsh();
|
||
void exfrst();
|
||
void imlast();
|
||
void sendsh();
|
||
void recvsh();
|
||
void IOTime();
|
||
void ciotime();
|
||
void biof();
|
||
void tstio();
|
||
void srmem();
|
||
void eiof();
|
||
void RemAccessTime();
|
||
// void crtbl();
|
||
void crtrbl();
|
||
void crtrbp();
|
||
void loadrb();
|
||
void waitrb();
|
||
};
|
||
|
||
|
||
//============================================== class Space ===========================================================
|
||
|
||
#include <algorithm>
|
||
#include <fstream>
|
||
|
||
class Space
|
||
{
|
||
protected:
|
||
std::vector<long> SizeArray; // Size of every dimension
|
||
std::vector<long> MultArray; // Multiplier for each dimension
|
||
public:
|
||
Space();
|
||
Space(const std::vector<long>& ASizeArray, std::vector<long> AMultArray);
|
||
Space(const Space &);
|
||
Space(const std::vector<long>& ASizeArray);
|
||
~Space();
|
||
|
||
// <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
};
|
||
|
||
|
||
//================================================ class VM ============================================================
|
||
|
||
enum mach_Type {
|
||
mach_ETHERNET, // 0
|
||
mach_TRANSPUTER, // 1
|
||
mach_MYRINET // 2
|
||
};
|
||
|
||
class VM : public Space {
|
||
|
||
const VM* parent; // pointer to parent VM
|
||
mach_Type MType; // system type: 0 - network, 1 - transputers, 2 - myrinet
|
||
int numChanels; // number of chanells for myrinet
|
||
double scale;
|
||
double TStart; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: start time
|
||
double TByte; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: byte trasfer time
|
||
double ProcPower; // relative VM power
|
||
int ProcCount; // number of processors in VM
|
||
std::vector<int> mapping; // map to absolute processors numbers
|
||
std::vector<double> weight; // vector - PS weights
|
||
|
||
// calculates number of processors in VM
|
||
int procCount();
|
||
|
||
|
||
//grig
|
||
std::vector<double> vProcPower; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
std::vector<double> vWeights; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
public:
|
||
|
||
|
||
|
||
void SetvWeights(std::vector<double> & varray) {
|
||
vWeights.resize(0);
|
||
vWeights.resize(varray.size());
|
||
for(int i=0;i<varray.size();i++)
|
||
vWeights[i]=varray[i];
|
||
}
|
||
double getProcPower(int k) { return vProcPower[this->map(k)];}
|
||
//\grig
|
||
|
||
public:
|
||
|
||
// constructor for root VM
|
||
VM(const std::vector<long>& ASizeArray, mach_Type AMType, int AnumChanels,
|
||
double Ascale, double ATStart, double ATByte, double AProcPower, std::vector<double>& AvProcPower);
|
||
|
||
// constructor for child VM (crtps_)
|
||
VM(const std::vector<long>& lb, const std::vector<long>& ASizeArray, const VM* Aparent);
|
||
|
||
// constructor for child VM (psview_)
|
||
VM(const std::vector<long>& ASizeArray, const VM* Aparent);
|
||
|
||
//grig!!!!
|
||
VM(const std::vector<long>& ASizeArray, mach_Type AMType, int AnumChanels,
|
||
double Ascale, double ATStart, double ATByte, std::vector<double>& AvProcPower);
|
||
//\grig
|
||
|
||
// Destructor
|
||
~VM();
|
||
|
||
double getTByte() const { return TByte; }
|
||
double getTStart() const { return TStart; }
|
||
int getMType() const { return MType; }
|
||
int getProcCount() const { return ProcCount; }
|
||
//comment by grig double getProcPower() const { return ProcPower; }
|
||
double getProcPower() const { return 0; }
|
||
int getNumChanels() const { return numChanels; }
|
||
double getScale() const { return scale; }
|
||
const std::vector<long>& getSizeArray() const { return SizeArray; }
|
||
int map(int i) const { return mapping[i]; }
|
||
|
||
// Set weights for VM
|
||
void setWeight(const std::vector<double>& Aweight);
|
||
|
||
};
|
||
|
||
extern VM * rootVM; // pointer to root VM
|
||
extern VM * currentVM; // pointer to current VM
|
||
|
||
inline int MPSProcCount() { return currentVM->getProcCount(); }
|
||
|
||
|
||
//================================================ class PS ============================================================
|
||
#include <iostream>
|
||
#include <queue>
|
||
#include <string>
|
||
|
||
//grigory add-on
|
||
using namespace std;
|
||
|
||
void ClustError (int num_error);
|
||
|
||
struct ProcInfo
|
||
{
|
||
int numClust;
|
||
int numInClust;
|
||
double ProcPower;
|
||
};
|
||
|
||
typedef struct ProcInfo strProcInfo;
|
||
|
||
class ClustInfo
|
||
{
|
||
public :
|
||
int numClust;
|
||
vector <strProcInfo> Procs;
|
||
ClustInfo();
|
||
ClustInfo(int num);
|
||
void AddProc(int num,double power);
|
||
void setNum(int num) {this->numClust=num;}
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
void setTStart(double tstart);
|
||
void setTByte(double tbyte);
|
||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
};
|
||
|
||
typedef class ClustInfo classClustInfo;
|
||
|
||
class CompletePS
|
||
{
|
||
public :
|
||
vector<classClustInfo> Clusters;
|
||
CompletePS();
|
||
void MakeNewCluster(int numClust);
|
||
void AddProcToClust(int numClust,int numProc,strProcInfo procInfo);
|
||
void MakeFullMapping(std::vector<double>& result);
|
||
void SortProcessors(std::vector<double> &array_of_productivity);
|
||
|
||
};
|
||
|
||
class MappedProcs
|
||
{
|
||
public:
|
||
vector<strProcInfo> Processors;
|
||
void AddProc(strProcInfo& procInfo);
|
||
MappedProcs() ;
|
||
void AddProccessors(int start,int end,int step , ClustInfo &cPS);
|
||
};
|
||
//\grigory add-on
|
||
|
||
|
||
typedef std::vector<long> LongVector;
|
||
typedef std::vector<double> DoubleVector;
|
||
|
||
class PS {
|
||
|
||
static bool NextOptionLine(std::istream& opt_file, std::string& buffer);
|
||
|
||
std::queue<LongVector> ps_lb_list; // low bounderies on each dim
|
||
std::queue<LongVector> SizeArray_list; // extentions on each dim
|
||
std::queue<DoubleVector> weight_list; // list of vectors - PS weights
|
||
|
||
mach_Type Type;
|
||
int numChanels; // numbers of parallel chanels in Myrinet
|
||
double TStart,
|
||
TByte,
|
||
ProcPower,
|
||
scale;
|
||
|
||
//grigory add-on
|
||
public :
|
||
CompletePS completePS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
MappedProcs mappedProcs; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||
//std::vector<LongVector> vWeights;
|
||
vector<double> vProcPower;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> , <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
public:
|
||
int getProcCount();
|
||
void CorrectMappedProcs();
|
||
void PrepareForAutoSearch(std::vector<long>& perstanovki);
|
||
void reset();
|
||
|
||
//\grigory add-on
|
||
|
||
|
||
|
||
// read PS's configurations from the file
|
||
PS(const char* file_name);
|
||
PS(mach_Type AType, int AnumChanels, double TStart, double TByte, int proc_num);
|
||
|
||
|
||
// returns next processor's charactiristics
|
||
void nextPS(std::vector<long>& lb, std::vector<long>& ASizeArray,
|
||
mach_Type& AMType, int& AnumChanels, double& Ascale,
|
||
double& ATStart, double& ATByte, double& AProcPower, vector<double>& AvProcPower);
|
||
void setTopology(std::vector<long>& ASizeArray);
|
||
void hardwarePS(int& AMType, double& ATStart, double& ATByte, double& AProcPower,vector<double> & AvProcPower);
|
||
|
||
};
|
||
|
||
extern PS * ps; // prosessor system object
|
||
extern long currentPS_ID; // current PS ID
|
||
|
||
|
||
//============================================ Class Processor =====================================================
|
||
enum TimeType {
|
||
__IO_time = 1,
|
||
__CPU_time,
|
||
__CPU_time_sys,
|
||
__CPU_time_usr,
|
||
__Wait_reduct,
|
||
__Wait_shadow,
|
||
__Remote_access,
|
||
__Remote_overlap,
|
||
__Redistribute,
|
||
__IO_comm,
|
||
__Other_comm,
|
||
__Insuff_parall_sys,
|
||
__Insuff_parall_usr,
|
||
__Synchronize,
|
||
__Variation,
|
||
__Reduct_overlap,
|
||
__Shadow_overlap,
|
||
};
|
||
|
||
|
||
class Processor {
|
||
|
||
friend class Interval;
|
||
public:
|
||
double
|
||
Lost_time,
|
||
Insuff_parallelism, // Insuff_parallelism_usr + Insuff_parallelism_sys
|
||
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
|
||
|
||
|
||
public:
|
||
|
||
Processor();
|
||
~Processor() {}
|
||
|
||
};
|
||
|
||
extern double * procElapsedTime; // processor's elapsed times vector
|
||
|
||
//============================================ Class Interval ======================================================
|
||
enum IntervalType {
|
||
__IT_MAIN = 0,
|
||
__IT_SEQ,
|
||
__IT_PAR,
|
||
__IT_USER
|
||
};
|
||
|
||
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> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||
// <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
~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 GetExecTime(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
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>
|
||
//\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
|
||
|
||
//==================================================================================================================
|
||
extern int rootProcCount; // number of processors in root VM
|
||
extern bool FirstTrace;
|
||
|
||
|
||
//------------------------------------------ functions of Predictor ------------------------------------------------
|
||
bool MakeAllConfigurations(int proc_number,int rank,std::vector<long_vect>& result);
|
||
bool IsBestConfiguration(Interval* best,Interval * current);
|
||
int CheckEuristik(std::vector<long> & who);
|
||
|
||
//int predictor(int argc, char *argv[]);
|
||
|
||
extern long_vect MinSizesOfAM; // <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
extern long currentAM_ID;
|