Go to the documentation of this file.
11 #ifndef PfmCodeAnalyserH
12 #define PfmCodeAnalyserH 1
22 #include <sys/types.h>
25 #define MAX_EVT_NAME_LEN 256
26 #define NUM_PMCS PFMLIB_MAX_PMCS
27 #define NUM_PMDS PFMLIB_MAX_PMDS
28 #define FMT_NAME PFM_DFL_SMPL_NAME
29 #define MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS 4
30 #define cpuid( func, eax, ebx, ecx, edx ) \
31 __asm__ __volatile__( "cpuid" : "=a"( eax ), "=b"( ebx ), "=c"( ecx ), "=d"( edx ) : "a"( func ) );
56 PfmCodeAnalyser(
const char* event0,
unsigned int cmask_v0,
bool inv_v0,
const char* event1,
unsigned int cmask_v1,
57 bool inv_v1,
const char* event2,
unsigned int cmask_v2,
bool inv_v2,
const char* event3,
58 unsigned int cmask_v3,
bool inv_v3 );
65 bool inv_v0 =
false,
const char* event1 =
"",
unsigned int cmask_v1 = 0,
66 bool inv_v1 =
false,
const char* event2 =
"",
unsigned int cmask_v2 = 0,
67 bool inv_v2 =
false,
const char* event3 =
"",
unsigned int cmask_v3 = 0,
68 bool inv_v3 =
false );
75 unsigned int cmask_v1,
bool inv_v1,
const char* event2,
unsigned int cmask_v2,
76 bool inv_v2,
const char* event3,
unsigned int cmask_v3,
bool inv_v3 ) {
78 cpuid( 1, ax, bx, cx, dx );
79 int sse4_2_mask = 1 << 20;
103 printf(
"Cannot initialize perfmon!!\nExiting...\n" );
106 while (
count < 3 ) {
112 while (
count < 10 ) {
124 unsigned int cmask_v1,
bool inv_v1,
const char* event2,
125 unsigned int cmask_v2,
bool inv_v2,
const char* event3,
126 unsigned int cmask_v3,
bool inv_v3 ) {
127 static PfmCodeAnalyser theSingleton( event0, cmask_v0, inv_v0, event1, cmask_v1, inv_v1, event2, cmask_v2, inv_v2,
128 event3, cmask_v3, inv_v3 );
135 memset( &
ctx, 0,
sizeof(
ctx ) );
136 memset( &
inp, 0,
sizeof(
inp ) );
138 memset(
pd, 0,
sizeof(
pd ) );
139 memset(
pc, 0,
sizeof(
pc ) );
145 fprintf( stderr,
"ERROR: cannot find event: %s\naborting...\n",
event_str[
i] );
167 fprintf( stderr,
"ERROR: cannot dispatch events: %s\naborting...\n",
pfm_strerror(
ret ) );
180 fprintf( stderr,
"ERROR: Context not created\naborting...\n" );
184 fprintf( stderr,
"ERROR: Could not write pmcs\naborting...\n" );
188 fprintf( stderr,
"ERROR: Could not write pmds\naborting...\n" );
193 fprintf( stderr,
"ERROR: Could not load context\naborting...\n" );
206 fprintf( stderr,
"ERROR: Could not read pmds\naborting...\n" );
218 fprintf( stderr,
"ERROR: Could not read pmds\naborting...\n" );
229 printf(
"Event: %s\nTotal count:%lu\nNumber of counts:%u\nAverage count:%f\nOverhead removed:%u\n",
event_str[
i],
234 #endif // PfmCodeAnalyserH
os_err_t pfm_start(int fd, pfarg_start_t *start)
os_err_t pfm_write_pmds(int fd, pfarg_pmd_t *pmds, int count)
unsigned int pfp_pmd_count
unsigned long sum[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
bool inv[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
unsigned overhead_avg[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
pfmlib_output_param_t outp
unsigned int cmask[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS]
os_err_t pfm_read_pmds(int fd, pfarg_pmd_t *pmds, int count)
pfm_err_t pfm_initialize(void)
char * pfm_strerror(int code)
unsigned long long reg_value
#define MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS
os_err_t pfm_create_context(pfarg_ctx_t *ctx, char *smpl_name, void *smpl_arg, size_t smpl_size)
static PfmCodeAnalyser & Instance(const char *event0="UNHALTED_CORE_CYCLES", unsigned int cmask_v0=0, bool inv_v0=false, const char *event1="", unsigned int cmask_v1=0, bool inv_v1=false, const char *event2="", unsigned int cmask_v2=0, bool inv_v2=false, const char *event3="", unsigned int cmask_v3=0, bool inv_v3=false)
pfmlib_reg_t pfp_pmcs[PFMLIB_MAX_PMCS]
char event_str[MAX_NUMBER_OF_PROGRAMMABLE_COUNTERS][MAX_EVT_NAME_LEN]
pfm_err_t pfm_find_full_event(const char *str, pfmlib_event_t *e)
#define cpuid(func, eax, ebx, ecx, edx)
pfmlib_nhm_input_param_t nhm_params
pfmlib_core_input_param_t params
os_err_t pfm_stop(int fd)
os_err_t pfm_load_context(int fd, pfarg_load_t *load)
pfmlib_reg_t pfp_pmds[PFMLIB_MAX_PMDS]
PfmCodeAnalyser & operator=(PfmCodeAnalyser const &)
unsigned int pfp_pmc_count
os_err_t pfm_write_pmcs(int fd, pfarg_pmc_t *pmcs, int count)
PfmCodeAnalyser(PfmCodeAnalyser const &)
pfm_err_t pfm_dispatch_events(pfmlib_input_param_t *p, void *model_in, pfmlib_output_param_t *q, void *model_out)
PfmCodeAnalyser(const char *event0, unsigned int cmask_v0, bool inv_v0, const char *event1, unsigned int cmask_v1, bool inv_v1, const char *event2, unsigned int cmask_v2, bool inv_v2, const char *event3, unsigned int cmask_v3, bool inv_v3)