|
Packit |
577717 |
/* file papi_command_line.c
|
|
Packit |
577717 |
* This simply tries to add the events listed on the command line one at a time
|
|
Packit |
577717 |
* then starts and stops the counters and prints the results
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/**
|
|
Packit |
577717 |
* @page papi_command_line
|
|
Packit |
577717 |
* @brief executes PAPI preset or native events from the command line.
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* @section Synopsis
|
|
Packit |
577717 |
* papi_command_line < event > < event > ...
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* @section Description
|
|
Packit |
577717 |
* papi_command_line is a PAPI utility program that adds named events from the
|
|
Packit |
577717 |
* command line to a PAPI EventSet and does some work with that EventSet.
|
|
Packit |
577717 |
* This serves as a handy way to see if events can be counted together,
|
|
Packit |
577717 |
* and if they give reasonable results for known work.
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* @section Options
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* -u Display output values as unsigned integers
|
|
Packit |
577717 |
* -x Display output values as hexadecimal
|
|
Packit |
577717 |
* -h Display help information about this utility.
|
|
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 |
#include "do_loops.h"
|
|
Packit |
577717 |
|
|
Packit |
577717 |
static void
|
|
Packit |
577717 |
print_help( char **argv )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
printf( "Usage: %s [options] [EVENTNAMEs]\n", argv[0] );
|
|
Packit |
577717 |
printf( "Options:\n\n" );
|
|
Packit |
577717 |
printf( "General command options:\n" );
|
|
Packit |
577717 |
printf( "\t-u Display output values as unsigned integers\n" );
|
|
Packit |
577717 |
printf( "\t-x Display output values as hexadecimal\n" );
|
|
Packit |
577717 |
printf( "\t-h Print this help message\n" );
|
|
Packit |
577717 |
printf( "\tEVENTNAMEs Specify one or more preset or native events\n" );
|
|
Packit |
577717 |
printf( "\n" );
|
|
Packit |
577717 |
printf( "This utility performs work while measuring the specified events.\n" );
|
|
Packit |
577717 |
printf( "It can be useful for sanity checks on given events and sets of events.\n" );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
main( int argc, char **argv )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
int retval;
|
|
Packit |
577717 |
int num_events;
|
|
Packit |
577717 |
long long *values;
|
|
Packit |
577717 |
char *success;
|
|
Packit |
577717 |
PAPI_event_info_t info;
|
|
Packit |
577717 |
int EventSet = PAPI_NULL;
|
|
Packit |
577717 |
int i, j, event, data_type = PAPI_DATATYPE_INT64;
|
|
Packit |
577717 |
int u_format = 0;
|
|
Packit |
577717 |
int hex_format = 0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
printf( "\nThis utility lets you add events from the command line "
|
|
Packit |
577717 |
"interface to see if they work.\n\n" );
|
|
Packit |
577717 |
|
|
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 |
exit(retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_create_eventset( &EventSet );
|
|
Packit |
577717 |
if (retval != PAPI_OK ) {
|
|
Packit |
577717 |
fprintf(stderr,"Error! PAPI_create_eventset\n");
|
|
Packit |
577717 |
exit(retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
values =
|
|
Packit |
577717 |
( long long * ) malloc( sizeof ( long long ) * ( size_t ) argc );
|
|
Packit |
577717 |
success = ( char * ) malloc( ( size_t ) argc );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( success == NULL || values == NULL ) {
|
|
Packit |
577717 |
fprintf(stderr,"Error allocating memory!\n");
|
|
Packit |
577717 |
exit(1);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for ( num_events = 0, i = 1; i < argc; i++ ) {
|
|
Packit |
577717 |
if ( !strcmp( argv[i], "-h" ) ) {
|
|
Packit |
577717 |
print_help( argv );
|
|
Packit |
577717 |
exit( 1 );
|
|
Packit |
577717 |
} else if ( !strcmp( argv[i], "-u" ) ) {
|
|
Packit |
577717 |
u_format = 1;
|
|
Packit |
577717 |
} else if ( !strcmp( argv[i], "-x" ) ) {
|
|
Packit |
577717 |
hex_format = 1;
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
if ( ( retval = PAPI_add_named_event( EventSet, argv[i] ) ) != PAPI_OK ) {
|
|
Packit |
577717 |
printf( "Failed adding: %s\nbecause: %s\n", argv[i],
|
|
Packit |
577717 |
PAPI_strerror(retval));
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
success[num_events++] = i;
|
|
Packit |
577717 |
printf( "Successfully added: %s\n", argv[i] );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Automatically pass if no events, for run_tests.sh */
|
|
Packit |
577717 |
if ( num_events == 0 ) {
|
|
Packit |
577717 |
printf("No events specified!\n");
|
|
Packit |
577717 |
printf("Try running something like: %s PAPI_TOT_CYC\n\n",
|
|
Packit |
577717 |
argv[0]);
|
|
Packit |
577717 |
return 0;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
printf( "\n" );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
do_flops( 1 );
|
|
Packit |
577717 |
do_flush( );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_start( EventSet );
|
|
Packit |
577717 |
if (retval != PAPI_OK ) {
|
|
Packit |
577717 |
fprintf(stderr,"Error! PAPI_start\n");
|
|
Packit |
577717 |
exit( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
do_flops( NUM_FLOPS );
|
|
Packit |
577717 |
do_misses( 1, L1_MISS_BUFFER_SIZE_INTS );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_stop( EventSet, values );
|
|
Packit |
577717 |
if (retval != PAPI_OK ) {
|
|
Packit |
577717 |
fprintf(stderr,"Error! PAPI_stop\n");
|
|
Packit |
577717 |
exit( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for ( j = 0; j < num_events; j++ ) {
|
|
Packit |
577717 |
i = success[j];
|
|
Packit |
577717 |
if (! (u_format || hex_format) ) {
|
|
Packit |
577717 |
retval = PAPI_event_name_to_code( argv[i], &event );
|
|
Packit |
577717 |
if (retval == PAPI_OK) {
|
|
Packit |
577717 |
retval = PAPI_get_event_info(event, &info;;
|
|
Packit |
577717 |
if (retval == PAPI_OK) data_type = info.data_type;
|
|
Packit |
577717 |
else data_type = PAPI_DATATYPE_INT64;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
switch (data_type) {
|
|
Packit |
577717 |
case PAPI_DATATYPE_UINT64:
|
|
Packit |
577717 |
printf( "%s : \t%llu(u)", argv[i], (unsigned long long)values[j] );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case PAPI_DATATYPE_FP64:
|
|
Packit |
577717 |
printf( "%s : \t%0.3f", argv[i], *((double *)(&values[j])) );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case PAPI_DATATYPE_BIT64:
|
|
Packit |
577717 |
printf( "%s : \t%#llX", argv[i], values[j] );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
case PAPI_DATATYPE_INT64:
|
|
Packit |
577717 |
default:
|
|
Packit |
577717 |
printf( "%s : \t%lld", argv[i], values[j] );
|
|
Packit |
577717 |
break;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if (retval == PAPI_OK) printf( " %s", info.units );
|
|
Packit |
577717 |
printf( "\n" );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if (u_format) printf( "%s : \t%llu(u)\n", argv[i], (unsigned long long)values[j] );
|
|
Packit |
577717 |
if (hex_format) printf( "%s : \t%#llX\n", argv[i], values[j] );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
printf( "\n----------------------------------\n" );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return 0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
}
|