Blame src/ctests/second.c

Packit 577717
/* This file performs the following test: counter domain testing
Packit 577717
Packit 577717
   - It attempts to use the following two counters. It may use less depending on
Packit 577717
     hardware counter resource limitations.
Packit 577717
     + PAPI_TOT_INS
Packit 577717
     + PAPI_TOT_CYC
Packit 577717
   - Start system domain counters
Packit 577717
   - Do flops
Packit 577717
   - Stop and read system domain counters
Packit 577717
   - Start kernel domain counters
Packit 577717
   - Do flops
Packit 577717
   - Stop and read kernel domain counters
Packit 577717
   - Start user domain counters
Packit 577717
   - Do flops
Packit 577717
   - Stop and read user domain counters
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
#include "do_loops.h"
Packit 577717
Packit 577717
#define TAB_DOM	"%s%12lld%15lld%17lld\n"
Packit 577717
Packit 577717
#define CASE2 0
Packit 577717
#define CREATE 1
Packit 577717
#define ADD 2
Packit 577717
#define MIDDLE 3
Packit 577717
#define CHANGE 4
Packit 577717
#define SUPERVISOR 5
Packit 577717
Packit 577717
void
Packit 577717
dump_and_verify( int test_case, long long **values )
Packit 577717
{
Packit 577717
	long long min, max, min2, max2;
Packit 577717
Packit 577717
	if (!TESTS_QUIET) {
Packit 577717
		printf( "-----------------------------------------------------------------\n" );
Packit 577717
		printf( "Using %d iterations of c += a*b\n", NUM_FLOPS );
Packit 577717
		printf( "-------------------------------------------------------------\n" );
Packit 577717
	}
Packit 577717
	if ( test_case == CASE2 ) {
Packit 577717
		if (!TESTS_QUIET) {
Packit 577717
			printf( "Test type   :   Before Create   Before Add       Between Adds\n" );
Packit 577717
			printf( TAB_DOM, "PAPI_TOT_INS: ", ( values[0] )[0], ( values[1] )[0],
Packit 577717
				( values[2] )[0] );
Packit 577717
			printf( TAB_DOM, "PAPI_TOT_CYC: ", ( values[0] )[1], ( values[1] )[1],
Packit 577717
				( values[2] )[1] );
Packit 577717
			printf( "-------------------------------------------------------------\n" );
Packit 577717
			printf( "Verification:\n" );
Packit 577717
			printf( "Both rows equal 'n  N  N' where n << N\n" );
Packit 577717
			return;
Packit 577717
		}
Packit 577717
	} else if ( test_case == CHANGE ) {
Packit 577717
		min = ( long long ) ( ( double ) values[0][0] * ( 1 - TOLERANCE ) );
Packit 577717
		max = ( long long ) ( ( double ) values[0][0] * ( 1 + TOLERANCE ) );
Packit 577717
		if ( values[1][0] > max || values[1][0] < min )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_TOT_INS", 1 );
Packit 577717
Packit 577717
		min = ( long long ) ( ( double ) values[1][1] * ( 1 - TOLERANCE ) );
Packit 577717
		max = ( long long ) ( ( double ) values[1][1] * ( 1 + TOLERANCE ) );
Packit 577717
		if ( ( values[2][1] + values[0][1] ) > max ||
Packit 577717
			 ( values[2][1] + values[0][1] ) < min )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_TOT_CYC", 1 );
Packit 577717
Packit 577717
		if (!TESTS_QUIET) {
Packit 577717
			printf( "Test type   :   PAPI_DOM_ALL  PAPI_DOM_KERNEL  PAPI_DOM_USER\n" );
Packit 577717
			printf( TAB_DOM, "PAPI_TOT_INS: ", ( values[1] )[0], ( values[2] )[0],
Packit 577717
				( values[0] )[0] );
Packit 577717
			printf( TAB_DOM, "PAPI_TOT_CYC: ", ( values[1] )[1], ( values[2] )[1],
Packit 577717
				( values[0] )[1] );
Packit 577717
			printf( "-------------------------------------------------------------\n" );
Packit 577717
Packit 577717
			printf( "Verification:\n" );
Packit 577717
			printf( "Both rows approximately equal '(N+n)  n  N', where n << N\n" );
Packit 577717
			printf( "Column 1 approximately equals column 2 plus column 3\n" );
Packit 577717
		}
Packit 577717
	} else if ( test_case == SUPERVISOR ) {
Packit 577717
		if (!TESTS_QUIET) {
Packit 577717
			printf( "Test type   :   PAPI_DOM_ALL  All-minus-supervisor  Supervisor-only\n" );
Packit 577717
			printf( TAB_DOM, "PAPI_TOT_INS: ", ( values[0] )[0], ( values[1] )[0],
Packit 577717
				( values[2] )[0] );
Packit 577717
			printf( TAB_DOM, "PAPI_TOT_CYC: ", ( values[0] )[1], ( values[1] )[1],
Packit 577717
				( values[2] )[1] );
Packit 577717
			printf( "-------------------------------------------------------------\n" );
Packit 577717
			printf( "Verification:\n" );
Packit 577717
			printf( "Both rows approximately equal '(N+n)  n  N', where n << N\n" );
Packit 577717
			printf( "Column 1 approximately equals column 2 plus column 3\n" );
Packit 577717
		}
Packit 577717
	} else {
Packit 577717
		min = ( long long ) ( ( double ) values[2][0] * ( 1 - TOLERANCE ) );
Packit 577717
		max = ( long long ) ( ( double ) values[2][0] * ( 1 + TOLERANCE ) );
Packit 577717
Packit 577717
		min2 = ( long long ) ( ( double ) values[0][1] * ( 1 - TOLERANCE ) );
Packit 577717
		max2 =
Packit 577717
			( long long ) ( ( double ) ( double ) values[0][1] *
Packit 577717
							( 1 + TOLERANCE ) );
Packit 577717
Packit 577717
		if (!TESTS_QUIET) {
Packit 577717
			printf( "Test type   :   PAPI_DOM_ALL  PAPI_DOM_KERNEL  PAPI_DOM_USER\n" );
Packit 577717
			printf( TAB_DOM, "PAPI_TOT_INS: ", ( values[0] )[0], ( values[1] )[0],
Packit 577717
				( values[2] )[0] );
Packit 577717
			printf( TAB_DOM, "PAPI_TOT_CYC: ", ( values[0] )[1], ( values[1] )[1],
Packit 577717
				( values[2] )[1] );
Packit 577717
			printf( "-------------------------------------------------------------\n" );
Packit 577717
			printf( "Verification:\n" );
Packit 577717
			printf( "Both rows approximately equal '(N+n)  n  N', where n << N\n" );
Packit 577717
			printf( "Column 1 approximately equals column 2 plus column 3\n" );
Packit 577717
		}
Packit 577717
		if ( values[0][0] > max || values[0][0] < min )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_TOT_INS", 1 );
Packit 577717
Packit 577717
		if ( ( values[1][1] + values[2][1] ) > max2 ||
Packit 577717
			 ( values[1][1] + values[2][1] ) < min2 )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_TOT_CYC", 1 );
Packit 577717
	}
Packit 577717
Packit 577717
	if ( values[0][0] == 0 || values[0][1] == 0 ||
Packit 577717
		 values[1][0] == 0 || values[1][1] == 0 )
Packit 577717
		test_fail( __FILE__, __LINE__,
Packit 577717
				   "Verify non-zero count for all domain types", 1 );
Packit 577717
Packit 577717
	if ( values[2][0] == 0 || values[2][1] == 0 ) {
Packit 577717
		if ( test_case == SUPERVISOR ) {
Packit 577717
			if (!TESTS_QUIET) printf( "WARNING: No events counted in supervisor context.  This is expected in a non-virtualized environment.\n" );
Packit 577717
		} else {
Packit 577717
			test_fail( __FILE__, __LINE__,
Packit 577717
					   "Verify non-zero count for all domain types", 1 );
Packit 577717
		}
Packit 577717
	}
Packit 577717
}
Packit 577717
Packit 577717
/* Do the set_domain on the eventset before adding events */
Packit 577717
Packit 577717
void
Packit 577717
case1( int num )
Packit 577717
{
Packit 577717
	int retval, num_tests = 3;
Packit 577717
	long long **values;
Packit 577717
	int EventSet1 = PAPI_NULL, EventSet2 = PAPI_NULL, EventSet3 = PAPI_NULL;
Packit 577717
	PAPI_option_t options;
Packit 577717
	const PAPI_component_info_t *cmpinfo;
Packit 577717
Packit 577717
	memset( &options, 0x0, sizeof ( options ) );
Packit 577717
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
	/* get info from cpu component */
Packit 577717
	cmpinfo = PAPI_get_component_info( 0 );	
Packit 577717
	if ( cmpinfo == NULL ) {
Packit 577717
	   test_fail( __FILE__, __LINE__,"PAPI_get_component_info", PAPI_ECMP);
Packit 577717
	}
Packit 577717
Packit 577717
	if ( ( retval = PAPI_query_event( PAPI_TOT_INS ) ) != PAPI_OK )
Packit 577717
		test_skip( __FILE__, __LINE__, "PAPI_query_event", retval );
Packit 577717
Packit 577717
	if ( ( retval = PAPI_query_event( PAPI_TOT_CYC ) ) != PAPI_OK )
Packit 577717
		test_skip( __FILE__, __LINE__, "PAPI_query_event", retval );
Packit 577717
Packit 577717
	retval = PAPI_create_eventset( &EventSet1 );
Packit 577717
	if ( retval == PAPI_OK )
Packit 577717
		retval = PAPI_create_eventset( &EventSet2 );
Packit 577717
	if ( retval == PAPI_OK )
Packit 577717
		retval = PAPI_create_eventset( &EventSet3 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
Packit 577717
Packit 577717
	/* In Component PAPI, EventSets must be assigned a component index
Packit 577717
	   before you can fiddle with their internals. 0 is always the cpu component */
Packit 577717
	retval = PAPI_assign_eventset_component( EventSet1, 0 );
Packit 577717
	if ( retval == PAPI_OK )
Packit 577717
		retval = PAPI_assign_eventset_component( EventSet2, 0 );
Packit 577717
	if ( retval == PAPI_OK )
Packit 577717
		retval = PAPI_assign_eventset_component( EventSet3, 0 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_assign_eventset_component",
Packit 577717
				   retval );
Packit 577717
Packit 577717
	if ( num == CREATE ) {
Packit 577717
		if (!TESTS_QUIET) printf( "\nTest case CREATE: Call PAPI_set_opt(PAPI_DOMAIN) on EventSet before add\n" );
Packit 577717
		options.domain.eventset = EventSet1;
Packit 577717
		options.domain.domain = PAPI_DOM_ALL;
Packit 577717
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &options );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval );
Packit 577717
Packit 577717
		options.domain.eventset = EventSet2;
Packit 577717
		options.domain.domain = PAPI_DOM_KERNEL;
Packit 577717
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &options );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval );
Packit 577717
Packit 577717
		options.domain.eventset = EventSet3;
