Blame src/ctests/all_native_events.c

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
}