300{
303 unsigned int filter = 0;
304 int print_event_info = 0;
307 int print_tabular = 1;
310 int tot_count = 0;
311 int avail_count = 0;
312 int deriv_count = 0;
313 int check_counter = 0;
314 int event_code;
315
317
318
319
320 for( args = 1; args < argc; args++ ) {
321 if ( strstr( argv[args], "-e" ) ) {
322 print_event_info = 1;
323 if( (args+1 >= argc) || ( argv[args+1] == NULL ) || ( strlen( argv[args+1] ) == 0 ) ) {
325 exit( 1 );
326 }
327 name = argv[args + 1];
328 }
329 else if ( strstr( argv[args], "-c" ) || strstr (argv[args], "--check") )
330 {
332 check_counter = 1;
333 }
334 else if ( strstr( argv[args], "-a" ))
336 else if ( strstr( argv[args], "-d" ) )
337 print_tabular = 0;
338 else if ( strstr( argv[args], "-h" ) ) {
340 exit( 1 );
341 } else if ( strstr( argv[args], "--br" ) )
343 else if ( strstr( argv[args], "--cache" ) )
345 else if ( strstr( argv[args], "--cnd" ) )
347 else if ( strstr( argv[args], "--fp" ) )
349 else if ( strstr( argv[args], "--ins" ) )
351 else if ( strstr( argv[args], "--idl" ) )
353 else if ( strstr( argv[args], "--l1" ) )
355 else if ( strstr( argv[args], "--l2" ) )
357 else if ( strstr( argv[args], "--l3" ) )
359 else if ( strstr( argv[args], "--mem" ) )
361 else if ( strstr( argv[args], "--msc" ) )
363 else if ( strstr( argv[args], "--tlb" ) )
365 }
366
367 if ( filter == 0 ) {
368 filter = (
unsigned int ) ( -1 );
369 }
370
371
372
375 fprintf(
stderr,
"Error! PAPI library mismatch!\n");
376 return 1;
377 }
378
379
382 fprintf(
stderr,
"Error with PAPI_set debug!\n");
383 return 1;
384 }
385
387 &hwinfo );
389 fprintf(
stderr,
"Error with PAPI_get_hardware_info!\n");
390 return 1;
391 }
392
393
394
395 if ( print_event_info ) {
396
399
401 printf( "%-30s%s\n%-30s%#-10x\n%-30s%d\n",
402 "Event name:", info.
symbol,
"Event Code:",
405 printf( "%-29s|%s|\n%-29s|%s|\n%-29s|%s|\n",
408 "Developer's Notes:", info.
note );
409 printf( "%-29s|%s|\n%-29s|%s|\n", "Derived Type:",
410 info.
derived,
"Postfix Processing String:",
412
413 for( j = 0; j < (
int ) info.
count; j++ ) {
414 printf( " Native Code[%d]: %#x |%s|\n", j,
417 printf(
" Number of Register Values: %d\n", n_info.
count );
418 for( k = 0; k < (
int ) n_info.
count; k++ ) {
419 printf( " Register[%2d]: %#08x |%s|\n", k,
421 }
422 printf( " Native Event Description: |%s|\n\n",
424 }
425
427 printf(
"\nPRESET event %s is NOT available on this architecture!\n\n",
name);
428 }
429
430 } else {
431 printf( "%-30s%s\n%-30s%#-10x\n%-30s%d\n",
432 "Event name:", info.
symbol,
"Event Code:",
433 info.
event_code,
"Number of Register Values:",
435 printf(
"%-29s|%s|\n",
"Description:", info.
long_descr );
436 for ( k = 0; k < (
int ) info.
count; k++ ) {
437 printf( " Register[%2d]: %#08x |%s|\n", k,
439 }
440
441
442 if ( !strchr(
name,
':' ) ) {
443 if ( 1 ) {
445 printf( "\nUnit Masks:\n" );
446 do {
450 printf( "%-29s|%s|%s|\n",
451 " Mask Info:", info.
symbol,
453 for ( k = 0; k < (
int ) info.
count;k++ ) {
454 printf( " Register[%2d]: %#08x |%s|\n",
456 }
457 }
458 }
461 }
462 }
463 }
464 }
465 }
466 } else {
467 printf( "Sorry, an event by the name '%s' could not be found.\n"
468 " Is it typed correctly?\n\n",
name );
469 }
470 } else {
471
472
473
474 for (
i=0 ;
i<2 ;
i++) {
475
478 } else {
480 }
481
482
484 continue;
485 }
486
487
489 printf( "================================================================================\n" );
490 printf( " PAPI Preset Events\n" );
491 printf( "================================================================================\n" );
492 } else {
493 printf( "\n");
494 printf( "================================================================================\n" );
495 printf( " User Defined Events\n" );
496 printf( "================================================================================\n" );
497 }
498
499 if ( print_tabular ) {
500 printf( " Name Code " );
501 if ( !print_avail_only ) {
502 printf( "Avail " );
503 }
504 printf( "Deriv Description (Note)\n" );
505 } else {
506 printf( "%-13s%-11s%-8s%-16s\n |Long Description|\n"
507 " |Developer's Notes|\n |Derived|\n |PostFix|\n"
508 " Native Code[n]: <hex> |name|\n",
509 "Symbol", "Event Code", "Count", "|Short Description|" );
510 }
511 do {
513 if ( print_tabular ) {
514
516 if ( print_avail_only ) {
518 if ( (check_counter &&
checkCounter (event_code)) || !check_counter)
519 {
520 printf( "%-13s%#x %-5s%s",
524 }
525 }
526 if ( info.
note[0] ) {
527 printf(
" (%s)", info.
note );
528 }
529 printf( "\n" );
530 } else {
531 printf( "%-13s%#x %-6s%-4s %s",
534 ( info.
count ?
"Yes" :
"No" ),
536 if ( info.
note[0] ) {
537 printf(
" (%s)", info.
note );
538 }
539 printf( "\n" );
540 }
541 tot_count++;
543 if ((check_counter &&
checkCounter (event_code)) || !check_counter )
544 avail_count++;
545 }
546 if ( !strcmp(
is_derived( &info ),
"Yes" ) ) {
547 deriv_count++;
548 }
549 }
550 } else {
551 if ( ( print_avail_only && info.
count ) ||
552 ( print_avail_only == 0 ) )
553 {
554 if ((check_counter &&
checkCounter (event_code)) || !check_counter)
555 {
556 printf( "%s\t%#x\t%d\t|%s|\n |%s|\n"
557 " |%s|\n |%s|\n |%s|\n",
561 for ( j = 0; j < (
int ) info.
count; j++ ) {
562 printf( " Native Code[%d]: %#x |%s|\n", j,
564 }
565 }
566 }
567 tot_count++;
569 if ((check_counter &&
checkCounter (event_code)) || !check_counter )
570 avail_count++;
571 }
572 if ( !strcmp(
is_derived( &info ),
"Yes" ) ) {
573 deriv_count++;
574 }
575 }
576 }
578 }
579 }
580
581 printf( "--------------------------------------------------------------------------------\n" );
582
583 if ( !print_event_info ) {
584 if ( print_avail_only ) {
585 printf( "Of %d available events, %d ", avail_count, deriv_count );
586 } else {
587 printf( "Of %d possible events, %d are available, of which %d ",
588 tot_count, avail_count, deriv_count );
589 }
590 if ( deriv_count == 1 ) {
591 printf( "is derived.\n\n" );
592 } else {
593 printf( "are derived.\n\n" );
594 }
595
596 if (avail_count==0) {
597 printf("No events detected! Check papi_component_avail to find out why.\n");
598 printf("\n");
599 }
600 }
601
602 return 0;
603
604}
Convert a name to a numeric hardware event code.
initialize the PAPI library.
Set the current debug level for error output from PAPI.
#define PAPI_NTV_ENUM_UMASKS
#define PAPI_PRESET_BIT_MSC
#define PAPI_PRESET_BIT_CND
#define PAPI_PRESET_BIT_L3
#define PAPI_PRESET_BIT_FP
#define PAPI_PRESET_BIT_INS
#define PAPI_PRESET_BIT_IDL
#define PAPI_PRESET_BIT_TLB
#define PAPI_PRESET_BIT_CACH
#define PAPI_PRESET_BIT_L2
#define PAPI_PRESET_BIT_BR
#define PAPI_PRESET_BIT_L1
int is_preset_event_available(char *name)
static int parse_unit_masks(PAPI_event_info_t *info)
static char * is_derived(PAPI_event_info_t *info)
static void print_help(void)
char name[PAPI_MAX_INFO_TERMS][PAPI_2MAX_STR_LEN]
char postfix[PAPI_2MAX_STR_LEN]
char note[PAPI_HUGE_STR_LEN]
char short_descr[PAPI_MIN_STR_LEN]
unsigned int code[PAPI_MAX_INFO_TERMS]
char long_descr[PAPI_HUGE_STR_LEN]