Packit 577717
		options.domain.domain = PAPI_DOM_USER;
Packit 577717
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &options );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval );
Packit 577717
	}
Packit 577717
Packit 577717
	retval = PAPI_add_event( EventSet1, PAPI_TOT_INS );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_add_event(PAPI_TOT_INS)", retval );
Packit 577717
Packit 577717
	retval = PAPI_add_event( EventSet1, PAPI_TOT_CYC );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_add_event(PAPI_TOT_CYC)", retval );
Packit 577717
Packit 577717
	retval = PAPI_add_event( EventSet2, PAPI_TOT_INS );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_add_event(PAPI_TOT_INS)", retval );
Packit 577717
Packit 577717
	retval = PAPI_add_event( EventSet2, PAPI_TOT_CYC );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_add_event(PAPI_TOT_CYC)", retval );
Packit 577717
Packit 577717
	retval = PAPI_add_event( EventSet3, PAPI_TOT_INS );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_add_event(PAPI_TOT_INS)", retval );
Packit 577717
Packit 577717
	if ( num == MIDDLE ) {
Packit 577717
		if (!TESTS_QUIET) printf( "\nTest case MIDDLE: Call PAPI_set_opt(PAPI_DOMAIN) on EventSet between adds\n" );
Packit 577717
		options.domain.eventset = EventSet1;
Packit 577717
		options.domain.domain = PAPI_DOM_ALL;
Packit 577717
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &options );
Packit 577717
		if ( retval != PAPI_OK && retval != PAPI_ECMP ) {
Packit 577717
		   test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval );
