PAPI  5.7.0.0
papi_test.h File Reference

Go to the source code of this file.

Data Structures

struct  test_events_t
 

Macros

#define MASK_FP_OPS   0x80000
 
#define MASK_L1_DCA   0x40000 /* three new events for POWER4 */
 
#define MASK_L1_DCW   0x20000
 
#define MASK_L1_DCR   0x10000
 
#define MASK_TOT_IIS   0x04000 /* Try this if TOT_INS won't work */
 
#define MASK_BR_PRC   0x02000
 
#define MASK_BR_MSP   0x01000
 
#define MASK_BR_CN   0x00800
 
#define MASK_L2_TCH   0x00400
 
#define MASK_L2_TCA   0x00200
 
#define MASK_L2_TCM   0x00100
 
#define MASK_L1_DCM   0x00040
 
#define MASK_L1_ICM   0x00020
 
#define MASK_L1_TCM   0x00010
 
#define MASK_FP_INS   0x00004
 
#define MASK_TOT_INS   0x00002
 
#define MASK_TOT_CYC   0x00001
 
#define MAX_TEST_EVENTS   18
 
#define ONEHDR   " %12s"
 
#define TAB2HDR   "%s %12s %12s\n"
 
#define TAB3HDR   "%s %12s %12s %12s\n"
 
#define TAB4HDR   "%s %12s %12s %12s %12s\n"
 
#define ONENUM   " %12lld"
 
#define TAB1   "%-12s %12lld\n"
 
#define TAB2   "%-12s %12lld %12lld\n"
 
#define TAB3   "%-12s %12lld %12lld %12lld\n"
 
#define TAB4   "%-12s %12lld %12lld %12lld %12lld\n"
 
#define TAB5   "%-12s %12lld %12lld %12lld %12lld %12lld\n"
 
#define TWO12   "%12lld %12lld %s"
 
#define LLDFMT   "%lld"
 
#define LLDFMT10   "%10lld"
 
#define LLDFMT12   "%12lld"
 
#define LLDFMT15   "%15lld"
 

Functions

void validate_string (const char *name, char *s)
 
void * get_overflow_address (void *context)
 
void free_test_space (long long **values, int num_tests)
 
long long ** allocate_test_space (int num_tests, int num_events)
 
int add_test_events (int *number, int *mask, int allow_derived)
 
int add_two_events (int *num_events, int *papi_event, int *mask)
 
int add_two_nonderived_events (int *num_events, int *papi_event, int *mask)
 
int add_test_events_r (int *number, int *mask, void *handle)
 
int find_nonderived_event (void)
 
int enum_add_native_events (int *num_events, int **evtcodes, int need_interrupts, int no_software_events, int cidx)
 
int remove_test_events (int *EventSet, int mask)
 
char * stringify_domain (int domain)
 
char * stringify_all_domains (int domains)
 
char * stringify_granularity (int granularity)
 
char * stringify_all_granularities (int granularities)
 
int tests_quiet (int argc, char **argv)
 
void test_pass (const char *filename)
 
void test_fail (const char *file, int line, const char *call, int retval)
 
void test_skip (const char *file, int line, const char *call, int retval)
 
void test_warn (const char *file, int line, const char *call, int retval)
 
void test_print_event_header (const char *call, int evset)
 
int approx_equals (double a, double b)
 

Variables

struct test_events_t test_events []
 
int TESTS_QUIET
 

Macro Definition Documentation

◆ LLDFMT

#define LLDFMT   "%lld"

Definition at line 94 of file papi_test.h.

◆ LLDFMT10

#define LLDFMT10   "%10lld"

Definition at line 95 of file papi_test.h.

◆ LLDFMT12

#define LLDFMT12   "%12lld"

Definition at line 96 of file papi_test.h.

◆ LLDFMT15

#define LLDFMT15   "%15lld"

Definition at line 97 of file papi_test.h.

◆ MASK_BR_CN

#define MASK_BR_CN   0x00800

Definition at line 31 of file papi_test.h.

◆ MASK_BR_MSP

#define MASK_BR_MSP   0x01000

Definition at line 30 of file papi_test.h.

◆ MASK_BR_PRC

#define MASK_BR_PRC   0x02000

Definition at line 29 of file papi_test.h.

◆ MASK_FP_INS

#define MASK_FP_INS   0x00004

Definition at line 38 of file papi_test.h.

◆ MASK_FP_OPS

#define MASK_FP_OPS   0x80000

Definition at line 24 of file papi_test.h.

◆ MASK_L1_DCA

#define MASK_L1_DCA   0x40000 /* three new events for POWER4 */

Definition at line 25 of file papi_test.h.

◆ MASK_L1_DCM

#define MASK_L1_DCM   0x00040

Definition at line 35 of file papi_test.h.

◆ MASK_L1_DCR

#define MASK_L1_DCR   0x10000

Definition at line 27 of file papi_test.h.

◆ MASK_L1_DCW

#define MASK_L1_DCW   0x20000

Definition at line 26 of file papi_test.h.

◆ MASK_L1_ICM

#define MASK_L1_ICM   0x00020

Definition at line 36 of file papi_test.h.

◆ MASK_L1_TCM

#define MASK_L1_TCM   0x00010

Definition at line 37 of file papi_test.h.

◆ MASK_L2_TCA

#define MASK_L2_TCA   0x00200

Definition at line 33 of file papi_test.h.

◆ MASK_L2_TCH

#define MASK_L2_TCH   0x00400

Definition at line 32 of file papi_test.h.

◆ MASK_L2_TCM

#define MASK_L2_TCM   0x00100

Definition at line 34 of file papi_test.h.

