|
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 |
}
|