Packit 577717
		}
Packit 577717
Packit 577717
		options.domain.eventset = EventSet2;
Packit 577717
		options.domain.domain = PAPI_DOM_KERNEL;
Packit 577717
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &options );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval );
Packit 577717
Packit 577717
		options.domain.eventset = EventSet3;
Packit 577717
		options.domain.domain = PAPI_DOM_USER;
Packit 577717
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &options );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval );
Packit 577717
	}
Packit 577717
Packit 577717
	retval = PAPI_add_event( EventSet3, PAPI_TOT_CYC );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_add_event(PAPI_TOT_CYC)", retval );
Packit 577717
Packit 577717
	if ( num == ADD ) {
Packit 577717
		if (!TESTS_QUIET) printf( "\nTest case ADD: Call PAPI_set_opt(PAPI_DOMAIN) on EventSet after add\n" );
Packit 577717
		options.domain.eventset = EventSet1;
Packit 577717
		options.domain.domain = PAPI_DOM_ALL;
Packit 577717
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &options );
Packit 577717
		if ( retval != PAPI_OK && retval != PAPI_ECMP ) {
Packit 577717
		   test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval );
Packit 577717
		}
Packit 577717
		options.domain.eventset = EventSet2;
Packit 577717
		options.domain.domain = PAPI_DOM_KERNEL;