◆ MASK_TOT_CYC

#define MASK_TOT_CYC   0x00001

Definition at line 40 of file papi_test.h.

◆ MASK_TOT_IIS

#define MASK_TOT_IIS   0x04000 /* Try this if TOT_INS won't work */

Definition at line 28 of file papi_test.h.

◆ MASK_TOT_INS

#define MASK_TOT_INS   0x00002

Definition at line 39 of file papi_test.h.

◆ MAX_TEST_EVENTS

#define MAX_TEST_EVENTS   18

Definition at line 42 of file papi_test.h.

◆ ONEHDR

#define ONEHDR   " %12s"

Definition at line 83 of file papi_test.h.

◆ ONENUM

#define ONENUM   " %12lld"

Definition at line 87 of file papi_test.h.

◆ TAB1

#define TAB1   "%-12s %12lld\n"

Definition at line 88 of file papi_test.h.

◆ TAB2

#define TAB2   "%-12s %12lld %12lld\n"

Definition at line 89 of file papi_test.h.

◆ TAB2HDR

#define TAB2HDR   "%s %12s %12s\n"

Definition at line 84 of file papi_test.h.

◆ TAB3

#define TAB3   "%-12s %12lld %12lld %12lld\n"

Definition at line 90 of file papi_test.h.

◆ TAB3HDR

#define TAB3HDR   "%s %12s %12s %12s\n"

Definition at line 85 of file papi_test.h.

◆ TAB4

#define TAB4   "%-12s %12lld %12lld %12lld %12lld\n"

Definition at line 91 of file papi_test.h.

◆ TAB4HDR

#define TAB4HDR   "%s %12s %12s %12s %12s\n"

Definition at line 86 of file papi_test.h.

◆ TAB5

#define TAB5   "%-12s %12lld %12lld %12lld %12lld %12lld\n"

Definition at line 92 of file papi_test.h.

◆ TWO12

#define TWO12   "%12lld %12lld %s"

Definition at line 93 of file papi_test.h.

Function Documentation

◆ add_test_events()

int add_test_events ( int *  number,
int *  mask,
int  allow_derived 
)

Definition at line 152 of file test_utils.c.

153 {
154  int retval,i;
155  int EventSet = PAPI_NULL;
156  char name_string[BUFSIZ];
157 
158  *number = 0;
159 
160  /* create the eventset */
162  if ( retval != PAPI_OK ) {
163  test_fail(__FILE__,__LINE__,"Trouble creating eventset",retval);
164  }
165 
166 
167  /* check all the masks */
168  for(i=0;i<MAX_TEST_EVENTS;i++) {
169 
170  if ( *mask & test_events[i].mask ) {
171 
172  /* remove any derived events if told to */
173  if ((is_event_derived(test_events[i].event)) &&
174  (!allow_derived)) {
175  *mask = *mask ^ test_events[i].mask;
176  continue;
177  }
178 
180  test_events[i].event );
181 
182  if ( retval == PAPI_OK ) {
183  ( *number )++;
184  }
185  else {
186  if ( !TESTS_QUIET ) {
188  name_string);
189  fprintf( stdout, "%#x %s is not available.\n",
190  test_events[i].event,name_string);
191  }
192  *mask = *mask ^ test_events[i].mask;
193  }
194  }
195  }
196 
197  return EventSet;
198 }
#define PAPI_OK
Definition: fpapi.h:105
void test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:468
int PAPI_add_event(int EventSet, int EventCode)
Definition: papi.c:1663
int is_event_derived(unsigned int event)
Definition: test_utils.c:81
#define MAX_TEST_EVENTS
Definition: papi_test.h:42
int EventSet
int retval
Definition: zero_fork.c:53
#define PAPI_NULL
Definition: fpapi.h:13
int PAPI_create_eventset(int *EventSet)
Definition: papi.c:1464
int PAPI_event_code_to_name(int EventCode, char *out)
Definition: papi.c:915
int TESTS_QUIET
Definition: test_utils.c:18
unsigned int mask
Definition: papi_test.h:45
struct test_events_t test_events[MAX_TEST_EVENTS]
Definition: test_utils.c:130
int i
Definition: fileop.c:140
Here is the call graph for this function:

◆ add_test_events_r()

int add_test_events_r ( int *  number,
int *  mask,
void *  handle 
)

◆ add_two_events()

int add_two_events ( int *  num_events,
int *  papi_event,
int *  mask 
)

Definition at line 617 of file test_utils.c.

