Grid 0.7.0
Stat.h
Go to the documentation of this file.
1#ifndef _GRID_STAT_H
2#define _GRID_STAT_H
3
4#ifdef AVX512
5#define _KNIGHTS_LANDING_ROOTONLY
6#endif
7
9
11// Extra KNL counters from MCDRAM
13#ifdef _KNIGHTS_LANDING_
14#define NMC 6
15#define NEDC 8
16struct ctrs
17{
18 uint64_t mcrd[NMC];
19 uint64_t mcwr[NMC];
20 uint64_t edcrd[NEDC];
21 uint64_t edcwr[NEDC];
22 uint64_t edchite[NEDC];
23 uint64_t edchitm[NEDC];
24 uint64_t edcmisse[NEDC];
25 uint64_t edcmissm[NEDC];
26};
27// Peter/Azusa:
28// Our modification of a code provided by Larry Meadows from Intel
29// Verified by email exchange non-NDA, ok for github. Should be as uses /sys/devices/ FS
30// so is already public and in the linux kernel for KNL.
31struct knl_gbl_
32{
33 int mc_rd[NMC];
34 int mc_wr[NMC];
35 int edc_rd[NEDC];
36 int edc_wr[NEDC];
37 int edc_hite[NEDC];
38 int edc_hitm[NEDC];
39 int edc_misse[NEDC];
40 int edc_missm[NEDC];
41};
42#endif
44
46{
47 uint64_t counters[8][256];
48#ifdef _KNIGHTS_LANDING_
49 static struct knl_gbl_ gbl;
50#endif
51 const char *name;
52
53 uint64_t reads; // memory reads
54 uint64_t writes; // memory writes
55 uint64_t mrstart; // memory read counter at start of parallel region
56 uint64_t mrend; // memory read counter at end of parallel region
57 uint64_t mwstart; // memory write counter at start of parallel region
58 uint64_t mwend; // memory write counter at end of parallel region
59
60 // cumulative counters
61 uint64_t count; // number of invocations
62 uint64_t tregion; // total time in parallel region (from thread 0)
63 uint64_t tcycles; // total cycles inside parallel region
64 uint64_t inst, ref, cyc; // fixed counters
65 uint64_t pmc0, pmc1;// pmu
66 // add memory counters here
67 // temp variables
68 uint64_t tstart; // tsc at start of parallel region
69 uint64_t tend; // tsc at end of parallel region
70 // map for ctrs values
71 // 0 pmc0 start
72 // 1 pmc0 end
73 // 2 pmc1 start
74 // 3 pmc1 end
75 // 4 tsc start
76 // 5 tsc end
77 static bool pmu_initialized;
78public:
79 static bool is_init(void){ return pmu_initialized;}
80 static void pmu_init(void);
81 static void pmu_fini(void);
82 static void pmu_start(void);
83 static void pmu_stop(void);
84 void accum(int nthreads);
85 static void xmemctrs(uint64_t *mr, uint64_t *mw);
86 void start(void);
87 void enter(int t);
88 void exit(int t);
89 void print(void);
90 void init(const char *regname);
91 void clear(void);
92#ifdef _KNIGHTS_LANDING_
93 static void KNLsetup(void);
94 static uint64_t KNLreadctr(int fd);
95 static void KNLreadctrs(ctrs &c);
96 static void KNLevsetup(const char *ename, int &fd, int event, int umask);
97#endif
98
99};
100
102
103#endif
104
105
#define NAMESPACE_BEGIN(A)
Definition Namespace.h:35
#define NAMESPACE_END(A)
Definition Namespace.h:36
Definition Stat.h:46
void clear(void)
Definition Stat.cc:23
void enter(int t)
Definition Stat.cc:63
uint64_t tregion
Definition Stat.h:62
uint64_t pmc0
Definition Stat.h:65
uint64_t mrstart
Definition Stat.h:55
uint64_t writes
Definition Stat.h:54
uint64_t tcycles
Definition Stat.h:63
uint64_t mwstart
Definition Stat.h:57
uint64_t tstart
Definition Stat.h:68
uint64_t tend
Definition Stat.h:69
uint64_t cyc
Definition Stat.h:64
const char * name
Definition Stat.h:51
static void pmu_fini(void)
Definition Stat.cc:109
uint64_t counters[8][256]
Definition Stat.h:47
uint64_t count
Definition Stat.h:61
uint64_t inst
Definition Stat.h:64
static void xmemctrs(uint64_t *mr, uint64_t *mw)
Definition Stat.cc:118
void accum(int nthreads)
Definition Stat.cc:85
uint64_t reads
Definition Stat.h:53
static bool pmu_initialized
Definition Stat.h:77
static bool is_init(void)
Definition Stat.h:79
uint64_t pmc1
Definition Stat.h:65
static void pmu_stop(void)
Definition Stat.cc:111
void start(void)
Definition Stat.cc:54
void print(void)
Definition Stat.cc:38
void init(const char *regname)
Definition Stat.cc:10
uint64_t mrend
Definition Stat.h:56
static void pmu_init(void)
Definition Stat.cc:112
uint64_t ref
Definition Stat.h:64
void exit(int t)
Definition Stat.cc:74
uint64_t mwend
Definition Stat.h:58
static void pmu_start(void)
Definition Stat.cc:110