Packit 577717
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &options );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval );
Packit 577717
Packit 577717
		options.domain.eventset = EventSet3;
Packit 577717
		options.domain.domain = PAPI_DOM_USER;
Packit 577717
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &options );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_opt", retval );
Packit 577717
	}
Packit 577717
Packit 577717
	/* 2 events */
Packit 577717
Packit 577717
	values = allocate_test_space( num_tests, 2 );
Packit 577717
Packit 577717
	if ( num == CHANGE ) {
Packit 577717
		/* This testcase is dependent on the CREATE testcase running immediately before it, using
Packit 577717
		 * domain settings of "All", "Kernel" and "User", on event sets 1, 2, and 3, respectively.
Packit 577717
		 */
Packit 577717
		PAPI_option_t option;
Packit 577717
		if (!TESTS_QUIET) printf( "\nTest case CHANGE 1: Change domain on EventSet between runs, using generic domain options:\n" );
Packit 577717
		PAPI_start( EventSet1 );
Packit 577717
		PAPI_stop( EventSet1, values[0] );
Packit 577717
Packit 577717
		// change EventSet1 domain from All  to User
Packit 577717
		option.domain.domain = PAPI_DOM_USER;
Packit 577717
		option.domain.eventset = EventSet1;
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &option );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_domain", retval );
Packit 577717
Packit 577717
		PAPI_start( EventSet2 );
Packit 577717
		PAPI_stop( EventSet2, values[1] );
Packit 577717
Packit 577717
		// change EventSet2 domain from Kernel to All
