Files
SAPFOR/dvm/tools/pppa/trunk/src/statlist.h
2024-04-14 21:30:09 +03:00

169 lines
5.1 KiB
C++
Raw Blame History

#include "json.hpp"
#include <ctime>
#define _STATFILE_
#include "statread.h"
#include <string.h>
#include <stdlib.h>
#include <fstream>
#include <float.h>
#include <exception>
#include <new>
#include <stdbool.h>
#include <string>
#include <sstream>
using json = nlohmann::json;
namespace patch
{
template < typename T > std::string to_string(const T& n)
{
std::ostringstream stm;
stm << n;
return stm.str();
}
}
class CStatInter {
public:
CStatInter( const CStatInter& si);
CStatInter(CStatRead * stat_read, int n);
CStatInter(json source);
~CStatInter();
void delete_tail();
void clear();
void to_string(std::string & result);
void to_json(json & result);
ident id;
//main characteristics
double prod_cpu;
double prod_sys;
double prod_io;
double prod;
double exec_time;
double sys_time;
double efficiency;
double lost_time;
double insuf;
double insuf_user;
double insuf_sys;
double comm;
double real_comm;
double comm_start;
double idle;
double load_imb;
double synch;
double time_var;
double overlap;
double thr_user_time;
double thr_sys_time;
double gpu_time_prod;
double gpu_time_lost;
unsigned long nproc;
unsigned long threadsOfAllProcs;
struct ColOp col_op[RED];
OpGrp (* op_group)[StatGrpCount];
unsigned long qproc;
bool isjson;
//comparative characteristics
//struct ProcTimes comp_proc_times[3];
//characteristics by processes
struct ProcTimes * proc_times;
CStatInter * next;
};
struct CProcInfo {
char * node_name;
double test_time;
};
class CStat { //копирование и присваивание запрещены
private:
CStat operator=(const CStat&);
CStat( const CStat& );
public:
CStat();
CStat(json source);
void init(const char* path);
void init(CStatRead* stat);
void clear();
~CStat() ;
CStatInter * inter_tree; //"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned long nproc; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char p_heading[80];
CProcInfo * proc_info; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>)
CStatRead * stat;
char * spath;
bool iscomp;
bool isinitialized;
void to_string(std::string & result);
void to_json(json &result);
bool err;
bool isjson;
};
struct CStatParam {
//????????????? //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
struct CStatNode { //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CStat stat;
struct CStatNode * next;
struct CStatParam param;
};
class CStatList {
public:
CStatList(int n, char** paths) ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> n <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CStatList(char * path) ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CStatList(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CStatList(const CStatList & stat_list);
~CStatList();
CStatList & operator= (const CStatList & stat_list);
CStatList & operator+ (const CStatList & stat_list);
void add_nodes(int n, char ** paths) ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void clear_list() ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void rename_list(char * new_lname); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void del_node(char * path) ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct CStatNode * get_stat_node(char * path) ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
CStat * get_stat(char * path) ;
void save_list(char * path); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
void compare(struct CStatNode * n1, struct CStatNode * n2);
void clear_stat_list(CStatNode * sl) ;
struct CStatNode* stat_list, **last, *comp_stat1, *comp_stat2;
int length;
char * lname;
bool err;
};
void inter_tree_intersect(CStatInter *i1, CStatInter *i2, CStatInter **r1, CStatInter **r2);
void stat_intersect(const CStat &s1, const CStat &s2, CStat & r1, CStat & r2);
CStatInter * find_inter(long expr, short nlev, CStatInter * cur);
CStatInter * next_inter(short nlev, CStatInter * cur);
/*
struct CStatListNode {
char * nname;
CStatList sl;
CStatListNode * next;
};
CStatListNode * stat_set, **last; //stat_set - list of CStatList
void create_stat_list(char * name) {
if (stat_set) {
(*last)->next = new CStatListNode;
last = &(*last)->next;
(*last)->next = NULL;
(*last)->nname = new char[strlen(name) + 1];
strcpy((*last)->nname, name);
}
else {
stat_set = new CStatListNode;
stat_set->next = NULL;
stat_set->nname = new char[strlen(name) + 1];
strcpy(stat_set->nname, name);
last = &stat_set;
}
}*/