/** * @author PAPI team UTK/ICL * Test case for powercap component * @brief * Tests basic functionality of powercap component */ #include #include #include #include #include "papi.h" #include "papi_test.h" #define MAX_powercap_EVENTS 64 #ifdef BASIC_TEST void run_test( int quiet ) { if ( !quiet ) { printf( "Sleeping 1 second...\n" ); } sleep( 1 ); } #else /* NOT BASIC_TEST */ #define MATRIX_SIZE 1024 static double a[MATRIX_SIZE][MATRIX_SIZE]; static double b[MATRIX_SIZE][MATRIX_SIZE]; static double c[MATRIX_SIZE][MATRIX_SIZE]; /* Naive matrix multiply */ void run_test( int quiet ) { double s; int i,j,k; if ( !quiet ) printf( "Doing a naive %dx%d MMM...\n",MATRIX_SIZE,MATRIX_SIZE ); for( i=0; i 1 ) { if ( strstr( argv[1], "-w" ) ) { do_wrap = 1; } } #endif /* PAPI Initialization */ retval = PAPI_library_init( PAPI_VER_CURRENT ); if ( retval != PAPI_VER_CURRENT ) test_fail( __FILE__, __LINE__,"PAPI_library_init failed\n",retval ); if ( !TESTS_QUIET ) printf( "Trying all powercap events\n" ); numcmp = PAPI_num_components(); for( cid=0; cidname,"powercap" ) ) { powercap_cid=cid; if ( !TESTS_QUIET ) printf( "Found powercap component at cid %d\n",powercap_cid ); if ( cmpinfo->disabled ) { if ( !TESTS_QUIET ) { printf( "powercap component disabled: %s\n", cmpinfo->disabled_reason ); } test_skip( __FILE__,__LINE__,"powercap component disabled",0 ); } break; } } /* Component not found */ if ( cid==numcmp ) test_skip( __FILE__,__LINE__,"No powercap component found\n",0 ); /* Skip if component has no counters */ if ( cmpinfo->num_cntrs==0 ) test_skip( __FILE__,__LINE__,"No counters in the powercap component\n",0 ); /* Create EventSet */ retval = PAPI_create_eventset( &EventSet ); if ( retval != PAPI_OK ) test_fail( __FILE__, __LINE__, "PAPI_create_eventset()",retval ); /* Add all events */ code = PAPI_NATIVE_MASK; r = PAPI_enum_cmp_event( &code, PAPI_ENUM_FIRST, powercap_cid ); while ( r == PAPI_OK ) { retval = PAPI_event_code_to_name( code, event_names[num_events] ); if ( retval != PAPI_OK ) test_fail( __FILE__, __LINE__,"Error from PAPI_event_code_to_name", retval ); retval = PAPI_get_event_info( code,&evinfo ); if ( retval != PAPI_OK ) test_fail( __FILE__, __LINE__, "Error getting event info\n",retval ); strncpy( event_descrs[num_events],evinfo.long_descr,sizeof( event_descrs[0] )-1 ); strncpy( units[num_events],evinfo.units,sizeof( units[0] )-1 ); // buffer must be null terminated to safely use strstr operation on it below units[num_events][sizeof( units[0] )-1] = '\0'; data_type[num_events] = evinfo.data_type; retval = PAPI_add_event( EventSet, code ); if ( retval != PAPI_OK ) break; /* We've hit an event limit */ num_events++; r = PAPI_enum_cmp_event( &code, PAPI_ENUM_EVENTS, powercap_cid ); } values=calloc( num_events,sizeof( long long ) ); if ( values==NULL ) test_fail( __FILE__, __LINE__,"No memory",retval ); if ( !TESTS_QUIET ) printf( "\nStarting measurements...\n\n" ); /* Start Counting */ before_time=PAPI_get_real_nsec(); retval = PAPI_start( EventSet ); if ( retval != PAPI_OK ) test_fail( __FILE__, __LINE__, "PAPI_start()",retval ); /* Run test */ run_test( TESTS_QUIET ); /* Stop Counting */ after_time=PAPI_get_real_nsec(); retval = PAPI_stop( EventSet, values ); if ( retval != PAPI_OK ) test_fail( __FILE__, __LINE__, "PAPI_stop()",retval ); elapsed_time=( ( double )( after_time-before_time ) )/1.0e9; if ( !TESTS_QUIET ) { printf( "\nStopping measurements, took %.3fs, gathering results...\n\n", elapsed_time ); printf( "\n" ); printf( "scaled energy measurements:\n" ); for( i=0; i