Packit 577717
		option.domain.domain = PAPI_DOM_ALL;
Packit 577717
		option.domain.eventset = EventSet2;
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &option );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_domain", retval );
Packit 577717
Packit 577717
		PAPI_start( EventSet3 );
Packit 577717
		PAPI_stop( EventSet3, values[2] );
Packit 577717
Packit 577717
		// change EventSet3 domain from User  to Kernel
Packit 577717
		option.domain.domain = PAPI_DOM_KERNEL;
Packit 577717
		option.domain.eventset = EventSet3;
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &option );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_domain", retval );
Packit 577717
Packit 577717
		free_test_space( values, num_tests );
Packit 577717
		values = allocate_test_space( num_tests, 2 );
Packit 577717
Packit 577717
	}
Packit 577717
Packit 577717
	if ( num == SUPERVISOR &&
Packit 577717
		 ( cmpinfo->available_domains & PAPI_DOM_SUPERVISOR ) ) {
Packit 577717
		PAPI_option_t option;
Packit 577717
Packit 577717
		if (!TESTS_QUIET) printf( "\nTest case CHANGE 2: Change domain on EventSets to include/exclude supervisor events:\n" );
Packit 577717
Packit 577717
		option.domain.domain = PAPI_DOM_ALL;
Packit 577717
		option.domain.eventset = EventSet1;
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &option );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_domain ALL ", retval );
Packit 577717
Packit 577717
		option.domain.domain = PAPI_DOM_ALL ^ PAPI_DOM_SUPERVISOR;
Packit 577717
		option.domain.eventset = EventSet2;
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &option );
Packit 577717
		if ( retval != PAPI_OK ) {
Packit 577717
Packit 577717
                   /* DOM_ALL is special-cased as domains_available   */
Packit 577717
                   /* in papi.c .  Some machines don't like DOM_OTHER */
Packit 577717
                   /* so try that if the above case fails.            */
Packit 577717
		   option.domain.domain ^= PAPI_DOM_OTHER;
Packit 577717
		   option.domain.eventset = EventSet2;
Packit 577717
		   retval = PAPI_set_opt( PAPI_DOMAIN, &option );
Packit 577717
Packit 577717
                   if (retval != PAPI_OK) {
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_domain ALL^SUPERVISOR ", retval );
Packit 577717
                   }
Packit 577717
                }
Packit 577717
Packit 577717
		option.domain.domain = PAPI_DOM_SUPERVISOR;
Packit 577717
		option.domain.eventset = EventSet3;
Packit 577717
		retval = PAPI_set_opt( PAPI_DOMAIN, &option );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_domain SUPERVISOR ", retval );
Packit 577717
Packit 577717
		free_test_space( values, num_tests );
Packit 577717
		values = allocate_test_space( num_tests, 2 );
Packit 577717
	}
Packit 577717
	/* Warm it up dude */
Packit 577717
Packit 577717
	PAPI_start( EventSet1 );
Packit 577717
	do_flops( NUM_FLOPS );
Packit 577717
	PAPI_stop( EventSet1, NULL );