617  {
618 
619  int retval;
620  int EventSet = PAPI_NULL;
621 
622  *num_events=2;
623  *papi_event=PAPI_TOT_INS;
624  (void)mask;
625 
626  /* create the eventset */
628  if ( retval != PAPI_OK ) {
629  test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
630  }
631 
632  retval = PAPI_add_named_event( EventSet, "PAPI_TOT_CYC");
633  if ( retval != PAPI_OK ) {
634  if (!TESTS_QUIET) printf("Couldn't add PAPI_TOT_CYC\n");
635  test_skip(__FILE__,__LINE__,"Couldn't add PAPI_TOT_CYC",0);
636  }
637 
638  retval = PAPI_add_named_event( EventSet, "PAPI_TOT_INS");
639  if ( retval != PAPI_OK ) {
640  if (!TESTS_QUIET) printf("Couldn't add PAPI_TOT_CYC\n");
641  test_skip(__FILE__,__LINE__,"Couldn't add PAPI_TOT_CYC",0);
642  }
643 
644  return EventSet;
645 }
#define PAPI_OK
Definition: fpapi.h:105
void test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:468
static int num_events
int EventSet
int retval
Definition: zero_fork.c:53
int PAPI_add_named_event(int EventSet, const char *EventName)
Definition: papi.c:1876
#define PAPI_TOT_INS
Definition: fpapi.h:186
#define PAPI_NULL
Definition: fpapi.h:13
int PAPI_create_eventset(int *EventSet)
Definition: papi.c:1464
int TESTS_QUIET
Definition: test_utils.c:18
void test_skip(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:561
Here is the call graph for this function:

◆ add_two_nonderived_events()

int add_two_nonderived_events ( int *  num_events,
int *  papi_event,
int *  mask 
)

Definition at line 648 of file test_utils.c.

648  {
649 
650  /* query and set up the right event to monitor */
651  int EventSet = PAPI_NULL;
652  int retval;
653 
654  *num_events=0;
655 
656 #define POTENTIAL_EVENTS 3
657 
658  unsigned int potential_evt_to_add[POTENTIAL_EVENTS][2] =
659  { {( unsigned int ) PAPI_FP_INS, MASK_FP_INS},
660  {( unsigned int ) PAPI_FP_OPS, MASK_FP_OPS},
661  {( unsigned int ) PAPI_TOT_INS, MASK_TOT_INS}
662  };
663 
664  int i;
665 
666  *mask = 0;
667 
668  /* could leak up to two event sets. */
669  for(i=0;i<POTENTIAL_EVENTS;i++) {
670  retval = PAPI_query_event( ( int ) potential_evt_to_add[i][0] );
671  if (retval == PAPI_OK ) {
672  if ( !is_event_derived(potential_evt_to_add[i][0])) {
673  *papi_event = ( int ) potential_evt_to_add[i][0];
674  *mask = ( int ) potential_evt_to_add[i][1] | MASK_TOT_CYC;
675  EventSet = add_test_events( num_events, mask, 0 );
676  if ( *num_events == 2 ) break;
677  }
678  }
679  }
680 
681  return EventSet;
682 }
#define PAPI_OK
Definition: fpapi.h:105
int is_event_derived(unsigned int event)
Definition: test_utils.c:81
static int num_events
#define PAPI_FP_OPS
Definition: fpapi.h:238
int EventSet
int retval
Definition: zero_fork.c:53
#define MASK_FP_INS
Definition: papi_test.h:38
#define PAPI_TOT_INS
Definition: fpapi.h:186
#define PAPI_NULL
Definition: fpapi.h:13
#define MASK_TOT_CYC
Definition: papi_test.h:40
#define MASK_FP_OPS
Definition: papi_test.h:24
int PAPI_query_event(int EventCode)
Definition: papi.c:684
#define MASK_TOT_INS
Definition: papi_test.h:39
#define POTENTIAL_EVENTS
int add_test_events(int *number, int *mask, int allow_derived)
Definition: test_utils.c:152
#define PAPI_FP_INS
Definition: fpapi.h:188
int i
Definition: fileop.c:140
Here is the call graph for this function:

◆ allocate_test_space()

long long** allocate_test_space ( int  num_tests,
int  num_events 
)

Definition at line 46 of file test_utils.c.

47 {
48  long long **values;
49  int i;
50 
51  values =
52  ( long long ** ) malloc( ( size_t ) num_tests *
53  sizeof ( long long * ) );
54  if ( values == NULL )
55  exit( 1 );
56  memset( values, 0x0, ( size_t ) num_tests * sizeof ( long long * ) );
57 
58  for ( i = 0; i < num_tests; i++ ) {
59  values[i] =
60  ( long long * ) malloc( ( size_t ) num_events *
61  sizeof ( long long ) );
62  if ( values[i] == NULL )
63  exit( 1 );
64  memset( values[i], 0x00, ( size_t ) num_events * sizeof ( long long ) );
65  }
66  return ( values );
67 }
static int num_events
int num_tests
Definition: zero_fork.c:53
static long long values[NUM_EVENTS]
Definition: init_fini.c:10
void exit()
int i
Definition: fileop.c:140
Here is the call graph for this function:

◆ approx_equals()

int approx_equals ( double  a,
double  b 
)

Definition at line 33 of file test_utils.c.

34 {
35  if ( ( a >= b * ( 1.0 - TOLERANCE ) ) && ( a <= b * ( 1.0 + TOLERANCE ) ) )
36  return 1;
37  else {
38  printf( "Out of tolerance range %2.2f: %.0f vs %.0f [%.0f,%.0f]\n",
39  TOLERANCE, a, b, b * ( 1.0 - TOLERANCE ),
40  b * ( 1.0 + TOLERANCE ) );
41  return 0;
42  }
43 }
#define TOLERANCE
Definition: test_utils.c:9
static double b[MATRIX_SIZE][MATRIX_SIZE]
Definition: libmsr_basic.c:39
static double a[MATRIX_SIZE][MATRIX_SIZE]
Definition: libmsr_basic.c:38

◆ enum_add_native_events()

int enum_add_native_events ( int *  num_events,
int **  evtcodes,
int  need_interrupts,
int  no_software_events,
int  cidx 
)

Definition at line 686 of file test_utils.c.

689 {
690  /* query and set up the right event to monitor */
691 
692  int EventSet = PAPI_NULL;
693  int i = 0, k, event_code, retval;
694  int counters, event_found = 0;
695  PAPI_event_info_t info;
696  const PAPI_component_info_t *s = NULL;
697  const PAPI_hw_info_t *hw_info = NULL;
698 
699  *num_events=0;
700 
702  if ( s == NULL ) {
703  test_fail( __FILE__, __LINE__,
704  "PAPI_get_component_info", PAPI_ECMP );
705  }
706 
708  if ( hw_info == NULL ) {
709  test_fail( __FILE__, __LINE__, "PAPI_get_hardware_info", 2 );
710  }
711 
712  counters = PAPI_num_hwctrs( );
713  if (counters<1) {
714  if (!TESTS_QUIET) printf("No counters available\n");
715  return EventSet;
716  }
717 
718  if (!TESTS_QUIET) {
719  printf("Trying to fill %d hardware counters...\n", counters);
720  }
721 
722  if (need_interrupt) {
723  if ( (!strcmp(hw_info->model_string,"POWER6")) ||
724  (!strcmp(hw_info->model_string,"POWER5")) ) {
725 
726  test_warn(__FILE__, __LINE__,
727  "Limiting num_counters because of "
728  "LIMITED_PMC on Power5 and Power6",1);
729  counters=4;
730  }
731  }
732 
733  ( *evtcodes ) = ( int * ) calloc( counters, sizeof ( int ) );
734 
736  if ( retval != PAPI_OK ) {
737  test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
738  }
739 
740  /* For platform independence, always ASK FOR the first event */
741  /* Don't just assume it'll be the first numeric value */
742  i = 0 | PAPI_NATIVE_MASK;
744  if ( retval != PAPI_OK ) {
745  test_fail( __FILE__, __LINE__, "PAPI_enum_cmp_event", retval );
746  }
747 
748  do {
749  retval = PAPI_get_event_info( i, &info );
750 
751  /* HACK! FIXME */
752  if (no_software_events && ( strstr(info.symbol,"PERF_COUNT_SW") || strstr(info.long_descr, "PERF_COUNT_SW") ) ) {
753  if (!TESTS_QUIET) {
754  printf("Blocking event %s as a SW event\n", info.symbol);
755  }
756  continue;
757  }
758 
759  if ( s->cntr_umasks ) {
760  k = i;
761 
763  do {
764  retval = PAPI_get_event_info( k, &info );
765  event_code = ( int ) info.event_code;
766 
767  retval = PAPI_add_event( EventSet, event_code );
768  if ( retval == PAPI_OK ) {
769  ( *evtcodes )[event_found] = event_code;
770  if ( !TESTS_QUIET ) {
771  printf( "event_code[%d] = %#x (%s)\n",
772  event_found, event_code, info.symbol );
773  }
774  event_found++;
775  } else {
776  if ( !TESTS_QUIET ) {
777  printf( "%#x (%s) can't be added to the EventSet.\n",
778  event_code, info.symbol );
779  }
780  }
782  && event_found < counters );
783  } else {
784  event_code = ( int ) info.event_code;
785  retval = PAPI_add_event( EventSet, event_code );
786  if ( retval == PAPI_OK ) {
787  ( *evtcodes )[event_found] = event_code;
788  if ( !TESTS_QUIET ) {
789  printf( "event_code[%d] = %#x (%s)\n",
790  event_found, event_code, info.symbol );
791  }
792  event_found++;
793  }
794  }
795  if ( !TESTS_QUIET && retval == PAPI_OK ) {
796  /* */
797  }
798  } else {
799  event_code = ( int ) info.event_code;
800  retval = PAPI_add_event( EventSet, event_code );
801  if ( retval == PAPI_OK ) {
802  ( *evtcodes )[event_found] = event_code;
803  event_found++;
804  } else {
805  if ( !TESTS_QUIET )
806  fprintf( stdout, "%#x is not available.\n", event_code );
807  }
808  }
809  }
811  event_found < counters );
812 
813  *num_events = ( int ) event_found;
814 
815  if (!TESTS_QUIET) printf("Tried to fill %d counters with events, "
816  "found %d\n",counters,event_found);
817 
818  return EventSet;
819 }
#define PAPI_OK
Definition: fpapi.h:105
#define PAPI_NATIVE_MASK
void test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:468
const PAPI_component_info_t * PAPI_get_component_info(int cidx)
Definition: papi.c:796
Hardware info structure.
Definition: papi.h:781
static int num_events
void test_warn(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:524
char long_descr[PAPI_HUGE_STR_LEN]
Definition: papi.h:970
int EventSet
int retval
Definition: zero_fork.c:53
int PAPI_get_event_info(int EventCode, PAPI_event_info_t *info)
Definition: papi.c:835
#define PAPI_ECMP
Definition: fpapi.h:109
static int cidx
int PAPI_num_hwctrs(void)
Definition: papi.c:3909
char symbol[PAPI_HUGE_STR_LEN]
Definition: papi.h:967
char model_string[PAPI_MAX_STR_LEN]
Definition: papi.h:791
#define PAPI_NULL
Definition: fpapi.h:13
double s
Definition: byte_profile.c:36
int PAPI_enum_cmp_event(int *EventCode, int modifier, int cidx)
Definition: papi.c:1357
int PAPI_create_eventset(int *EventSet)
Definition: papi.c:1464
int TESTS_QUIET
Definition: test_utils.c:18
add PAPI preset or native hardware event to an event set
unsigned int event_code
Definition: papi.h:965
const PAPI_hw_info_t * PAPI_get_hardware_info(void)
Definition: papi.c:6185
static const PAPI_hw_info_t * hw_info
Definition: byte_profile.c:28
int i
Definition: fileop.c:140
Here is the call graph for this function:

◆ find_nonderived_event()

int find_nonderived_event ( void  )

Definition at line 98 of file test_utils.c.

99 {
100  /* query and set up the right event to monitor */
101  PAPI_event_info_t info;
102  int potential_evt_to_add[3] = { PAPI_FP_OPS, PAPI_FP_INS, PAPI_TOT_INS };
103  int i;
104 
105  for ( i = 0; i < 3; i++ ) {
106  if ( PAPI_query_event( potential_evt_to_add[i] ) == PAPI_OK ) {
107  if ( PAPI_get_event_info( potential_evt_to_add[i], &info ) ==
108  PAPI_OK ) {
109  if ( ( info.count > 0 ) &&
110  !strcmp( info.derived, "NOT_DERIVED" ) )
111  return ( potential_evt_to_add[i] );
112  }
113  }
114  }
115  return ( 0 );
116 }
#define PAPI_OK
Definition: fpapi.h:105
unsigned int count
Definition: papi.h:988
#define PAPI_FP_OPS
Definition: fpapi.h:238
char derived[PAPI_MIN_STR_LEN]
Definition: papi.h:996
int PAPI_get_event_info(int EventCode, PAPI_event_info_t *info)
Definition: papi.c:835
#define PAPI_TOT_INS
Definition: fpapi.h:186
int PAPI_query_event(int EventCode)
Definition: papi.c:684
#define PAPI_FP_INS
Definition: fpapi.h:188
int i
Definition: fileop.c:140
Here is the call graph for this function:

◆ free_test_space()

void free_test_space ( long long **  values,
int  num_tests 
)

Definition at line 70 of file test_utils.c.

71 {
72  int i;
73 
74  for ( i = 0; i < num_tests; i++ )
75  free( values[i] );
76  free( values );
77 }
int num_tests
Definition: zero_fork.c:53
static long long values[NUM_EVENTS]
Definition: init_fini.c:10
int i
Definition: fileop.c:140

◆ get_overflow_address()

void* get_overflow_address ( void *  context)

◆ remove_test_events()

int remove_test_events ( int *  EventSet,
int  mask 
)

Definition at line 201 of file test_utils.c.

202 {
203  int retval = PAPI_OK;
204 
205  if ( mask & MASK_L1_DCA ) {
207  if ( retval < PAPI_OK )
208  return ( retval );
209  }
210 
211  if ( mask & MASK_L1_DCW ) {
213  if ( retval < PAPI_OK )
214  return ( retval );
215  }
216 
217  if ( mask & MASK_L1_DCR ) {
219  if ( retval < PAPI_OK )
220  return ( retval );
221  }
222 
223  if ( mask & MASK_L2_TCH ) {
225  if ( retval < PAPI_OK )
226  return ( retval );
227  }
228 
229  if ( mask & MASK_L2_TCA ) {
231  if ( retval < PAPI_OK )
232  return ( retval );
233  }
234 
235  if ( mask & MASK_L2_TCM ) {
237  if ( retval < PAPI_OK )
238  return ( retval );
239  }
240 
241  if ( mask & MASK_L1_DCM ) {
243  if ( retval < PAPI_OK )
244  return ( retval );
245  }
246 
247  if ( mask & MASK_L1_ICM ) {
249  if ( retval < PAPI_OK )
250  return ( retval );
251  }
252 
253  if ( mask & MASK_L1_TCM ) {
255  if ( retval < PAPI_OK )
256  return ( retval );
257  }
258 
259  if ( mask & MASK_FP_OPS ) {
261  if ( retval < PAPI_OK )
262  return ( retval );
263  }
264 
265  if ( mask & MASK_FP_INS ) {
267  if ( retval < PAPI_OK )
268  return ( retval );
269  }
270 
271  if ( mask & MASK_TOT_INS ) {
273  if ( retval < PAPI_OK )
274  return ( retval );
275  }
276 
277  if ( mask & MASK_TOT_IIS ) {
279  if ( retval < PAPI_OK )
280  return ( retval );
281  }
282 
283  if ( mask & MASK_TOT_CYC ) {
285  if ( retval < PAPI_OK )
286  return ( retval );
287  }
288 
289  return ( PAPI_destroy_eventset( EventSet ) );
290 }
#define PAPI_OK
Definition: fpapi.h:105
int PAPI_remove_event(int EventSet, int EventCode)
Definition: papi.c:1758
#define PAPI_L1_DCA
Definition: fpapi.h:200
#define PAPI_FP_OPS
Definition: fpapi.h:238
int EventSet
int retval
Definition: zero_fork.c:53
#define MASK_L1_TCM
Definition: papi_test.h:37
#define PAPI_L2_TCA
Definition: fpapi.h:225
#define MASK_FP_INS
Definition: papi_test.h:38
#define PAPI_TOT_INS
Definition: fpapi.h:186
#define PAPI_L1_DCM
Definition: fpapi.h:136
#define PAPI_TOT_IIS
Definition: fpapi.h:185
#define MASK_L2_TCH
Definition: papi_test.h:32
#define MASK_L2_TCA
Definition: papi_test.h:33
#define PAPI_L2_TCH
Definition: fpapi.h:222
#define PAPI_L1_ICM
Definition: fpapi.h:137
#define MASK_TOT_CYC
Definition: papi_test.h:40
#define MASK_FP_OPS
Definition: papi_test.h:24
#define MASK_L1_DCR
Definition: papi_test.h:27
#define MASK_L1_DCA
Definition: papi_test.h:25
#define MASK_TOT_INS
Definition: papi_test.h:39
#define PAPI_L2_TCM
Definition: fpapi.h:143
#define MASK_TOT_IIS
Definition: papi_test.h:28
#define MASK_L2_TCM
Definition: papi_test.h:34
#define MASK_L1_ICM
Definition: papi_test.h:36
#define MASK_L1_DCM
Definition: papi_test.h:35
int PAPI_destroy_eventset(int *EventSet)
Definition: papi.c:2014
#define MASK_L1_DCW
Definition: papi_test.h:26
#define PAPI_L1_TCM
Definition: fpapi.h:142
#define PAPI_TOT_CYC
Definition: fpapi.h:195
#define PAPI_L1_DCR
Definition: fpapi.h:203
#define PAPI_L1_DCW
Definition: fpapi.h:206
#define PAPI_FP_INS
Definition: fpapi.h:188
Here is the call graph for this function:

◆ stringify_all_domains()

char* stringify_all_domains ( int  domains)

Definition at line 293 of file test_utils.c.

294 {
295  static char buf[PAPI_HUGE_STR_LEN];
296  int i, did = 0;
297  buf[0] = '\0';
298 
299  for ( i = PAPI_DOM_MIN; i <= PAPI_DOM_MAX; i = i << 1 )
300  if ( domains & i ) {
301  if ( did )
302  strcpy( buf + strlen( buf ), "|" );
303  strcpy( buf + strlen( buf ), stringify_domain( domains & i ) );
304  did++;
305  }
306  if ( did == 0 )
307  test_fail( __FILE__, __LINE__, "Unrecognized domains!", 0 );
308  return ( buf );
309 }
void test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:468
#define PAPI_DOM_MAX
Definition: fpapi.h:27
#define PAPI_HUGE_STR_LEN
Definition: fpapi.h:42
char * stringify_domain(int domain)
Definition: test_utils.c:312
#define PAPI_DOM_MIN
Definition: fpapi.h:26
volatile int buf[CACHE_FLUSH_BUFFER_SIZE_INTS]
Definition: do_loops.c:12
int i
Definition: fileop.c:140
Here is the call graph for this function:

◆ stringify_all_granularities()

char* stringify_all_granularities ( int  granularities)

Definition at line 332 of file test_utils.c.

333 {
334  static char buf[PAPI_HUGE_STR_LEN];
335  int i, did = 0;
336 
337  buf[0] = '\0';
338  for ( i = PAPI_GRN_MIN; i <= PAPI_GRN_MAX; i = i << 1 )
339  if ( granularities & i ) {
340  if ( did )
341  strcpy( buf + strlen( buf ), "|" );
342  strcpy( buf + strlen( buf ),
343  stringify_granularity( granularities & i ) );
344  did++;
345  }
346  if ( did == 0 )
347  test_fail( __FILE__, __LINE__, "Unrecognized granularity!", 0 );
348 
349  return ( buf );
350 }
#define PAPI_GRN_MAX
Definition: fpapi.h:73
void test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:468
#define PAPI_GRN_MIN
Definition: fpapi.h:68
char * stringify_granularity(int granularity)
Definition: test_utils.c:353
#define PAPI_HUGE_STR_LEN
Definition: fpapi.h:42
volatile int buf[CACHE_FLUSH_BUFFER_SIZE_INTS]
Definition: do_loops.c:12
int i
Definition: fileop.c:140
Here is the call graph for this function:

◆ stringify_domain()

char* stringify_domain ( int  domain)

Definition at line 312 of file test_utils.c.

313 {
314  switch ( domain ) {
315  case PAPI_DOM_SUPERVISOR:
316  return ( "PAPI_DOM_SUPERVISOR" );
317  case PAPI_DOM_USER:
318  return ( "PAPI_DOM_USER" );
319  case PAPI_DOM_KERNEL:
320  return ( "PAPI_DOM_KERNEL" );
321  case PAPI_DOM_OTHER:
322  return ( "PAPI_DOM_OTHER" );
323  case PAPI_DOM_ALL:
324  return ( "PAPI_DOM_ALL" );
325  default:
326  test_fail( __FILE__, __LINE__, "Unrecognized domains!", 0 );
327  }
328  return ( NULL );
329 }
void test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:468
#define PAPI_DOM_KERNEL
Definition: fpapi.h:22
#define PAPI_DOM_OTHER
Definition: fpapi.h:23
#define PAPI_DOM_SUPERVISOR
Definition: fpapi.h:24
#define PAPI_DOM_USER
Definition: fpapi.h:21
#define PAPI_DOM_ALL
Definition: fpapi.h:25
Here is the call graph for this function:

◆ stringify_granularity()

char* stringify_granularity ( int  granularity)

Definition at line 353 of file test_utils.c.

354 {
355  switch ( granularity ) {
356  case PAPI_GRN_THR:
357  return ( "PAPI_GRN_THR" );
358  case PAPI_GRN_PROC:
359  return ( "PAPI_GRN_PROC" );
360  case PAPI_GRN_PROCG:
361  return ( "PAPI_GRN_PROCG" );
362  case PAPI_GRN_SYS_CPU:
363  return ( "PAPI_GRN_SYS_CPU" );
364  case PAPI_GRN_SYS:
365  return ( "PAPI_GRN_SYS" );
366  default:
367  test_fail( __FILE__, __LINE__, "Unrecognized granularity!", 0 );
368  }
369  return ( NULL );
370 }
void test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:468
#define PAPI_GRN_THR
Definition: fpapi.h:67
#define PAPI_GRN_SYS
Definition: fpapi.h:71
#define PAPI_GRN_SYS_CPU
Definition: fpapi.h:72
#define PAPI_GRN_PROCG
Definition: fpapi.h:70
#define PAPI_GRN_PROC
Definition: fpapi.h:69
Here is the call graph for this function:

◆ test_fail()

void test_fail ( const char *  file,
int  line,
const char *  call,
int  retval 
)

Definition at line 468 of file test_utils.c.

469 {
470 // int line_pad;
471  char buf[128];
472 
473  (void)file;
474 
475 // line_pad=(60-strlen(file));
476 // if (line_pad<0) line_pad=0;
477 
478 // fprintf(stdout,"%s",file);
479 // print_spaces(line_pad);
480 
481  memset( buf, '\0', sizeof ( buf ) );
482 
483  if (TESTS_COLOR) fprintf(stdout,"%s",RED);
484  fprintf( stdout, "FAILED!!!");
485  if (TESTS_COLOR) fprintf(stdout,"%s",NORMAL);
486  fprintf( stdout, "\nLine # %d ", line );
487 
488  if ( retval == PAPI_ESYS ) {
489  sprintf( buf, "System error in %s", call );
490  perror( buf );
491  } else if ( retval > 0 ) {
492  fprintf( stdout, "Error: %s\n", call );
493  } else if ( retval == 0 ) {
494 #if defined(sgi)
495  fprintf( stdout, "SGI requires root permissions for this test\n" );
496 #else
497  fprintf( stdout, "Error: %s\n", call );
498 #endif
499  } else {
500  fprintf( stdout, "Error in %s: %s\n", call, PAPI_strerror( retval ) );
501  }
502 
503  fprintf(stdout, "Some tests require special hardware, permissions, OS, compilers\n"
504  "or library versions. PAPI may still function perfectly on your \n"
505  "system without the particular feature being tested here. \n");
506 
507  /* NOTE: Because test_fail is called from thread functions,
508  calling PAPI_shutdown here could prevent some threads
509  from being able to free memory they have allocated.
510  */
511  if ( PAPI_is_initialized( ) ) {
512  PAPI_shutdown( );
513  }
514 
515  /* This is stupid. Threads are the rare case */
516  /* and in any case an exit() should clear everything out */
517  /* adding back the exit() call */
518 
519  exit(1);
520 }
int PAPI_is_initialized(void)
Definition: papi.c:6463
static int TESTS_COLOR
Definition: test_utils.c:19
int retval
Definition: zero_fork.c:53
#define PAPI_ESYS
Definition: fpapi.h:108
void PAPI_shutdown(void)
Definition: papi.c:4461
const char FILE * file
Definition: pscanf.h:13
#define NORMAL
Definition: test_utils.c:415
char * PAPI_strerror(int errorCode)
Definition: papi.c:4603
#define RED
Definition: test_utils.c:412
volatile int buf[CACHE_FLUSH_BUFFER_SIZE_INTS]
Definition: do_loops.c:12
void exit()
Here is the call graph for this function:

◆ test_pass()

void test_pass ( const char *  filename)

Definition at line 432 of file test_utils.c.

433 {
434  (void)filename;
435 
436 // int line_pad;
437 
438 // line_pad=60-strlen(filename);
439 // if (line_pad<0) line_pad=0;
440 
441 // fprintf(stdout,"%s",filename);
442 // print_spaces(line_pad);
443 
444  if ( TEST_WARN ) {
445  print_spaces(59);
446  if (TESTS_COLOR) fprintf( stdout, "%s", YELLOW);
447  fprintf( stdout, "PASSED with WARNING");
448  if (TESTS_COLOR) fprintf( stdout, "%s", NORMAL);
449  fprintf( stdout, "\n");
450  }
451  else {
452  if (TESTS_COLOR) fprintf( stdout, "%s",GREEN);
453  fprintf( stdout, "PASSED");
454  if (TESTS_COLOR) fprintf( stdout, "%s",NORMAL);
455  fprintf( stdout, "\n");
456  }
457 
458  if ( PAPI_is_initialized( ) ) {
459  PAPI_shutdown( );
460  }
461 
462  exit( 0 );
463 
464 }
int PAPI_is_initialized(void)
Definition: papi.c:6463
#define GREEN
Definition: test_utils.c:414
static int TESTS_COLOR
Definition: test_utils.c:19
char filename[MAXNAMESIZE]
Definition: iozone.c:1360
void PAPI_shutdown(void)
Definition: papi.c:4461
static void print_spaces(int count)
Definition: test_utils.c:418
#define NORMAL
Definition: test_utils.c:415
#define YELLOW
Definition: test_utils.c:413
static int TEST_WARN
Definition: test_utils.c:20
void exit()
Here is the call graph for this function:

◆ test_print_event_header()

void test_print_event_header ( const char *  call,
int  evset 
)

Definition at line 582 of file test_utils.c.

583 {
584  int *ev_ids;
585  int i, nev;
586  int retval;
587  char evname[PAPI_MAX_STR_LEN];
588 
589  if ( *call )
590  fprintf( stdout, "%s", call );
591 
592  if ((nev = PAPI_get_cmp_opt(PAPI_MAX_MPX_CTRS,NULL,0)) <= 0) {
593  fprintf( stdout, "Can not list event names.\n" );
594  return;
595  }
596 
597  if ((ev_ids = calloc(nev,sizeof(int))) == NULL) {
598  fprintf( stdout, "Can not list event names.\n" );
599  return;
600  }
601 
602  retval = PAPI_list_events( evset, ev_ids, &nev );
603 
604  if ( retval == PAPI_OK ) {
605  for ( i = 0; i < nev; i++ ) {
606  PAPI_event_code_to_name( ev_ids[i], evname );
607  printf( ONEHDR, evname );
608  }
609  } else {
610  fprintf( stdout, "Can not list event names." );
611  }
612  fprintf( stdout, "\n" );
613  free(ev_ids);
614 }
#define PAPI_OK
Definition: fpapi.h:105
int retval
Definition: zero_fork.c:53
#define PAPI_MAX_MPX_CTRS
Definition: fpapi.h:54
int PAPI_get_cmp_opt(int option, PAPI_option_t *ptr, int cidx)
Definition: papi.c:4335
int PAPI_event_code_to_name(int EventCode, char *out)
Definition: papi.c:915
#define ONEHDR
Definition: papi_test.h:83
int i
Definition: fileop.c:140
int PAPI_list_events(int EventSet, int *Events, int *number)
Definition: papi.c:6001
#define PAPI_MAX_STR_LEN
Definition: fpapi.h:43
Here is the call graph for this function:

◆ test_skip()

void test_skip ( const char *  file,
int  line,
const char *  call,
int  retval 
)

Definition at line 561 of file test_utils.c.

562 {
563 // int line_pad;
564 
565  (void)file;
566  (void)line;
567  (void)call;
568  (void)retval;
569 
570 // line_pad=(60-strlen(file));
571 
572 // fprintf(stdout,"%s",file);
573 // print_spaces(line_pad);
574 
575  fprintf( stdout, "SKIPPED\n");
576 
577  exit( 0 );
578 }
int retval
Definition: zero_fork.c:53
const char FILE * file
Definition: pscanf.h:13
void exit()
Here is the call graph for this function:

◆ test_warn()

void test_warn ( const char *  file,
int  line,
const char *  call,
int  retval 
)

Definition at line 524 of file test_utils.c.

525 {
526 
527  (void)file;
528 
529 // int line_pad;
530 
531 // line_pad=60-strlen(file);
532 // if (line_pad<0) line_pad=0;
533 
534  char buf[128];
535  memset( buf, '\0', sizeof ( buf ) );
536 
537 // fprintf(stdout,"%s",file);
538 // print_spaces(line_pad);
539 
540  if (TEST_WARN==0) fprintf(stdout,"\n");
541  if (TESTS_COLOR) fprintf( stdout, "%s", YELLOW);
542  fprintf( stdout, "WARNING ");
543  if (TESTS_COLOR) fprintf( stdout, "%s", NORMAL);
544  fprintf( stdout, "Line # %d ", line );
545 
546  if ( retval == PAPI_ESYS ) {
547  sprintf( buf, "System warning in %s", call );
548  perror( buf );
549  } else if ( retval > 0 ) {
550  fprintf( stdout, "Warning: %s\n", call );
551  } else if ( retval == 0 ) {
552  fprintf( stdout, "Warning: %s\n", call );
553  } else {
554  fprintf( stdout, "Warning in %s: %s\n", call, PAPI_strerror( retval ));
555  }
556 
557  TEST_WARN++;
558 }
static int TESTS_COLOR
Definition: test_utils.c:19
int retval
Definition: zero_fork.c:53
#define PAPI_ESYS
Definition: fpapi.h:108
const char FILE * file
Definition: pscanf.h:13
#define NORMAL
Definition: test_utils.c:415
char * PAPI_strerror(int errorCode)
Definition: papi.c:4603
#define YELLOW
Definition: test_utils.c:413
static int TEST_WARN
Definition: test_utils.c:20
volatile int buf[CACHE_FLUSH_BUFFER_SIZE_INTS]
Definition: do_loops.c:12
Here is the call graph for this function:

◆ tests_quiet()

int tests_quiet ( int  argc,
char **  argv 
)

Definition at line 376 of file test_utils.c.

377 {
378  char *value;
379  int retval;
380 
381  if ( ( argc > 1 )
382  && ( ( strcasecmp( argv[1], "TESTS_QUIET" ) == 0 )
383  || ( strcasecmp( argv[1], "-q" ) == 0 ) ) ) {
384  TESTS_QUIET = 1;
385  }
386 
387  /* Always report PAPI errors when testing */
388  /* Even in quiet mode */
390  if ( retval != PAPI_OK ) {
391  test_fail( __FILE__, __LINE__, "PAPI_set_debug", retval );
392  }
393 
394  value=getenv("TESTS_COLOR");
395  if (value!=NULL) {
396  if (value[0]=='y') {
397  TESTS_COLOR=1;
398  }
399  else {
400  TESTS_COLOR=0;
401  }
402  }
403 
404  /* Disable colors if sending to a file */
405  if (!isatty(fileno(stdout))) {
406  TESTS_COLOR=0;
407  }
408 
409  return TESTS_QUIET;
410 }
#define PAPI_OK
Definition: fpapi.h:105
void test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:468
char * getenv()
static int TESTS_COLOR
Definition: test_utils.c:19
int retval
Definition: zero_fork.c:53
#define PAPI_VERB_ECONT
Definition: fpapi.h:39
int TESTS_QUIET
Definition: test_utils.c:18
int PAPI_set_debug(int level)
Definition: papi.c:3126
Here is the call graph for this function:

◆ validate_string()

void validate_string ( const char *  name,
char *  s 
)

Definition at line 23 of file test_utils.c.

24 {
25  if ( ( s == NULL ) || ( strlen( s ) == 0 ) ) {
26  char s2[1024] = "";
27  sprintf( s2, "%s was NULL or length 0", name );
28  test_fail( __FILE__, __LINE__, s2, 0 );
29  }
30 }
void test_fail(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:468
static const char * name
Definition: fork_overflow.c:31
double s
Definition: byte_profile.c:36
double s2
Definition: byte_profile.c:36
Here is the call graph for this function:

Variable Documentation

◆ test_events

struct test_events_t test_events[]

Definition at line 130 of file test_utils.c.

◆ TESTS_QUIET

int TESTS_QUIET

Definition at line 18 of file test_utils.c.