Blame src/utils/papi_component_avail.c

Packit 577717
/** file papi_component_avail.c
Packit 577717
  *	@page papi_component_avail
Packit 577717
  * @brief papi_component_avail utility.
Packit 577717
  *	@section  NAME
Packit 577717
  *		papi_native_avail - provides detailed information for PAPI native events. 
Packit 577717
  *
Packit 577717
  *	@section Synopsis
Packit 577717
  *
Packit 577717
  *	@section Description
Packit 577717
  *		papi_component_avail is a PAPI utility program that reports information 
Packit 577717
  *		about the components papi was built with.
Packit 577717
  *
Packit 577717
  *	@section Options
Packit 577717
  *      
    Packit 577717
      *		
  • -h help message
  • Packit 577717
      *		
  • -d provide detailed information about each component.
  • Packit 577717
      *      
    Packit 577717
      *
    Packit 577717
      *	@section Bugs
    Packit 577717
      *		There are no known bugs in this utility.
    Packit 577717
      *		If you find a bug, it should be reported to the
    Packit 577717
      *		PAPI Mailing List at <ptools-perfapi@icl.utk.edu>.
    Packit 577717
     */
    Packit 577717
    Packit 577717
    #include <stdio.h>
    Packit 577717
    #include <stdlib.h>
    Packit 577717
    #include <string.h>
    Packit 577717
    Packit 577717
    #include "papi.h"
    Packit 577717
    Packit 577717
    #include "print_header.h"
    Packit 577717
    Packit 577717
    #define EVT_LINE 80
    Packit 577717
    Packit 577717
    typedef struct command_flags
    Packit 577717
    {
    Packit 577717
    	int help;
    Packit 577717
    	int details;
    Packit 577717
    	int named;
    Packit 577717
    	char *name;
    Packit 577717
    } command_flags_t;
    Packit 577717
    Packit 577717
    static void
    Packit 577717
    print_help( char **argv )
    Packit 577717
    {
    Packit 577717
    	printf( "This is the PAPI component avail program.\n" );
    Packit 577717
    	printf( "It provides availability of installed PAPI components.\n" );
    Packit 577717
    	printf( "Usage: %s [options]\n", argv[0] );
    Packit 577717
    	printf( "Options:\n\n" );
    Packit 577717
    	printf( "  --help, -h    print this help message\n" );
    Packit 577717
    	printf( "  -d            print detailed information on each component\n" );
    Packit 577717
    }
    Packit 577717
    Packit 577717
    static void
    Packit 577717
    parse_args( int argc, char **argv, command_flags_t * f )
    Packit 577717
    {
    Packit 577717
    	int i;
    Packit 577717
    Packit 577717
    	/* Look for all currently defined commands */
    Packit 577717
    	memset( f, 0, sizeof ( command_flags_t ) );
    Packit 577717
    	for ( i = 1; i < argc; i++ ) {
    Packit 577717
    		if ( !strcmp( argv[i], "-d" ) ) {
    Packit 577717
    			f->details = 1;
    Packit 577717
    		} else if ( !strcmp( argv[i], "-h" ) || !strcmp( argv[i], "--help" ) )
    Packit 577717
    			f->help = 1;
    Packit 577717
    		else
    Packit 577717
    			printf( "%s is not supported\n", argv[i] );
    Packit 577717
    	}
    Packit 577717
    Packit 577717
    	/* if help requested, print and bail */
    Packit 577717
    	if ( f->help ) {
    Packit 577717
    		print_help( argv );
    Packit 577717
    		exit( 1 );
    Packit 577717
    	}
    Packit 577717
    Packit 577717
    }
    Packit 577717
    Packit 577717
    int
    Packit 577717
    main( int argc, char **argv )
    Packit 577717
    {
    Packit 577717
    	int i;
    Packit 577717
    	int retval;
    Packit 577717
    	const PAPI_hw_info_t *hwinfo = NULL;
    Packit 577717
    	const PAPI_component_info_t* cmpinfo;
    Packit 577717
    	command_flags_t flags;
    Packit 577717
    	int numcmp, cid;
    Packit 577717
    Packit 577717
    	/* Initialize before parsing the input arguments */
    Packit 577717
    	retval = PAPI_library_init( PAPI_VER_CURRENT );
    Packit 577717
    	if ( retval != PAPI_VER_CURRENT ) {
    Packit 577717
    		fprintf(stderr,"Error!  PAPI_library_init\n");
    Packit 577717
    		return retval;
    Packit 577717
    	}
    Packit 577717
    Packit 577717
    	parse_args( argc, argv, &flags );
    Packit 577717
    Packit 577717
    	retval = PAPI_set_debug( PAPI_VERB_ECONT );
    Packit 577717
    	if ( retval != PAPI_OK ) {
    Packit 577717
    		fprintf(stderr,"Error!  PAPI_set_debug\n");
    Packit 577717
    		return retval;
    Packit 577717
    	}
    Packit 577717
    Packit 577717
    	retval = papi_print_header( "Available components and "
    Packit 577717
    					"hardware information.\n", &hwinfo );
    Packit 577717
    	if ( retval != PAPI_OK ) {
    Packit 577717
    		fprintf(stderr,"Error! PAPI_get_ahrdware_info\n");
    Packit 577717
    		return 2;
    Packit 577717
    	}
    Packit 577717
    Packit 577717
    	/* Compiled-in Components */
    Packit 577717
    	numcmp = PAPI_num_components(  );
    Packit 577717
    Packit 577717
    	printf("Compiled-in components:\n");
    Packit 577717
    	for ( cid = 0; cid < numcmp; cid++ ) {
    Packit 577717
    	  cmpinfo = PAPI_get_component_info( cid );
    Packit 577717
    Packit 577717
    	  printf( "Name:   %-23s %s\n", cmpinfo->name ,cmpinfo->description);
    Packit 577717
    Packit 577717
    	  if (cmpinfo->disabled) {
    Packit 577717
    	    printf("   \\-> Disabled: %s\n",cmpinfo->disabled_reason);
    Packit 577717
    	  }
    Packit 577717
    Packit 577717
    	  if ( flags.details ) {
    Packit 577717
    		printf( "        %-23s Version:\t\t\t%s\n", " ", cmpinfo->version );
    Packit 577717
    		printf( "        %-23s Number of native events:\t%d\n", " ", cmpinfo->num_native_events);
    Packit 577717
    		printf( "        %-23s Number of preset events:\t%d\n", " ", cmpinfo->num_preset_events);
    Packit 577717
    		printf("\n");
    Packit 577717
    	  }
    Packit 577717
    	}
    Packit 577717
    Packit 577717
    	printf("\nActive components:\n");
    Packit 577717
    	numcmp = PAPI_num_components(  );
    Packit 577717
    Packit 577717
    	for ( cid = 0; cid < numcmp; cid++ ) {
    Packit 577717
    	  cmpinfo = PAPI_get_component_info( cid );
    Packit 577717
    	  if (cmpinfo->disabled) continue;
    Packit 577717
    Packit 577717
    	  printf( "Name:   %-23s %s\n", cmpinfo->name ,cmpinfo->description);
    Packit 577717
    	  printf( "        %-23s Native: %d, Preset: %d, Counters: %d\n",
    Packit 577717
    		  " ", cmpinfo->num_native_events, cmpinfo->num_preset_events, cmpinfo->num_cntrs);
    Packit 577717
    	  printf( "        %-23s PMUs supported: ", " ");
    Packit 577717
    	  int line_len = 49;
    Packit 577717
    	  for (i=0 ; i
    Packit 577717
    		  if (cmpinfo->pmu_names[i] == NULL) continue;
    Packit 577717
    Packit 577717
    		  if (line_len + strlen(cmpinfo->pmu_names[i]) > 130) {
    Packit 577717
    			  printf("\n        %-23s                  ", " ");
    Packit 577717
    			  line_len = 49;
    Packit 577717
    		  } else {
    Packit 577717
    			  line_len += strlen(cmpinfo->pmu_names[i]);
    Packit 577717
    		  }
    Packit 577717
    		  // if it is not the first entry on a line, separate the names
    Packit 577717
    		  if ((i != 0) && (line_len > 50)) {
    Packit 577717
    			  printf(", ");
    Packit 577717
    		  }
    Packit 577717
    		  printf("%s", cmpinfo->pmu_names[i]);
    Packit 577717
    	  }
    Packit 577717
    	  printf("\n\n");
    Packit 577717
    Packit 577717
    	  if ( flags.details ) {
    Packit 577717
    		printf( "        %-23s Version:\t\t\t%s\n", " ", cmpinfo->version );
    Packit 577717
    		printf( "        %-23s Fast counter read:\t\t%d\n", " ", cmpinfo->fast_counter_read);
    Packit 577717
    		printf("\n");
    Packit 577717
    	  }
    Packit 577717
    	}
    Packit 577717
    Packit 577717
    Packit 577717
    	printf
    Packit 577717
    	  ( "\n--------------------------------------------------------------------------------\n" );
    Packit 577717
    Packit 577717
    	return 0;
    Packit 577717
    }