|
Packit |
577717 |
#include <stdio.h>
|
|
Packit |
577717 |
#include <stdlib.h>
|
|
Packit |
577717 |
#include <unistd.h>
|
|
Packit |
577717 |
#include <string.h>
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#include "papi.h"
|
|
Packit |
577717 |
#include "papi_test.h"
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#define TOLERANCE .2
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Variable to hold reporting status
|
|
Packit |
577717 |
if TRUE, output is suppressed
|
|
Packit |
577717 |
if FALSE output is sent to stdout
|
|
Packit |
577717 |
initialized to FALSE
|
|
Packit |
577717 |
declared here so it can be available globally
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
int TESTS_QUIET = 0;
|
|
Packit |
577717 |
static int TESTS_COLOR = 1;
|
|
Packit |
577717 |
static int TEST_WARN = 0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
void
|
|
Packit |
577717 |
validate_string( const char *name, char *s )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
if ( ( s == NULL ) || ( strlen( s ) == 0 ) ) {
|
|
Packit |
577717 |
char s2[1024] = "";
|
|
Packit |
577717 |
sprintf( s2, "%s was NULL or length 0", name );
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, s2, 0 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
approx_equals( double a, double b )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
if ( ( a >= b * ( 1.0 - TOLERANCE ) ) && ( a <= b * ( 1.0 + TOLERANCE ) ) )
|
|
Packit |
577717 |
return 1;
|
|
Packit |
577717 |
else {
|
|
Packit |
577717 |
printf( "Out of tolerance range %2.2f: %.0f vs %.0f [%.0f,%.0f]\n",
|
|
Packit |
577717 |
TOLERANCE, a, b, b * ( 1.0 - TOLERANCE ),
|
|
Packit |
577717 |
b * ( 1.0 + TOLERANCE ) );
|
|
Packit |
577717 |
return 0;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
long long **
|
|
Packit |
577717 |
allocate_test_space( int num_tests, int num_events )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
long long **values;
|
|
Packit |
577717 |
int i;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
values =
|
|
Packit |
577717 |
( long long ** ) malloc( ( size_t ) num_tests *
|
|
Packit |
577717 |
sizeof ( long long * ) );
|
|
Packit |
577717 |
if ( values == NULL )
|
|
Packit |
577717 |
exit( 1 );
|
|
Packit |
577717 |
memset( values, 0x0, ( size_t ) num_tests * sizeof ( long long * ) );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for ( i = 0; i < num_tests; i++ ) {
|
|
Packit |
577717 |
values[i] =
|
|
Packit |
577717 |
( long long * ) malloc( ( size_t ) num_events *
|
|
Packit |
577717 |
sizeof ( long long ) );
|
|
Packit |
577717 |
if ( values[i] == NULL )
|
|
Packit |
577717 |
exit( 1 );
|
|
Packit |
577717 |
memset( values[i], 0x00, ( size_t ) num_events * sizeof ( long long ) );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
return ( values );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
void
|
|
Packit |
577717 |
free_test_space( long long **values, int num_tests )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
int i;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for ( i = 0; i < num_tests; i++ )
|
|
Packit |
577717 |
free( values[i] );
|
|
Packit |
577717 |
free( values );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int is_event_derived(unsigned int event) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
PAPI_event_info_t info;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (event & PAPI_PRESET_MASK) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
PAPI_get_event_info(event,&info;;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (strcmp(info.derived,"NOT_DERIVED")) {
|
|
Packit |
577717 |
// printf("%#x is derived\n",event);
|
|
Packit |
577717 |
return 1;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
return 0;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int find_nonderived_event( void )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
/* query and set up the right event to monitor */
|
|
Packit |
577717 |
PAPI_event_info_t info;
|
|
Packit |
577717 |
int potential_evt_to_add[3] = { PAPI_FP_OPS, PAPI_FP_INS, PAPI_TOT_INS };
|
|
Packit |
577717 |
int i;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for ( i = 0; i < 3; i++ ) {
|
|
Packit |
577717 |
if ( PAPI_query_event( potential_evt_to_add[i] ) == PAPI_OK ) {
|
|
Packit |
577717 |
if ( PAPI_get_event_info( potential_evt_to_add[i], &info ) ==
|
|
Packit |
577717 |
PAPI_OK ) {
|
|
Packit |
577717 |
if ( ( info.count > 0 ) &&
|
|
Packit |
577717 |
!strcmp( info.derived, "NOT_DERIVED" ) )
|
|
Packit |
577717 |
return ( potential_evt_to_add[i] );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
return ( 0 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Add events to an EventSet, as specified by a mask.
|
|
Packit |
577717 |
|
|
Packit |
577717 |
Returns: number = number of events added
|
|
Packit |
577717 |
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
//struct test_events_t {
|
|
Packit |
577717 |
// unsigned int mask;
|
|
Packit |
577717 |
// unsigned int event;
|
|
Packit |
577717 |
//};
|
|
Packit |
577717 |
|
|
Packit |
577717 |
struct test_events_t test_events[MAX_TEST_EVENTS] = {
|
|
Packit |
577717 |
{ MASK_TOT_CYC, PAPI_TOT_CYC },
|
|
Packit |
577717 |
{ MASK_TOT_INS, PAPI_TOT_INS },
|
|
Packit |
577717 |
{ MASK_FP_INS, PAPI_FP_INS },
|
|
Packit |
577717 |
{ MASK_L1_TCM, PAPI_L1_TCM },
|
|
Packit |
577717 |
{ MASK_L1_ICM, PAPI_L1_ICM },
|
|
Packit |
577717 |
{ MASK_L1_DCM, PAPI_L1_DCM },
|
|
Packit |
577717 |
{ MASK_L2_TCM, PAPI_L2_TCM },
|
|
Packit |
577717 |
{ MASK_L2_TCA, PAPI_L2_TCA },
|
|
Packit |
577717 |
{ MASK_L2_TCH, PAPI_L2_TCH },
|
|
Packit |
577717 |
{ MASK_BR_CN, PAPI_BR_CN },
|
|
Packit |
577717 |
{ MASK_BR_MSP, PAPI_BR_MSP },
|
|
Packit |
577717 |
{ MASK_BR_PRC, PAPI_BR_PRC },
|
|
Packit |
577717 |
{ MASK_TOT_IIS, PAPI_TOT_IIS},
|
|
Packit |
577717 |
{ MASK_L1_DCR, PAPI_L1_DCR},
|
|
Packit |
577717 |
{ MASK_L1_DCW, PAPI_L1_DCW},
|
|
Packit |
577717 |
{ MASK_L1_DCA, PAPI_L1_DCA},
|
|
Packit |
577717 |
{ MASK_FP_OPS, PAPI_FP_OPS},
|
|
Packit |
577717 |
};
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
add_test_events( int *number, int *mask, int allow_derived )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
int retval,i;
|
|
Packit |
577717 |
int EventSet = PAPI_NULL;
|
|
Packit |
577717 |
char name_string[BUFSIZ];
|
|
Packit |
577717 |
|
|
Packit |
577717 |
*number = 0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* create the eventset */
|
|
Packit |
577717 |
retval = PAPI_create_eventset( &EventSet );
|
|
Packit |
577717 |
if ( retval != PAPI_OK ) {
|
|
Packit |
577717 |
test_fail(__FILE__,__LINE__,"Trouble creating eventset",retval);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* check all the masks */
|
|
Packit |
577717 |
for(i=0;i
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( *mask & test_events[i].mask ) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* remove any derived events if told to */
|
|
Packit |
577717 |
if ((is_event_derived(test_events[i].event)) &&
|
|
Packit |
577717 |
(!allow_derived)) {
|
|
Packit |
577717 |
*mask = *mask ^ test_events[i].mask;
|
|
Packit |
577717 |
continue;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_add_event( EventSet,
|
|
Packit |
577717 |
test_events[i].event );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( retval == PAPI_OK ) {
|
|
Packit |
577717 |
( *number )++;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
else {
|
|
Packit |
577717 |
if ( !TESTS_QUIET ) {
|
|
Packit |
577717 |
PAPI_event_code_to_name(test_events[i].event,
|
|
Packit |
577717 |
name_string);
|
|
Packit |
577717 |
fprintf( stdout, "%#x %s is not available.\n",
|
|
Packit |
577717 |
test_events[i].event,name_string);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
*mask = *mask ^ test_events[i].mask;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return EventSet;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
remove_test_events( int *EventSet, int mask )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
int retval = PAPI_OK;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_L1_DCA ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_L1_DCA );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_L1_DCW ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_L1_DCW );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_L1_DCR ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_L1_DCR );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_L2_TCH ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_L2_TCH );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_L2_TCA ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_L2_TCA );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_L2_TCM ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_L2_TCM );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_L1_DCM ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_L1_DCM );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_L1_ICM ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_L1_ICM );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_L1_TCM ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_L1_TCM );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_FP_OPS ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_FP_OPS );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_FP_INS ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_FP_INS );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_TOT_INS ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_TOT_INS );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_TOT_IIS ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_TOT_IIS );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( mask & MASK_TOT_CYC ) {
|
|
Packit |
577717 |
retval = PAPI_remove_event( *EventSet, PAPI_TOT_CYC );
|
|
Packit |
577717 |
if ( retval < PAPI_OK )
|
|
Packit |
577717 |
return ( retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return ( PAPI_destroy_eventset( EventSet ) );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
char *
|
|
Packit |
577717 |
stringify_all_domains( int domains )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
static char buf[PAPI_HUGE_STR_LEN];
|
|
Packit |
577717 |
int i, did = 0;
|
|
Packit |
577717 |
buf[0] = '\0';
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for ( i = PAPI_DOM_MIN; i <= PAPI_DOM_MAX; i = i << 1 )
|
|
Packit |
577717 |
if ( domains & i ) {
|
|
Packit |
577717 |
if ( did )
|
|
Packit |
577717 |
strcpy( buf + strlen( buf ), "|" );
|
|
Packit |
577717 |
strcpy( buf + strlen( buf ), stringify_domain( domains & i ) );
|
|
Packit |
577717 |
did++;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if ( did == 0 )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "Unrecognized domains!", 0 );
|
|
Packit |
577717 |
return ( buf );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
char *
|
|
Packit |
577717 |
stringify_domain( int domain )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
switch ( domain ) {
|
|
Packit |
577717 |
case PAPI_DOM_SUPERVISOR:
|
|
Packit |
577717 |
return ( "PAPI_DOM_SUPERVISOR" );
|
|
Packit |
577717 |
case PAPI_DOM_USER:
|
|
Packit |
577717 |
return ( "PAPI_DOM_USER" );
|
|
Packit |
577717 |
case PAPI_DOM_KERNEL:
|
|
Packit |
577717 |
return ( "PAPI_DOM_KERNEL" );
|
|
Packit |
577717 |
case PAPI_DOM_OTHER:
|
|
Packit |
577717 |
return ( "PAPI_DOM_OTHER" );
|
|
Packit |
577717 |
case PAPI_DOM_ALL:
|
|
Packit |
577717 |
return ( "PAPI_DOM_ALL" );
|
|
Packit |
577717 |
default:
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "Unrecognized domains!", 0 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
return ( NULL );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
char *
|
|
Packit |
577717 |
stringify_all_granularities( int granularities )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
static char buf[PAPI_HUGE_STR_LEN];
|
|
Packit |
577717 |
int i, did = 0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
buf[0] = '\0';
|
|
Packit |
577717 |
for ( i = PAPI_GRN_MIN; i <= PAPI_GRN_MAX; i = i << 1 )
|
|
Packit |
577717 |
if ( granularities & i ) {
|
|
Packit |
577717 |
if ( did )
|
|
Packit |
577717 |
strcpy( buf + strlen( buf ), "|" );
|
|
Packit |
577717 |
strcpy( buf + strlen( buf ),
|
|
Packit |
577717 |
stringify_granularity( granularities & i ) );
|
|
Packit |
577717 |
did++;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if ( did == 0 )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "Unrecognized granularity!", 0 );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return ( buf );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
char *
|
|
Packit |
577717 |
stringify_granularity( int granularity )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
switch ( granularity ) {
|
|
Packit |
577717 |
case PAPI_GRN_THR:
|
|
Packit |
577717 |
return ( "PAPI_GRN_THR" );
|
|
Packit |
577717 |
case PAPI_GRN_PROC:
|
|
Packit |
577717 |
return ( "PAPI_GRN_PROC" );
|
|
Packit |
577717 |
case PAPI_GRN_PROCG:
|
|
Packit |
577717 |
return ( "PAPI_GRN_PROCG" );
|
|
Packit |
577717 |
case PAPI_GRN_SYS_CPU:
|
|
Packit |
577717 |
return ( "PAPI_GRN_SYS_CPU" );
|
|
Packit |
577717 |
case PAPI_GRN_SYS:
|
|
Packit |
577717 |
return ( "PAPI_GRN_SYS" );
|
|
Packit |
577717 |
default:
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "Unrecognized granularity!", 0 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
return ( NULL );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Checks for TESTS_QUIET or -q command line variable */
|
|
Packit |
577717 |
/* Sets the TESTS_QUIET global variable */
|
|
Packit |
577717 |
/* Also returns the value. */
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
tests_quiet( int argc, char **argv )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
char *value;
|
|
Packit |
577717 |
int retval;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( argc > 1 )
|
|
Packit |
577717 |
&& ( ( strcasecmp( argv[1], "TESTS_QUIET" ) == 0 )
|
|
Packit |
577717 |
|| ( strcasecmp( argv[1], "-q" ) == 0 ) ) ) {
|
|
Packit |
577717 |
TESTS_QUIET = 1;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Always report PAPI errors when testing */
|
|
Packit |
577717 |
/* Even in quiet mode */
|
|
Packit |
577717 |
retval = PAPI_set_debug( PAPI_VERB_ECONT );
|
|
Packit |
577717 |
if ( retval != PAPI_OK ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_set_debug", retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
value=getenv("TESTS_COLOR");
|
|
Packit |
577717 |
if (value!=NULL) {
|
|
Packit |
577717 |
if (value[0]=='y') {
|
|
Packit |
577717 |
TESTS_COLOR=1;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
else {
|
|
Packit |
577717 |
TESTS_COLOR=0;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Disable colors if sending to a file */
|
|
Packit |
577717 |
if (!isatty(fileno(stdout))) {
|
|
Packit |
577717 |
TESTS_COLOR=0;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return TESTS_QUIET;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#define RED "\033[1;31m"
|
|
Packit |
577717 |
#define YELLOW "\033[1;33m"
|
|
Packit |
577717 |
#define GREEN "\033[1;32m"
|
|
Packit |
577717 |
#define NORMAL "\033[0m"
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
static void print_spaces(int count) {
|
|
Packit |
577717 |
int i;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
for(i=0;i
|
|
Packit |
577717 |
fprintf(stdout, " ");
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Ugh, all these "fprintf(stdout)" are due to the */
|
|
Packit |
577717 |
/* TESTS_QUIET #define printf hack */
|
|
Packit |
577717 |
/* FIXME! Revert to printf once we are done converting */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
void
|
|
Packit |
577717 |
test_pass( const char *filename )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
(void)filename;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// int line_pad;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// line_pad=60-strlen(filename);
|
|
Packit |
577717 |
// if (line_pad<0) line_pad=0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// fprintf(stdout,"%s",filename);
|
|
Packit |
577717 |
// print_spaces(line_pad);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( TEST_WARN ) {
|
|
Packit |
577717 |
print_spaces(59);
|
|
Packit |
577717 |
if (TESTS_COLOR) fprintf( stdout, "%s", YELLOW);
|
|
Packit |
577717 |
fprintf( stdout, "PASSED with WARNING");
|
|
Packit |
577717 |
if (TESTS_COLOR) fprintf( stdout, "%s", NORMAL);
|
|
Packit |
577717 |
fprintf( stdout, "\n");
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
else {
|
|
Packit |
577717 |
if (TESTS_COLOR) fprintf( stdout, "%s",GREEN);
|
|
Packit |
577717 |
fprintf( stdout, "PASSED");
|
|
Packit |
577717 |
if (TESTS_COLOR) fprintf( stdout, "%s",NORMAL);
|
|
Packit |
577717 |
fprintf( stdout, "\n");
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( PAPI_is_initialized( ) ) {
|
|
Packit |
577717 |
PAPI_shutdown( );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
exit( 0 );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Use a positive value of retval to simply print an error message */
|
|
Packit |
577717 |
void
|
|
Packit |
577717 |
test_fail( const char *file, int line, const char *call, int retval )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
// int line_pad;
|
|
Packit |
577717 |
char buf[128];
|
|
Packit |
577717 |
|
|
Packit |
577717 |
(void)file;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// line_pad=(60-strlen(file));
|
|
Packit |
577717 |
// if (line_pad<0) line_pad=0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// fprintf(stdout,"%s",file);
|
|
Packit |
577717 |
// print_spaces(line_pad);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
memset( buf, '\0', sizeof ( buf ) );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (TESTS_COLOR) fprintf(stdout,"%s",RED);
|
|
Packit |
577717 |
fprintf( stdout, "FAILED!!!");
|
|
Packit |
577717 |
if (TESTS_COLOR) fprintf(stdout,"%s",NORMAL);
|
|
Packit |
577717 |
fprintf( stdout, "\nLine # %d ", line );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( retval == PAPI_ESYS ) {
|
|
Packit |
577717 |
sprintf( buf, "System error in %s", call );
|
|
Packit |
577717 |
perror( buf );
|
|
Packit |
577717 |
} else if ( retval > 0 ) {
|
|
Packit |
577717 |
fprintf( stdout, "Error: %s\n", call );
|
|
Packit |
577717 |
} else if ( retval == 0 ) {
|
|
Packit |
577717 |
#if defined(sgi)
|
|
Packit |
577717 |
fprintf( stdout, "SGI requires root permissions for this test\n" );
|
|
Packit |
577717 |
#else
|
|
Packit |
577717 |
fprintf( stdout, "Error: %s\n", call );
|
|
Packit |
577717 |
#endif
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
fprintf( stdout, "Error in %s: %s\n", call, PAPI_strerror( retval ) );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// fprintf( stdout, "\n" );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* NOTE: Because test_fail is called from thread functions,
|
|
Packit |
577717 |
calling PAPI_shutdown here could prevent some threads
|
|
Packit |
577717 |
from being able to free memory they have allocated.
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
if ( PAPI_is_initialized( ) ) {
|
|
Packit |
577717 |
PAPI_shutdown( );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* This is stupid. Threads are the rare case */
|
|
Packit |
577717 |
/* and in any case an exit() should clear everything out */
|
|
Packit |
577717 |
/* adding back the exit() call */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
exit(1);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Use a positive value of retval to simply print an error message */
|
|
Packit |
577717 |
void
|
|
Packit |
577717 |
test_warn( const char *file, int line, const char *call, int retval )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
|
|
Packit |
577717 |
(void)file;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// int line_pad;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// line_pad=60-strlen(file);
|
|
Packit |
577717 |
// if (line_pad<0) line_pad=0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
char buf[128];
|
|
Packit |
577717 |
memset( buf, '\0', sizeof ( buf ) );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// fprintf(stdout,"%s",file);
|
|
Packit |
577717 |
// print_spaces(line_pad);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (TEST_WARN==0) fprintf(stdout,"\n");
|
|
Packit |
577717 |
if (TESTS_COLOR) fprintf( stdout, "%s", YELLOW);
|
|
Packit |
577717 |
fprintf( stdout, "WARNING ");
|
|
Packit |
577717 |
if (TESTS_COLOR) fprintf( stdout, "%s", NORMAL);
|
|
Packit |
577717 |
fprintf( stdout, "Line # %d ", line );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( retval == PAPI_ESYS ) {
|
|
Packit |
577717 |
sprintf( buf, "System warning in %s", call );
|
|
Packit |
577717 |
perror( buf );
|
|
Packit |
577717 |
} else if ( retval > 0 ) {
|
|
Packit |
577717 |
fprintf( stdout, "Warning: %s\n", call );
|
|
Packit |
577717 |
} else if ( retval == 0 ) {
|
|
Packit |
577717 |
fprintf( stdout, "Warning: %s\n", call );
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
fprintf( stdout, "Warning in %s: %s\n", call, PAPI_strerror( retval ));
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
TEST_WARN++;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
void
|
|
Packit |
577717 |
test_skip( const char *file, int line, const char *call, int retval )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
// int line_pad;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
(void)file;
|
|
Packit |
577717 |
(void)line;
|
|
Packit |
577717 |
(void)call;
|
|
Packit |
577717 |
(void)retval;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// line_pad=(60-strlen(file));
|
|
Packit |
577717 |
|
|
Packit |
577717 |
// fprintf(stdout,"%s",file);
|
|
Packit |
577717 |
// print_spaces(line_pad);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
fprintf( stdout, "SKIPPED\n");
|
|
Packit |
577717 |
|
|
Packit |
577717 |
exit( 0 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
void
|
|
Packit |
577717 |
test_print_event_header( const char *call, int evset )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
int *ev_ids;
|
|
Packit |
577717 |
int i, nev;
|
|
Packit |
577717 |
int retval;
|
|
Packit |
577717 |
char evname[PAPI_MAX_STR_LEN];
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( *call )
|
|
Packit |
577717 |
fprintf( stdout, "%s", call );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ((nev = PAPI_get_cmp_opt(PAPI_MAX_MPX_CTRS,NULL,0)) <= 0) {
|
|
Packit |
577717 |
fprintf( stdout, "Can not list event names.\n" );
|
|
Packit |
577717 |
return;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ((ev_ids = calloc(nev,sizeof(int))) == NULL) {
|
|
Packit |
577717 |
fprintf( stdout, "Can not list event names.\n" );
|
|
Packit |
577717 |
return;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_list_events( evset, ev_ids, &nev );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( retval == PAPI_OK ) {
|
|
Packit |
577717 |
for ( i = 0; i < nev; i++ ) {
|
|
Packit |
577717 |
PAPI_event_code_to_name( ev_ids[i], evname );
|
|
Packit |
577717 |
printf( ONEHDR, evname );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
fprintf( stdout, "Can not list event names." );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
fprintf( stdout, "\n" );
|
|
Packit |
577717 |
free(ev_ids);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
add_two_events( int *num_events, int *papi_event, int *mask ) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int retval;
|
|
Packit |
577717 |
int EventSet = PAPI_NULL;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
*num_events=2;
|
|
Packit |
577717 |
*papi_event=PAPI_TOT_INS;
|
|
Packit |
577717 |
(void)mask;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* create the eventset */
|
|
Packit |
577717 |
retval = PAPI_create_eventset( &EventSet );
|
|
Packit |
577717 |
if ( retval != PAPI_OK ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_add_named_event( EventSet, "PAPI_TOT_CYC");
|
|
Packit |
577717 |
if ( retval != PAPI_OK ) {
|
|
Packit |
577717 |
if (!TESTS_QUIET) printf("Couldn't add PAPI_TOT_CYC\n");
|
|
Packit |
577717 |
test_skip(__FILE__,__LINE__,"Couldn't add PAPI_TOT_CYC",0);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_add_named_event( EventSet, "PAPI_TOT_INS");
|
|
Packit |
577717 |
if ( retval != PAPI_OK ) {
|
|
Packit |
577717 |
if (!TESTS_QUIET) printf("Couldn't add PAPI_TOT_CYC\n");
|
|
Packit |
577717 |
test_skip(__FILE__,__LINE__,"Couldn't add PAPI_TOT_CYC",0);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return EventSet;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
add_two_nonderived_events( int *num_events, int *papi_event, int *mask ) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* query and set up the right event to monitor */
|
|
Packit |
577717 |
int EventSet = PAPI_NULL;
|
|
Packit |
577717 |
int retval;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
*num_events=0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#define POTENTIAL_EVENTS 3
|
|
Packit |
577717 |
|
|
Packit |
577717 |
unsigned int potential_evt_to_add[POTENTIAL_EVENTS][2] =
|
|
Packit |
577717 |
{ {( unsigned int ) PAPI_FP_INS, MASK_FP_INS},
|
|
Packit |
577717 |
{( unsigned int ) PAPI_FP_OPS, MASK_FP_OPS},
|
|
Packit |
577717 |
{( unsigned int ) PAPI_TOT_INS, MASK_TOT_INS}
|
|
Packit |
577717 |
};
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int i;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
*mask = 0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* could leak up to two event sets. */
|
|
Packit |
577717 |
for(i=0;i
|
|
Packit |
577717 |
retval = PAPI_query_event( ( int ) potential_evt_to_add[i][0] );
|
|
Packit |
577717 |
if (retval == PAPI_OK ) {
|
|
Packit |
577717 |
if ( !is_event_derived(potential_evt_to_add[i][0])) {
|
|
Packit |
577717 |
*papi_event = ( int ) potential_evt_to_add[i][0];
|
|
Packit |
577717 |
*mask = ( int ) potential_evt_to_add[i][1] | MASK_TOT_CYC;
|
|
Packit |
577717 |
EventSet = add_test_events( num_events, mask, 0 );
|
|
Packit |
577717 |
if ( *num_events == 2 ) break;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return EventSet;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* add native events to use all counters */
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
enum_add_native_events( int *num_events, int **evtcodes,
|
|
Packit |
577717 |
int need_interrupt, int no_software_events,
|
|
Packit |
577717 |
int cidx)
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
/* query and set up the right event to monitor */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int EventSet = PAPI_NULL;
|
|
Packit |
577717 |
int i = 0, k, event_code, retval;
|
|
Packit |
577717 |
int counters, event_found = 0;
|
|
Packit |
577717 |
PAPI_event_info_t info;
|
|
Packit |
577717 |
const PAPI_component_info_t *s = NULL;
|
|
Packit |
577717 |
const PAPI_hw_info_t *hw_info = NULL;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
*num_events=0;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
s = PAPI_get_component_info( cidx );
|
|
Packit |
577717 |
if ( s == NULL ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__,
|
|
Packit |
577717 |
"PAPI_get_component_info", PAPI_ECMP );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
hw_info = PAPI_get_hardware_info( );
|
|
Packit |
577717 |
if ( hw_info == NULL ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_get_hardware_info", 2 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
counters = PAPI_num_hwctrs( );
|
|
Packit |
577717 |
if (counters<1) {
|
|
Packit |
577717 |
if (!TESTS_QUIET) printf("No counters available\n");
|
|
Packit |
577717 |
return EventSet;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!TESTS_QUIET) {
|
|
Packit |
577717 |
printf("Trying to fill %d hardware counters...\n", counters);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (need_interrupt) {
|
|
Packit |
577717 |
if ( (!strcmp(hw_info->model_string,"POWER6")) ||
|
|
Packit |
577717 |
(!strcmp(hw_info->model_string,"POWER5")) ) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
test_warn(__FILE__, __LINE__,
|
|
Packit |
577717 |
"Limiting num_counters because of "
|
|
Packit |
577717 |
"LIMITED_PMC on Power5 and Power6",1);
|
|
Packit |
577717 |
counters=4;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
( *evtcodes ) = ( int * ) calloc( counters, sizeof ( int ) );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_create_eventset( &EventSet );
|
|
Packit |
577717 |
if ( retval != PAPI_OK ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* For platform independence, always ASK FOR the first event */
|
|
Packit |
577717 |
/* Don't just assume it'll be the first numeric value */
|
|
Packit |
577717 |
i = 0 | PAPI_NATIVE_MASK;
|
|
Packit |
577717 |
retval = PAPI_enum_cmp_event( &i, PAPI_ENUM_FIRST, cidx );
|
|
Packit |
577717 |
if ( retval != PAPI_OK ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_enum_cmp_event", retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
do {
|
|
Packit |
577717 |
retval = PAPI_get_event_info( i, &info );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* HACK! FIXME */
|
|
Packit |
577717 |
if (no_software_events && ( strstr(info.symbol,"PERF_COUNT_SW") || strstr(info.long_descr, "PERF_COUNT_SW") ) ) {
|
|
Packit |
577717 |
if (!TESTS_QUIET) {
|
|
Packit |
577717 |
printf("Blocking event %s as a SW event\n", info.symbol);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
continue;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( s->cntr_umasks ) {
|
|
Packit |
577717 |
k = i;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( PAPI_enum_cmp_event( &k, PAPI_NTV_ENUM_UMASKS, cidx ) == PAPI_OK ) {
|
|
Packit |
577717 |
do {
|
|
Packit |
577717 |
retval = PAPI_get_event_info( k, &info );
|
|
Packit |
577717 |
event_code = ( int ) info.event_code;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
retval = PAPI_add_event( EventSet, event_code );
|
|
Packit |
577717 |
if ( retval == PAPI_OK ) {
|
|
Packit |
577717 |
( *evtcodes )[event_found] = event_code;
|
|
Packit |
577717 |
if ( !TESTS_QUIET ) {
|
|
Packit |
577717 |
printf( "event_code[%d] = %#x (%s)\n",
|
|
Packit |
577717 |
event_found, event_code, info.symbol );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
event_found++;
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
if ( !TESTS_QUIET ) {
|
|
Packit |
577717 |
printf( "%#x (%s) can't be added to the EventSet.\n",
|
|
Packit |
577717 |
event_code, info.symbol );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
} while ( PAPI_enum_cmp_event( &k, PAPI_NTV_ENUM_UMASKS, cidx ) == PAPI_OK
|
|
Packit |
577717 |
&& event_found < counters );
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
event_code = ( int ) info.event_code;
|
|
Packit |
577717 |
retval = PAPI_add_event( EventSet, event_code );
|
|
Packit |
577717 |
if ( retval == PAPI_OK ) {
|
|
Packit |
577717 |
( *evtcodes )[event_found] = event_code;
|
|
Packit |
577717 |
if ( !TESTS_QUIET ) {
|
|
Packit |
577717 |
printf( "event_code[%d] = %#x (%s)\n",
|
|
Packit |
577717 |
event_found, event_code, info.symbol );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
event_found++;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if ( !TESTS_QUIET && retval == PAPI_OK ) {
|
|
Packit |
577717 |
/* */
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
event_code = ( int ) info.event_code;
|
|
Packit |
577717 |
retval = PAPI_add_event( EventSet, event_code );
|
|
Packit |
577717 |
if ( retval == PAPI_OK ) {
|
|
Packit |
577717 |
( *evtcodes )[event_found] = event_code;
|
|
Packit |
577717 |
event_found++;
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
if ( !TESTS_QUIET )
|
|
Packit |
577717 |
fprintf( stdout, "%#x is not available.\n", event_code );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
while ( PAPI_enum_cmp_event( &i, PAPI_ENUM_EVENTS, cidx ) == PAPI_OK &&
|
|
Packit |
577717 |
event_found < counters );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
*num_events = ( int ) event_found;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!TESTS_QUIET) printf("Tried to fill %d counters with events, "
|
|
Packit |
577717 |
"found %d\n",counters,event_found);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return EventSet;
|
|
Packit |
577717 |
}
|