Packit 577717
Packit 577717
	retval = PAPI_start( EventSet1 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_start", retval );
Packit 577717
Packit 577717
	do_flops( NUM_FLOPS );
Packit 577717
Packit 577717
	retval = PAPI_stop( EventSet1, values[0] );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit 577717
Packit 577717
	retval = PAPI_start( EventSet2 );
Packit 577717
Packit 577717
	do_flops( NUM_FLOPS );
Packit 577717
Packit 577717
	if ( retval == PAPI_OK ) {
Packit 577717
		retval = PAPI_stop( EventSet2, values[1] );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit 577717
	} else {
Packit 577717
		values[1][0] = retval;
Packit 577717
		values[1][1] = retval;
Packit 577717
	}
Packit 577717
Packit 577717
	retval = PAPI_start( EventSet3 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_start", retval );
Packit 577717
Packit 577717
	do_flops( NUM_FLOPS );
Packit 577717
Packit 577717
	retval = PAPI_stop( EventSet3, values[2] );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit 577717
Packit 577717
	retval = PAPI_cleanup_eventset( EventSet1 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_cleanup", retval );
Packit 577717
Packit 577717
	retval = PAPI_destroy_eventset( &EventSet1 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_destroy", retval );
Packit 577717
Packit 577717
	retval = PAPI_cleanup_eventset( EventSet2 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_cleanup", retval );
Packit 577717
Packit 577717
	retval = PAPI_destroy_eventset( &EventSet2 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_destroy", retval );
Packit 577717
Packit 577717
	retval = PAPI_cleanup_eventset( EventSet3 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_cleanup", retval );
Packit 577717
Packit 577717
	retval = PAPI_destroy_eventset( &EventSet3 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_destroy", retval );
Packit 577717
Packit 577717
	dump_and_verify( num, values );
Packit 577717
Packit 577717
	free(values);
Packit 577717
Packit 577717
	PAPI_shutdown(  );
Packit 577717
}
Packit 577717
Packit 577717
void
Packit 577717
case2( int num, int domain, long long *values )
Packit 577717
{
Packit 577717
	int retval;
Packit 577717
	int EventSet1 = PAPI_NULL;
Packit 577717
	PAPI_option_t options;
Packit 577717
Packit 577717
	memset( &options, 0x0, sizeof ( options ) );
Packit 577717
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
	if ( ( retval = PAPI_query_event( PAPI_TOT_INS ) ) != PAPI_OK )
Packit 577717
		test_skip( __FILE__, __LINE__, "PAPI_query_event", retval );
Packit 577717
Packit 577717
	if ( ( retval = PAPI_query_event( PAPI_TOT_CYC ) ) != PAPI_OK )
Packit 577717
		test_skip( __FILE__, __LINE__, "PAPI_query_event", retval );
Packit 577717
Packit 577717
	if ( num == CREATE ) {
Packit 577717
		if (!TESTS_QUIET) {
Packit 577717
			printf( "\nTest case 2, CREATE: Call PAPI_set_domain(%s) before create\n",
Packit 577717
				stringify_domain( domain ) );
Packit 577717
			printf( "This should override the domain setting for this EventSet.\n" );
Packit 577717
		}
Packit 577717
		retval = PAPI_set_domain( domain );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_domain", retval );
Packit 577717
	}
Packit 577717
Packit 577717
	retval = PAPI_create_eventset( &EventSet1 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
Packit 577717
Packit 577717
	if ( num == ADD ) {
Packit 577717
		if (!TESTS_QUIET) {
Packit 577717
			printf( "\nTest case 2, ADD: Call PAPI_set_domain(%s) before add\n",
Packit 577717
					stringify_domain( domain ) );
Packit 577717
			printf( "This should have no effect on the domain setting for this EventSet.\n" );
Packit 577717
		}
Packit 577717
Packit 577717
		retval = PAPI_set_domain( domain );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_domain", retval );
Packit 577717
	}
Packit 577717
Packit 577717
	retval = PAPI_add_event( EventSet1, PAPI_TOT_INS );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_add_event(PAPI_TOT_INS)", retval );
Packit 577717
Packit 577717
	if ( num == MIDDLE ) {
Packit 577717
		if (!TESTS_QUIET) {
Packit 577717
			printf( "\nTest case 2, MIDDLE: Call PAPI_set_domain(%s) between adds\n",
Packit 577717
				stringify_domain( domain ) );
Packit 577717
			printf( "This should have no effect on the domain setting for this EventSet.\n" );
Packit 577717
		}
Packit 577717
Packit 577717
		retval = PAPI_set_domain( domain );
Packit 577717
		if ( retval != PAPI_OK )
Packit 577717
			test_fail( __FILE__, __LINE__, "PAPI_set_domain", retval );
Packit 577717
	}
Packit 577717
Packit 577717
	retval = PAPI_add_event( EventSet1, PAPI_TOT_CYC );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_add_event(PAPI_TOT_CYC)", retval );
Packit 577717
Packit 577717
Packit 577717
	/* Warm it up dude */
Packit 577717
Packit 577717
	PAPI_start( EventSet1 );
Packit 577717
	do_flops( NUM_FLOPS );
Packit 577717
	PAPI_stop( EventSet1, NULL );
Packit 577717
Packit 577717
	retval = PAPI_start( EventSet1 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_start", retval );
Packit 577717
Packit 577717
	do_flops( NUM_FLOPS );
Packit 577717
Packit 577717
	retval = PAPI_stop( EventSet1, values );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit 577717
Packit 577717
	retval = PAPI_cleanup_eventset( EventSet1 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_cleanup", retval );
Packit 577717
Packit 577717
	retval = PAPI_destroy_eventset( &EventSet1 );
Packit 577717
	if ( retval != PAPI_OK )
Packit 577717
		test_fail( __FILE__, __LINE__, "PAPI_destroy", retval );
Packit 577717
Packit 577717
	PAPI_shutdown(  );
Packit 577717
}
Packit 577717
Packit 577717
void
Packit 577717
case2_driver( void )
Packit 577717
{
Packit 577717
	long long **values;
Packit 577717
Packit 577717
	/* 3 tests, 2 events */
Packit 577717
Packit 577717
	values = allocate_test_space( 3, 2 );
Packit 577717
Packit 577717
	case2( CREATE, PAPI_DOM_KERNEL, values[0] );
Packit 577717
	case2( ADD, PAPI_DOM_KERNEL, values[1] );
Packit 577717
	case2( MIDDLE, PAPI_DOM_KERNEL, values[2] );
Packit 577717
Packit 577717
	dump_and_verify( CASE2, values );
Packit 577717
Packit 577717
	free(values);
Packit 577717
}
Packit 577717
Packit 577717
void
Packit 577717
case1_driver( void )
Packit 577717
{
Packit 577717
	case1( ADD );
Packit 577717
	case1( MIDDLE );
Packit 577717
	case1( CREATE );
Packit 577717
	case1( CHANGE );
Packit 577717
	case1( SUPERVISOR );
Packit 577717
}
Packit 577717
Packit 577717
int
Packit 577717
main( int argc, char **argv )
Packit 577717
{
Packit 577717
	tests_quiet( argc, argv );	/* Set TESTS_QUIET variable */
Packit 577717
Packit 577717
#if defined(sgi) && defined(host_mips)
Packit 577717
	uid_t id;
Packit 577717
	id = getuid(  );
Packit 577717
	if ( id != 0 ) {
Packit 577717
		printf( "IRIX requires root for PAPI_DOM_KERNEL and PAPI_DOM_ALL.\n" );
Packit 577717
		test_skip( __FILE__, __LINE__, "", 1 );
Packit 577717
	}
Packit 577717
#endif
Packit 577717
Packit 577717
	if (!TESTS_QUIET) {
Packit 577717
		printf( "Test second.c: set domain of eventset via PAPI_set_domain and PAPI_set_opt.\n\n" );
Packit 577717
		printf( "* PAPI_set_domain(DOMAIN) sets the default domain \napplied to subsequently created EventSets.\n" );
Packit 577717
		printf( "It should have no effect on existing EventSets.\n\n" );
Packit 577717
		printf( "* PAPI_set_opt(DOMAIN,xxx) sets the domain for a specific EventSet.\n" );
Packit 577717
		printf( "It should always override the default setting for that EventSet.\n" );
Packit 577717
	}
Packit 577717
Packit 577717
	case2_driver(  );
Packit 577717
	case1_driver(  );
Packit 577717
Packit 577717
	test_pass( __FILE__ );
Packit 577717
Packit 577717
	return 0;
Packit 577717
}