|
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 |
}
|