|
Packit Service |
a1973e |
/* This test exercises the PAPI_{query, add, remove}_event APIs
|
|
Packit Service |
a1973e |
for PRESET events.
|
|
Packit Service |
a1973e |
It more or less duplicates the functionality of the classic "zero" test.
|
|
Packit Service |
a1973e |
*/
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#include <stdio.h>
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#include "papi.h"
|
|
Packit Service |
a1973e |
#include "papi_test.h"
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#include "do_loops.h"
|
|
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 = 1, tmp;
|
|
Packit Service |
a1973e |
int EventSet = PAPI_NULL;
|
|
Packit Service |
a1973e |
int num_events = 2;
|
|
Packit Service |
a1973e |
long long **values;
|
|
Packit Service |
a1973e |
long long elapsed_us, elapsed_cyc, elapsed_virt_us, elapsed_virt_cyc;
|
|
Packit Service |
a1973e |
const char *event_names[] = {"PAPI_TOT_CYC","PAPI_TOT_INS"};
|
|
Packit Service |
a1973e |
char add_event_str[PAPI_MAX_STR_LEN];
|
|
Packit Service |
a1973e |
double cycles_error;
|
|
Packit Service |
a1973e |
int quiet;
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* Set TESTS_QUIET variable */
|
|
Packit Service |
a1973e |
quiet=tests_quiet( argc, argv );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* Init the PAPI library */
|
|
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 |
|
|
Packit Service |
a1973e |
/* Verify that the named events exist */
|
|
Packit Service |
a1973e |
retval = PAPI_query_named_event(event_names[0]);
|
|
Packit Service |
a1973e |
if ( retval == PAPI_OK) {
|
|
Packit Service |
a1973e |
retval = PAPI_query_named_event(event_names[1]);
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
if ( retval != PAPI_OK ) {
|
|
Packit Service |
a1973e |
if (!quiet) printf("Trouble querying events\n");
|
|
Packit Service |
a1973e |
test_skip( __FILE__, __LINE__, "PAPI_query_named_event", retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* Create an empty event set */
|
|
Packit Service |
a1973e |
retval = PAPI_create_eventset( &EventSet );
|
|
Packit Service |
a1973e |
if ( retval != PAPI_OK )
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* add the events named above */
|
|
Packit Service |
a1973e |
retval = PAPI_add_named_event( EventSet, event_names[0] );
|
|
Packit Service |
a1973e |
if ( retval != PAPI_OK ) {
|
|
Packit Service |
a1973e |
sprintf( add_event_str, "PAPI_add_named_event[%s]", event_names[0] );
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, add_event_str, retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
retval = PAPI_add_named_event( EventSet, event_names[1] );
|
|
Packit Service |
a1973e |
if ( retval != PAPI_OK ) {
|
|
Packit Service |
a1973e |
sprintf( add_event_str, "PAPI_add_named_event[%s]", event_names[1] );
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, add_event_str, retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
values = allocate_test_space( num_tests, num_events );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* Gather before stats */
|
|
Packit Service |
a1973e |
elapsed_us = PAPI_get_real_usec( );
|
|
Packit Service |
a1973e |
elapsed_cyc = PAPI_get_real_cyc( );
|
|
Packit Service |
a1973e |
elapsed_virt_us = PAPI_get_virt_usec( );
|
|
Packit Service |
a1973e |
elapsed_virt_cyc = PAPI_get_virt_cyc( );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* Start PAPI */
|
|
Packit Service |
a1973e |
retval = PAPI_start( EventSet );
|
|
Packit Service |
a1973e |
if ( retval != PAPI_OK ) {
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_start", retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* our test code */
|
|
Packit Service |
a1973e |
do_flops( NUM_FLOPS );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* Stop PAPI */
|
|
Packit Service |
a1973e |
retval = PAPI_stop( EventSet, 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 |
|
|
Packit Service |
a1973e |
/* Calculate total values */
|
|
Packit Service |
a1973e |
elapsed_virt_us = PAPI_get_virt_usec( ) - elapsed_virt_us;
|
|
Packit Service |
a1973e |
elapsed_virt_cyc = PAPI_get_virt_cyc( ) - elapsed_virt_cyc;
|
|
Packit Service |
a1973e |
elapsed_us = PAPI_get_real_usec( ) - elapsed_us;
|
|
Packit Service |
a1973e |
elapsed_cyc = PAPI_get_real_cyc( ) - elapsed_cyc;
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* remove PAPI_TOT_CYC and PAPI_TOT_INS */
|
|
Packit Service |
a1973e |
retval = PAPI_remove_named_event( EventSet, event_names[0] );
|
|
Packit Service |
a1973e |
if ( retval != PAPI_OK ) {
|
|
Packit Service |
a1973e |
sprintf( add_event_str, "PAPI_add_named_event[%s]", event_names[0] );
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, add_event_str, retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
retval = PAPI_remove_named_event( EventSet, event_names[1] );
|
|
Packit Service |
a1973e |
if ( retval != PAPI_OK ) {
|
|
Packit Service |
a1973e |
sprintf( add_event_str, "PAPI_add_named_event[%s]", event_names[1] );
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, add_event_str, retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if ( !quiet ) {
|
|
Packit Service |
a1973e |
printf( "PAPI_{query, add, remove}_named_event API test.\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( "-------------------------------------------------------------------------\n" );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
printf( "Test type : \t 1\n" );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* cycles is first, other event second */
|
|
Packit Service |
a1973e |
sprintf( add_event_str, "%-12s : \t", event_names[0] );
|
|
Packit Service |
a1973e |
printf( TAB1, add_event_str, values[0][0] );
|
|
Packit Service |
a1973e |
sprintf( add_event_str, "%-12s : \t", event_names[1] );
|
|
Packit Service |
a1973e |
printf( TAB1, add_event_str, values[0][1] );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
printf( TAB1, "Real usec : \t", elapsed_us );
|
|
Packit Service |
a1973e |
printf( TAB1, "Real cycles : \t", elapsed_cyc );
|
|
Packit Service |
a1973e |
printf( TAB1, "Virt usec : \t", elapsed_virt_us );
|
|
Packit Service |
a1973e |
printf( TAB1, "Virt cycles : \t", elapsed_virt_cyc );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
printf( "-------------------------------------------------------------------------\n" );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
printf( "Verification: PAPI_TOT_CYC should be roughly real_cycles\n" );
|
|
Packit Service |
a1973e |
cycles_error=100.0*((double)values[0][0] - (double)elapsed_cyc)/
|
|
Packit Service |
a1973e |
(double)values[0][0];
|
|
Packit Service |
a1973e |
if (cycles_error>10.0) {
|
|
Packit Service |
a1973e |
printf("Error of %.2f%%\n",cycles_error);
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "validation", 0 );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
test_pass( __FILE__ );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
return 0;
|
|
Packit Service |
a1973e |
}
|