|
Packit |
577717 |
/*
|
|
Packit |
577717 |
* File: all_native_events.c
|
|
Packit |
577717 |
* Author: Haihang You <you@cs.utk.edu>
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* This test tries to add all native events from all components */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* This file hardware info and performs the following test:
|
|
Packit |
577717 |
- Start and stop all native events.
|
|
Packit |
577717 |
This is a good preliminary way to validate native event tables.
|
|
Packit |
577717 |
In its current form this test also stresses the number of
|
|
Packit |
577717 |
events sets the library can handle outstanding.
|
|
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 "papi_test.h"
|
|
Packit |
577717 |
|
|
Packit |
577717 |
static int
|
|
Packit |
577717 |
check_event( int event_code, char *name, int quiet )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
int retval;
|
|
Packit |
577717 |
long long values;
|
|
Packit |
577717 |
int EventSet = PAPI_NULL;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Possibly there was an older issue with the */
|
|
Packit |
577717 |
/* REPLAY_EVENT:BR_MSP on Pentium4 ??? */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Create an 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 |
/* Add the event */
|
|
Packit |
577717 |
retval = PAPI_add_event( EventSet, event_code );
|
|
Packit |
577717 |
if ( retval != PAPI_OK ) {
|
|
Packit |
577717 |
if (!quiet) printf( "Error adding %s %d\n", name, retval );
|
|
Packit |
577717 |
return retval;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Start the event */
|
|
Packit |
577717 |
retval = PAPI_start( EventSet );
|
|
Packit |
577717 |
if ( retval != PAPI_OK ) {
|
|
Packit |
577717 |
PAPI_perror( "PAPI_start" );
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
retval = PAPI_stop( EventSet, &values );
|
|
Packit |
577717 |
if ( retval != PAPI_OK ) {
|
|
Packit |
577717 |
PAPI_perror( "PAPI_stop" );
|
|
Packit |
577717 |
return retval;
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
if (!quiet) printf( "Added and Stopped %s successfully.\n", name );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Cleanup the eventset */
|
|
Packit |
577717 |
retval=PAPI_cleanup_eventset( EventSet );
|
|
Packit |
577717 |
if (retval != PAPI_OK ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_cleanup_eventset", retval);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Destroy the eventset */
|
|
Packit |
577717 |
retval=PAPI_destroy_eventset( &EventSet );
|
|
Packit |
577717 |
if (retval != PAPI_OK ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_destroy_eventset", retval);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return PAPI_OK;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
main( int argc, char **argv )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int i, k, add_count = 0, err_count = 0;
|
|
Packit |
577717 |
int retval;
|
|
Packit |
577717 |
PAPI_event_info_t info, info1;
|
|
Packit |
577717 |
const PAPI_hw_info_t *hwinfo = NULL;
|
|
Packit |
577717 |
const PAPI_component_info_t* cmpinfo;
|
|
Packit |
577717 |
int event_code;
|
|
Packit |
577717 |
int numcmp, cid;
|
|
Packit |
577717 |
int quiet;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Set quiet variable */
|
|
Packit |
577717 |
quiet=tests_quiet( argc, argv );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Init PAPI library */
|
|
Packit |
577717 |
retval = PAPI_library_init( PAPI_VER_CURRENT );
|
|
Packit |
577717 |
if ( retval != PAPI_VER_CURRENT ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
printf("Test case ALL_NATIVE_EVENTS: Available "
|
|
Packit |
577717 |
"native events and hardware "
|
|
Packit |
577717 |
"information.\n");
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
hwinfo=PAPI_get_hardware_info();
|
|
Packit |
577717 |
if ( hwinfo == NULL ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_get_hardware_info", 2 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
numcmp = PAPI_num_components( );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Loop through all components */
|
|
Packit |
577717 |
for( cid = 0; cid < numcmp; cid++ ) {
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
cmpinfo = PAPI_get_component_info( cid );
|
|
Packit |
577717 |
if (cmpinfo == NULL) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_get_component_info", 2 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Skip disabled components */
|
|
Packit |
577717 |
if (cmpinfo->disabled) {
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
printf( "Name: %-23s %s\n",
|
|
Packit |
577717 |
cmpinfo->name ,cmpinfo->description);
|
|
Packit |
577717 |
printf(" \\-> Disabled: %s\n",
|
|
Packit |
577717 |
cmpinfo->disabled_reason);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
continue;
|
|
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, cid );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
do {
|
|
Packit |
577717 |
retval = PAPI_get_event_info( i, &info );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* We used to skip OFFCORE and UNCORE events */
|
|
Packit |
577717 |
/* Why? */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* Enumerate all umasks */
|
|
Packit |
577717 |
k = i;
|
|
Packit |
577717 |
if ( PAPI_enum_cmp_event(&k, PAPI_NTV_ENUM_UMASKS, cid )==PAPI_OK ) {
|
|
Packit |
577717 |
do {
|
|
Packit |
577717 |
retval = PAPI_get_event_info( k, &info1 );
|
|
Packit |
577717 |
event_code = ( int ) info1.event_code;
|
|
Packit |
577717 |
if ( check_event( event_code, info1.symbol, quiet ) == PAPI_OK ) {
|
|
Packit |
577717 |
add_count++;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
else {
|
|
Packit |
577717 |
err_count++;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
} while ( PAPI_enum_cmp_event( &k, PAPI_NTV_ENUM_UMASKS, cid ) == PAPI_OK );
|
|
Packit |
577717 |
} else {
|
|
Packit |
577717 |
/* Event didn't have any umasks */
|
|
Packit |
577717 |
event_code = ( int ) info.event_code;
|
|
Packit |
577717 |
if ( check_event( event_code, info.symbol, quiet ) == PAPI_OK) {
|
|
Packit |
577717 |
add_count++;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
else {
|
|
Packit |
577717 |
err_count++;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
} while ( PAPI_enum_cmp_event( &i, PAPI_ENUM_EVENTS, cid ) == PAPI_OK );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if (!quiet) {
|
|
Packit |
577717 |
printf( "\n\nSuccessfully found and added %d events "
|
|
Packit |
577717 |
"(in %d eventsets).\n",
|
|
Packit |
577717 |
add_count , add_count);
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( err_count ) {
|
|
Packit |
577717 |
if (!quiet) printf( "Failed to add %d events.\n", err_count );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( add_count <= 0 ) {
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "No events added", 1 );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
test_pass( __FILE__ );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return 0;
|
|
Packit |
577717 |
}
|