PAPI  5.7.0.0
test_utils.c
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include <string.h>
5 
6 #include "papi.h"
7 #include "papi_test.h"
8 
9 #define TOLERANCE .2
10 
11 
12 /* Variable to hold reporting status
13  if TRUE, output is suppressed
14  if FALSE output is sent to stdout
15  initialized to FALSE
16  declared here so it can be available globally
17 */
18 int TESTS_QUIET = 0;
19 static int TESTS_COLOR = 1;
20 static int TEST_WARN = 0;
21 
22 void
23 validate_string( const char *name, char *s )
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 }
31 
32 int
33 approx_equals( double a, double b )
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 }
44 
45 long long **
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 }
68 
69 void
70 free_test_space( long long **values, int num_tests )
71 {
72  int i;
73 
74  for ( i = 0; i < num_tests; i++ )
75  free( values[i] );
76  free( values );
77 }
78 
79 
80 
81 int is_event_derived(unsigned int event) {
82 
83  PAPI_event_info_t info;
84 
85  if (event & PAPI_PRESET_MASK) {
86 
87  PAPI_get_event_info(event,&info);
88 
89  if (strcmp(info.derived,"NOT_DERIVED")) {
90  // printf("%#x is derived\n",event);
91  return 1;
92  }
93  }
94  return 0;
95 }
96 
97 
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 }
117 
118 
119 /* Add events to an EventSet, as specified by a mask.
120 
121  Returns: number = number of events added
122 
123 */
124 
125 //struct test_events_t {
126 // unsigned int mask;
127 // unsigned int event;
128 //};
129 
140  { MASK_BR_CN, PAPI_BR_CN },
148 };
149 
150 
151 int
152 add_test_events( int *number, int *mask, int allow_derived )
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 */
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 }
199 
200 int
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 }
291 
292 char *
293 stringify_all_domains( int domains )
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 }
310 
311 char *
312 stringify_domain( int domain )
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 }
330 
331 char *
332 stringify_all_granularities( int granularities )
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 }
351 
352 char *
353 stringify_granularity( int granularity )
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 }
371 
372 /* Checks for TESTS_QUIET or -q command line variable */
373 /* Sets the TESTS_QUIET global variable */
374 /* Also returns the value. */
375 int
376 tests_quiet( int argc, char **argv )
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 }
411 
412 #define RED "\033[1;31m"
413 #define YELLOW "\033[1;33m"
414 #define GREEN "\033[1;32m"
415 #define NORMAL "\033[0m"
416 
417 
418 static void print_spaces(int count) {
419  int i;
420 
421  for(i=0;i<count;i++) {
422  fprintf(stdout, " ");
423  }
424 }
425 
426 
427 /* Ugh, all these "fprintf(stdout)" are due to the */
428 /* TESTS_QUIET #define printf hack */
429 /* FIXME! Revert to printf once we are done converting */
430 
431 void
432 test_pass( const char *filename )
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 }
465 
466 /* Use a positive value of retval to simply print an error message */
467 void
468 test_fail( const char *file, int line, const char *call, int retval )
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 }
521 
522 /* Use a positive value of retval to simply print an error message */
523 void
524 test_warn( const char *file, int line, const char *call, int retval )
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 }
559 
560 void
561 test_skip( const char *file, int line, const char *call, int retval )
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 }
579 
580 
581 void
582 test_print_event_header( const char *call, int evset )
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 }
615 
616 int
617 add_two_events( int *num_events, int *papi_event, int *mask ) {
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 }
646 
647 int
648 add_two_nonderived_events( int *num_events, int *papi_event, int *mask ) {
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;
676  if ( *num_events == 2 ) break;
677  }
678  }
679  }
680 
681  return EventSet;
682 }
683 
684 /* add native events to use all counters */
685 int
686 enum_add_native_events( int *num_events, int **evtcodes,
687  int need_interrupt, int no_software_events,
688  int cidx)
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_GRN_MAX
Definition: fpapi.h:73
unsigned int count
Definition: papi.h:988
int PAPI_is_initialized(void)
Definition: papi.c:6463
#define PAPI_NATIVE_MASK
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
const PAPI_component_info_t * PAPI_get_component_info(int cidx)
Definition: papi.c:796
char * getenv()
#define PAPI_DOM_KERNEL
Definition: fpapi.h:22
#define MASK_BR_CN
Definition: papi_test.h:31
int PAPI_add_event(int EventSet, int EventCode)
Definition: papi.c:1663
Hardware info structure.
Definition: papi.h:781
int is_event_derived(unsigned int event)
Definition: test_utils.c:81
#define PAPI_GRN_THR
Definition: fpapi.h:67
#define GREEN
Definition: test_utils.c:414
int remove_test_events(int *EventSet, int mask)
Definition: test_utils.c:201
int tests_quiet(int argc, char **argv)
Definition: test_utils.c:376
int PAPI_remove_event(int EventSet, int EventCode)
Definition: papi.c:1758
int enum_add_native_events(int *num_events, int **evtcodes, int need_interrupt, int no_software_events, int cidx)
Definition: test_utils.c:686
static int num_events
void test_warn(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:524
void free_test_space(long long **values, int num_tests)
Definition: test_utils.c:70
#define PAPI_GRN_MIN
Definition: fpapi.h:68
char * stringify_granularity(int granularity)
Definition: test_utils.c:353
#define PAPI_L1_DCA
Definition: fpapi.h:200
#define PAPI_GRN_SYS
Definition: fpapi.h:71
#define PAPI_FP_OPS
Definition: fpapi.h:238
#define MAX_TEST_EVENTS
Definition: papi_test.h:42
int add_two_events(int *num_events, int *papi_event, int *mask)
Definition: test_utils.c:617
char long_descr[PAPI_HUGE_STR_LEN]
Definition: papi.h:970
int EventSet
static int TESTS_COLOR
Definition: test_utils.c:19
char filename[MAXNAMESIZE]
Definition: iozone.c:1360
#define PAPI_PRESET_MASK
int retval
Definition: zero_fork.c:53
char derived[PAPI_MIN_STR_LEN]
Definition: papi.h:996
#define MASK_L1_TCM
Definition: papi_test.h:37
Return codes and api definitions.
int PAPI_get_event_info(int EventCode, PAPI_event_info_t *info)
Definition: papi.c:835
#define PAPI_MAX_MPX_CTRS
Definition: fpapi.h:54
#define PAPI_DOM_OTHER
Definition: fpapi.h:23
#define PAPI_L2_TCA
Definition: fpapi.h:225
int PAPI_add_named_event(int EventSet, const char *EventName)
Definition: papi.c:1876
#define PAPI_ECMP
Definition: fpapi.h:109
char * stringify_all_domains(int domains)
Definition: test_utils.c:293
#define PAPI_ESYS
Definition: fpapi.h:108
#define MASK_FP_INS
Definition: papi_test.h:38
static int cidx
void test_print_event_header(const char *call, int evset)
Definition: test_utils.c:582
int find_nonderived_event(void)
Definition: test_utils.c:98
int PAPI_num_hwctrs(void)
Definition: papi.c:3909
#define PAPI_DOM_SUPERVISOR
Definition: fpapi.h:24
#define PAPI_TOT_INS
Definition: fpapi.h:186
void PAPI_shutdown(void)
Definition: papi.c:4461
#define PAPI_L1_DCM
Definition: fpapi.h:136
int PAPI_get_cmp_opt(int option, PAPI_option_t *ptr, int cidx)
Definition: papi.c:4335
const char FILE * file
Definition: pscanf.h:13
char symbol[PAPI_HUGE_STR_LEN]
Definition: papi.h:967
#define PAPI_DOM_MAX
Definition: fpapi.h:27
#define PAPI_HUGE_STR_LEN
Definition: fpapi.h:42
#define PAPI_DOM_USER
Definition: fpapi.h:21
int add_two_nonderived_events(int *num_events, int *papi_event, int *mask)
Definition: test_utils.c:648
#define PAPI_TOT_IIS
Definition: fpapi.h:185
#define MASK_L2_TCH
Definition: papi_test.h:32
char model_string[PAPI_MAX_STR_LEN]
Definition: papi.h:791
#define PAPI_VERB_ECONT
Definition: fpapi.h:39
#define MASK_BR_PRC
Definition: papi_test.h:29
#define MASK_L2_TCA
Definition: papi_test.h:33
static void print_spaces(int count)
Definition: test_utils.c:418
#define PAPI_NULL
Definition: fpapi.h:13
#define PAPI_L2_TCH
Definition: fpapi.h:222
long long ** allocate_test_space(int num_tests, int num_events)
Definition: test_utils.c:46
double s
Definition: byte_profile.c:36
#define PAPI_L1_ICM
Definition: fpapi.h:137
int PAPI_enum_cmp_event(int *EventCode, int modifier, int cidx)
Definition: papi.c:1357
#define NORMAL
Definition: test_utils.c:415
#define MASK_TOT_CYC
Definition: papi_test.h:40
double s2
Definition: byte_profile.c:36
int PAPI_create_eventset(int *EventSet)
Definition: papi.c:1464
int PAPI_event_code_to_name(int EventCode, char *out)
Definition: papi.c:915
#define MASK_FP_OPS
Definition: papi_test.h:24
#define TOLERANCE
Definition: test_utils.c:9
int num_tests
Definition: zero_fork.c:53
#define ONEHDR
Definition: papi_test.h:83
#define MASK_L1_DCR
Definition: papi_test.h:27
char * stringify_domain(int domain)
Definition: test_utils.c:312
int PAPI_query_event(int EventCode)
Definition: papi.c:684
#define MASK_L1_DCA
Definition: papi_test.h:25
#define PAPI_DOM_MIN
Definition: fpapi.h:26
#define MASK_TOT_INS
Definition: papi_test.h:39
#define PAPI_L2_TCM
Definition: fpapi.h:143
#define PAPI_BR_MSP
Definition: fpapi.h:182
void test_pass(const char *filename)
Definition: test_utils.c:432
#define PAPI_BR_PRC
Definition: fpapi.h:183
char * stringify_all_granularities(int granularities)
Definition: test_utils.c:332
char * PAPI_strerror(int errorCode)
Definition: papi.c:4603
#define MASK_TOT_IIS
Definition: papi_test.h:28
#define POTENTIAL_EVENTS
int TESTS_QUIET
Definition: test_utils.c:18
#define YELLOW
Definition: test_utils.c:413
#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
add PAPI preset or native hardware event to an event set
static int TEST_WARN
Definition: test_utils.c:20
int PAPI_destroy_eventset(int *EventSet)
Definition: papi.c:2014
void validate_string(const char *name, char *s)
Definition: test_utils.c:23
#define PAPI_GRN_SYS_CPU
Definition: fpapi.h:72
int add_test_events(int *number, int *mask, int allow_derived)
Definition: test_utils.c:152
unsigned int event
Definition: papi_test.h:46
#define MASK_L1_DCW
Definition: papi_test.h:26
#define RED
Definition: test_utils.c:412
#define MASK_BR_MSP
Definition: papi_test.h:30
#define PAPI_L1_TCM
Definition: fpapi.h:142
#define PAPI_TOT_CYC
Definition: fpapi.h:195
int approx_equals(double a, double b)
Definition: test_utils.c:33
void test_skip(const char *file, int line, const char *call, int retval)
Definition: test_utils.c:561
#define PAPI_L1_DCR
Definition: fpapi.h:203
#define PAPI_GRN_PROCG
Definition: fpapi.h:70
unsigned int event_code
Definition: papi.h:965
const PAPI_hw_info_t * PAPI_get_hardware_info(void)
Definition: papi.c:6185
static long long values[NUM_EVENTS]
Definition: init_fini.c:10
#define PAPI_GRN_PROC
Definition: fpapi.h:69
static const PAPI_hw_info_t * hw_info
Definition: byte_profile.c:28
volatile int buf[CACHE_FLUSH_BUFFER_SIZE_INTS]
Definition: do_loops.c:12
#define PAPI_L1_DCW
Definition: fpapi.h:206
void exit()
#define PAPI_DOM_ALL
Definition: fpapi.h:25
static double b[MATRIX_SIZE][MATRIX_SIZE]
Definition: libmsr_basic.c:39
int PAPI_set_debug(int level)
Definition: papi.c:3126
#define PAPI_BR_CN
Definition: fpapi.h:179
#define PAPI_FP_INS
Definition: fpapi.h:188
unsigned int mask
Definition: papi_test.h:45
static long count
static double a[MATRIX_SIZE][MATRIX_SIZE]
Definition: libmsr_basic.c:38
struct test_events_t test_events[MAX_TEST_EVENTS]
Definition: test_utils.c:130
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