Blame src/ctests/nineth.c

Packit Service a1973e
/* This file performs the following test: start, stop and timer functionality for derived events
Packit Service a1973e
Packit Service a1973e
   NOTE: This test becomes useless when rate events like PAPI_FLOPS are removed.
Packit Service a1973e
Packit Service a1973e
   - It tests the derived metric FLOPS using the following two counters.
Packit Service a1973e
     They are counted in the default counting domain and default
Packit Service a1973e
     granularity, depending on the platform. Usually this is 
Packit Service a1973e
     the user domain (PAPI_DOM_USER) and thread context (PAPI_GRN_THR).
Packit Service a1973e
     + PAPI_FP_INS
Packit Service a1973e
     + PAPI_TOT_CYC
Packit Service a1973e
   - Get us.
Packit Service a1973e
   - Start counters
Packit Service a1973e
   - Do flops
Packit Service a1973e
   - Stop and read counters
Packit Service a1973e
   - Get us.
Packit Service a1973e
*/
Packit Service a1973e
Packit Service a1973e
#include "papi_test.h"
Packit Service a1973e
Packit Service a1973e
extern int TESTS_QUIET;				   /* Declared in test_utils.c */
Packit Service a1973e
Packit Service a1973e
int
Packit Service a1973e
main( int argc, char **argv )
Packit Service a1973e
{
Packit Service a1973e
	int retval, num_tests = 2, tmp;
Packit Service a1973e
	int EventSet1 = PAPI_NULL;
Packit Service a1973e
	int EventSet2 = PAPI_NULL;
Packit Service a1973e
	int mask1 = 0x80001;			   /* FP_OPS and TOT_CYC */
Packit Service a1973e
	int mask2 = 0x8;				   /* FLOPS */
Packit Service a1973e
	int num_events1;
Packit Service a1973e
	int num_events2;
Packit Service a1973e
	long long **values;
Packit Service a1973e
	int clockrate;
Packit Service a1973e
	double test_flops;
Packit Service a1973e
Packit Service a1973e
Packit Service a1973e
	tests_quiet( argc, argv );	/* Set TESTS_QUIET variable */
Packit Service a1973e
Packit Service a1973e
	retval = PAPI_library_init( PAPI_VER_CURRENT );
Packit Service a1973e
	if ( retval != PAPI_VER_CURRENT )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
Packit Service a1973e
Packit Service a1973e
	/* gotta count flops to run this test */
Packit Service a1973e
	if ( ( retval = PAPI_query_event( PAPI_FP_OPS ) ) != PAPI_OK )
Packit Service a1973e
		test_skip( __FILE__, __LINE__, "PAPI_query_event", retval );
Packit Service a1973e
Packit Service a1973e
	EventSet1 = add_test_events( &num_events1, &mask1 );
Packit Service a1973e
/*   EventSet2 = add_test_events(&num_events2, &mask2); */
Packit Service a1973e
Packit Service a1973e
	if ( num_events1 == 0 || num_events2 == 0 )
Packit Service a1973e
		test_skip( __FILE__, __LINE__, "add_test_events", PAPI_ENOEVNT );
Packit Service a1973e
Packit Service a1973e
	/* num_events1 is greater than num_events2 so don't worry. */
Packit Service a1973e
Packit Service a1973e
	values = allocate_test_space( num_tests, num_events1 );
Packit Service a1973e
Packit Service a1973e
	clockrate = PAPI_get_opt( PAPI_CLOCKRATE, NULL );
Packit Service a1973e
	if ( clockrate < 1 )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_get_opt", retval );
Packit Service a1973e
Packit Service a1973e
	retval = PAPI_start( EventSet1 );
Packit Service a1973e
	if ( retval != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_start", retval );
Packit Service a1973e
Packit Service a1973e
	do_flops( NUM_FLOPS );
Packit Service a1973e
Packit Service a1973e
	retval = PAPI_stop( EventSet1, values[0] );
Packit Service a1973e
	if ( retval != PAPI_OK )
Packit Service a1973e
		test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
Packit Service a1973e
/*
Packit Service a1973e
   retval = PAPI_start(EventSet2);
Packit Service a1973e
   if (retval != PAPI_OK)
Packit Service a1973e
      test_fail(__FILE__, __LINE__, "PAPI_start", retval);
Packit Service a1973e
Packit Service a1973e
   do_flops(NUM_FLOPS);
Packit Service a1973e
Packit Service a1973e
   retval = PAPI_stop(EventSet2, values[1]);
Packit Service a1973e
   if (retval != PAPI_OK)
Packit Service a1973e
      test_fail(__FILE__, __LINE__, "PAPI_stop", retval);
Packit Service a1973e
*/
Packit Service a1973e
	remove_test_events( &EventSet1, mask1 );
Packit Service a1973e
/*   remove_test_events(&EventSet2, mask2); */
Packit Service a1973e
Packit Service a1973e
	test_flops =
Packit Service a1973e
		( double ) ( values[0] )[0] *
Packit Service a1973e
		( double ) clockrate *( double ) 1000000.0;
Packit Service a1973e
	test_flops = test_flops / ( double ) ( values[0] )[1];
Packit Service a1973e
Packit Service a1973e
	if ( !TESTS_QUIET ) {
Packit Service a1973e
		printf( "Test case 9: start, stop for derived event PAPI_FLOPS.\n" );
Packit Service a1973e
		printf( "------------------------------------------------------\n" );
Packit Service a1973e
		tmp = PAPI_get_opt( PAPI_DEFDOM, NULL );
Packit Service a1973e
		printf( "Default domain is: %d (%s)\n", tmp,
Packit Service a1973e
				stringify_all_domains( tmp ) );
Packit Service a1973e
		tmp = PAPI_get_opt( PAPI_DEFGRN, NULL );
Packit Service a1973e
		printf( "Default granularity is: %d (%s)\n", tmp,
Packit Service a1973e
				stringify_granularity( tmp ) );
Packit Service a1973e
		printf( "Using %d iterations of c += a*b\n", NUM_FLOPS );
Packit Service a1973e
		printf
Packit Service a1973e
			( "-------------------------------------------------------------------------\n" );
Packit Service a1973e
Packit Service a1973e
		printf( "Test type   : %12s%12s\n", "1", "2" );
Packit Service a1973e
		printf( TAB2, "PAPI_FP_OPS : ", ( values[0] )[0], ( long long ) 0 );
Packit Service a1973e
		printf( TAB2, "PAPI_TOT_CYC: ", ( values[0] )[1], ( long long ) 0 );
Packit Service a1973e
		printf( TAB2, "PAPI_FLOPS  : ", ( long long ) 0, ( values[1] )[0] );
Packit Service a1973e
		printf
Packit Service a1973e
			( "-------------------------------------------------------------------------\n" );
Packit Service a1973e
Packit Service a1973e
		printf( "Verification:\n" );
Packit Service a1973e
		printf( "Last number in row 3 approximately equals %f\n", test_flops );
Packit Service a1973e
		printf( "This test is no longer valid: PAPI_FLOPS is deprecated.\n" );
Packit Service a1973e
	}
Packit Service a1973e
/*   {
Packit Service a1973e
      double min, max;
Packit Service a1973e
      min = values[1][0] * .9;
Packit Service a1973e
      max = values[1][0] * 1.1;
Packit Service a1973e
      if (test_flops > max || test_flops < min)
Packit Service a1973e
         test_fail(__FILE__, __LINE__, "PAPI_FLOPS", 1);
Packit Service a1973e
   }
Packit Service a1973e
*/
Packit Service a1973e
	test_pass( __FILE__, values, num_tests );
Packit Service a1973e
	exit( 1 );
Packit Service a1973e
}