|
PAPI
5.0.1.0
|

Go to the source code of this file.
Functions | |
| int | main (int argc, char **argv) |
Variables | |
| int | TESTS_QUIET |
| int main | ( | int | argc, |
| char ** | argv | ||
| ) |
Definition at line 27 of file mpifirst.c.
{
int retval, num_tests = 5, num_events, tmp;
long long **values;
int EventSet = PAPI_NULL;
int PAPI_event, mask;
char event_name[PAPI_MAX_STR_LEN], add_event_str[PAPI_MAX_STR_LEN];
tests_quiet( argc, argv ); /* Set TESTS_QUIET variable */
MPI_Init( argc, argv );
retval = PAPI_library_init( PAPI_VER_CURRENT );
if ( retval != PAPI_VER_CURRENT )
test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
/* query and set up the right instruction to monitor */
if ( PAPI_query_event( PAPI_FP_INS ) == PAPI_OK ) {
PAPI_event = PAPI_FP_INS;
mask = MASK_FP_INS | MASK_TOT_CYC;
} else {
PAPI_event = PAPI_TOT_INS;
mask = MASK_TOT_INS | MASK_TOT_CYC;
}
retval = PAPI_event_code_to_name( PAPI_event, event_name );
if ( retval != PAPI_OK )
test_fail( __FILE__, __LINE__, "PAPI_event_code_to_name", retval );
sprintf( add_event_str, "PAPI_add_event[%s]", event_name );
EventSet = add_test_events( &num_events, &mask );
values = allocate_test_space( num_tests, num_events );
retval = PAPI_start( EventSet );
if ( retval != PAPI_OK )
test_fail( __FILE__, __LINE__, "PAPI_start", retval );
do_flops( NUM_FLOPS );
retval = PAPI_read( EventSet, values[0] );
if ( retval != PAPI_OK )
test_fail( __FILE__, __LINE__, "PAPI_read", retval );
retval = PAPI_reset( EventSet );
if ( retval != PAPI_OK )
test_fail( __FILE__, __LINE__, "PAPI_reset", retval );
do_flops( NUM_FLOPS );
retval = PAPI_read( EventSet, values[1] );
if ( retval != PAPI_OK )
test_fail( __FILE__, __LINE__, "PAPI_read", retval );
do_flops( NUM_FLOPS );
retval = PAPI_read( EventSet, values[2] );
if ( retval != PAPI_OK )
test_fail( __FILE__, __LINE__, "PAPI_read", retval );
do_flops( NUM_FLOPS );
retval = PAPI_stop( EventSet, values[3] );
if ( retval != PAPI_OK )
test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
retval = PAPI_read( EventSet, values[4] );
if ( retval != PAPI_OK )
test_fail( __FILE__, __LINE__, "PAPI_read", retval );
remove_test_events( &EventSet, mask );
if ( !TESTS_QUIET ) {
printf( "Test case 1: Non-overlapping start, stop, read.\n" );
printf( "-----------------------------------------------\n" );
tmp = PAPI_get_opt( PAPI_DEFDOM, NULL );
printf( "Default domain is: %d (%s)\n", tmp,
stringify_all_domains( tmp ) );
tmp = PAPI_get_opt( PAPI_DEFGRN, NULL );
printf( "Default granularity is: %d (%s)\n", tmp,
stringify_granularity( tmp ) );
printf( "Using %d iterations of c += a*b\n", NUM_FLOPS );
printf
( "-------------------------------------------------------------------------\n" );
printf( "Test type : \t1\t\t2\t\t3\t\t4\t\t5\n" );
sprintf( add_event_str, "%s : ", event_name );
printf( TAB5, add_event_str,
( values[0] )[0], ( values[1] )[0], ( values[2] )[0],
( values[3] )[0], ( values[4] )[0] );
printf( TAB5, "PAPI_TOT_CYC: ", ( values[0] )[1], ( values[1] )[1],
( values[2] )[1], ( values[3] )[1], ( values[4] )[1] );
printf
( "-------------------------------------------------------------------------\n" );
printf( "Verification:\n" );
printf( "Column 1 approximately equals column 2\n" );
printf( "Column 3 approximately equals 2 * column 2\n" );
printf( "Column 4 approximately equals 3 * column 2\n" );
printf( "Column 4 exactly equals column 5\n" );
}
{
long long min, max;
min = ( long long ) ( values[1][0] * .9 );
max = ( long long ) ( values[1][0] * 1.1 );
if ( values[0][0] > max || values[0][0] < min ||
values[2][0] > ( 2 * max )
|| values[2][0] < ( 2 * min ) || values[3][0] > ( 3 * max )
|| values[3][0] < ( 3 * min )
|| values[3][0] != values[4][0] ) {
printf( "min: " );
printf( LLDFMT, min );
printf( "max: " );
printf( LLDFMT, max );
printf( "1st: " );
printf( LLDFMT, values[0][0] );
printf( "2nd: " );
printf( LLDFMT, values[1][0] );
printf( "3rd: " );
printf( LLDFMT, values[2][0] );
printf( "4th: " );
printf( LLDFMT, values[3][0] );
printf( "5th: " );
printf( LLDFMT, values[4][0] );
printf( "\n" );
test_fail( __FILE__, __LINE__, event_name, 1 );
}
min = ( long long ) ( values[1][1] * .9 );
max = ( long long ) ( values[1][1] * 1.1 );
if ( values[0][1] > max || values[0][1] < min ||
values[2][1] > ( 2 * max )
|| values[2][1] < ( 2 * min ) || values[3][1] > ( 3 * max )
|| values[3][1] < ( 3 * min )
|| values[3][1] != values[4][1] ) {
test_fail( __FILE__, __LINE__, "PAPI_TOT_CYC", 1 );
}
}
test_pass( __FILE__, values, num_tests );
MPI_Finalize( );
exit( 1 );
}

| int TESTS_QUIET |
Definition at line 11 of file test_utils.c.