Blame src/ctests/nineth.c

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