Blame src/ctests/case2.c

Packit Service a1973e
/* From Dave McNamara at PSRV. Thanks! */
Packit Service a1973e
Packit Service a1973e
/* If an event is countable but you've exhausted the counter resources
Packit Service a1973e
and you try to add an event, it seems subsequent PAPI_start and/or
Packit Service a1973e
PAPI_stop will causes a Seg. Violation.
Packit Service a1973e
Packit Service a1973e
   I got around this by calling PAPI to get the # of countable events,
Packit Service a1973e
then making sure that I didn't try to add more than these number of
Packit Service a1973e
events. I still have a problem if someone adds Level 2 cache misses
Packit Service a1973e
and then adds FLOPS 'cause I didn't count FLOPS as actually requiring
Packit Service a1973e
2 counters. */
Packit Service a1973e
Packit Service a1973e
#include <stdio.h>
Packit Service a1973e
#include <stdlib.h>
Packit Service a1973e
Packit Service a1973e
#include "papi.h"
Packit Service a1973e
#include "papi_test.h"
Packit Service a1973e
Packit Service a1973e
int
Packit Service a1973e
main( int argc, char **argv )
Packit Service a1973e
{
Packit Service a1973e
	double c, a = 0.999, b = 1.001;
Packit Service a1973e
	int n = 1000;
Packit Service a1973e
	int EventSet = PAPI_NULL;
Packit Service a1973e
	int retval;
Packit Service a1973e
	int j = 0, i;
Packit Service a1973e
	long long g1[3];
Packit Service a1973e
Packit Service a1973e
	tests_quiet( argc, argv );	/* Set TESTS_QUIET variable */
Packit Service a1973e
Packit Service a1973e
	if ( ( retval =
Packit Service a1973e
		   PAPI_library_init( PAPI_VER_CURRENT ) ) != PAPI_VER_CURRENT )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
Packit Service a1973e
Packit Service a1973e
	if ( ( retval = PAPI_create_eventset( &EventSet ) ) != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
Packit Service a1973e
Packit Service a1973e
	if ( PAPI_query_event( PAPI_BR_CN ) == PAPI_OK )
Packit Service a1973e
		j++;
Packit Service a1973e
Packit Service a1973e
	if ( j == 1 &&
Packit Service a1973e
		 ( retval = PAPI_add_event( EventSet, PAPI_BR_CN ) ) != PAPI_OK ) {
Packit Service a1973e
		if ( retval != PAPI_ECNFLCT )
Packit Service a1973e
			test_fail( __FILE__, __LINE__, "PAPI_add_event", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	i = j;
Packit Service a1973e
	if ( PAPI_query_event( PAPI_TOT_CYC ) == PAPI_OK )
Packit Service a1973e
		j++;
Packit Service a1973e
Packit Service a1973e
	if ( j == ( i + 1 ) &&
Packit Service a1973e
		 ( retval = PAPI_add_event( EventSet, PAPI_TOT_CYC ) ) != PAPI_OK ) {
Packit Service a1973e
		if ( retval != PAPI_ECNFLCT )
Packit Service a1973e
			test_fail( __FILE__, __LINE__, "PAPI_add_event", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	i = j;
Packit Service a1973e
	if ( PAPI_query_event( PAPI_TOT_INS ) == PAPI_OK )
Packit Service a1973e
		j++;
Packit Service a1973e
Packit Service a1973e
	if ( j == ( i + 1 ) &&
Packit Service a1973e
		 ( retval = PAPI_add_event( EventSet, PAPI_TOT_INS ) ) != PAPI_OK ) {
Packit Service a1973e
		if ( retval != PAPI_ECNFLCT )
Packit Service a1973e
			test_fail( __FILE__, __LINE__, "PAPI_add_event", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	if ( j ) {
Packit Service a1973e
		if ( ( retval = PAPI_start( EventSet ) ) != PAPI_OK )
Packit Service a1973e
			test_fail( __FILE__, __LINE__, "PAPI_start", retval );
Packit Service a1973e
Packit Service a1973e
		for ( i = 0; i < n; i++ ) {
Packit Service a1973e
			c = a * b;
Packit Service a1973e
		}
Packit Service a1973e
		if (!TESTS_QUIET) fprintf(stdout,"c=%lf\n",c);
Packit Service a1973e
		if ( ( retval = PAPI_stop( EventSet, g1 ) ) != PAPI_OK )
Packit Service a1973e
			test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit Service a1973e
	}
Packit Service a1973e
Packit Service a1973e
	test_pass( __FILE__ );
Packit Service a1973e
Packit Service a1973e
	return 0;
Packit Service a1973e
}