|
Packit Service |
a1973e |
/* From Dave McNamara at PSRV. Thanks! */
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
/* If an event is countable but you've exhausted the counter resources
|
|
Packit Service |
a1973e |
and you try to add an event, it seems subsequent PAPI_start and/or
|
|
Packit Service |
a1973e |
PAPI_stop will causes a Seg. Violation.
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
I got around this by calling PAPI to get the # of countable events,
|
|
Packit Service |
a1973e |
then making sure that I didn't try to add more than these number of
|
|
Packit Service |
a1973e |
events. I still have a problem if someone adds Level 2 cache misses
|
|
Packit Service |
a1973e |
and then adds FLOPS 'cause I didn't count FLOPS as actually requiring
|
|
Packit Service |
a1973e |
2 counters. */
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#include <stdio.h>
|
|
Packit Service |
a1973e |
#include <stdlib.h>
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
#include "papi.h"
|
|
Packit Service |
a1973e |
#include "papi_test.h"
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
int
|
|
Packit Service |
a1973e |
main( int argc, char **argv )
|
|
Packit Service |
a1973e |
{
|
|
Packit Service |
a1973e |
double c, a = 0.999, b = 1.001;
|
|
Packit Service |
a1973e |
int n = 1000;
|
|
Packit Service |
a1973e |
int EventSet = PAPI_NULL;
|
|
Packit Service |
a1973e |
int retval;
|
|
Packit Service |
a1973e |
int j = 0, i;
|
|
Packit Service |
a1973e |
long long g1[3];
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
tests_quiet( argc, argv ); /* Set TESTS_QUIET variable */
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if ( ( retval =
|
|
Packit Service |
a1973e |
PAPI_library_init( PAPI_VER_CURRENT ) ) != PAPI_VER_CURRENT )
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if ( ( retval = PAPI_create_eventset( &EventSet ) ) != PAPI_OK )
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if ( PAPI_query_event( PAPI_BR_CN ) == PAPI_OK )
|
|
Packit Service |
a1973e |
j++;
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if ( j == 1 &&
|
|
Packit Service |
a1973e |
( retval = PAPI_add_event( EventSet, PAPI_BR_CN ) ) != PAPI_OK ) {
|
|
Packit Service |
a1973e |
if ( retval != PAPI_ECNFLCT )
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_add_event", retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
i = j;
|
|
Packit Service |
a1973e |
if ( PAPI_query_event( PAPI_TOT_CYC ) == PAPI_OK )
|
|
Packit Service |
a1973e |
j++;
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if ( j == ( i + 1 ) &&
|
|
Packit Service |
a1973e |
( retval = PAPI_add_event( EventSet, PAPI_TOT_CYC ) ) != PAPI_OK ) {
|
|
Packit Service |
a1973e |
if ( retval != PAPI_ECNFLCT )
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_add_event", retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
i = j;
|
|
Packit Service |
a1973e |
if ( PAPI_query_event( PAPI_TOT_INS ) == PAPI_OK )
|
|
Packit Service |
a1973e |
j++;
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if ( j == ( i + 1 ) &&
|
|
Packit Service |
a1973e |
( retval = PAPI_add_event( EventSet, PAPI_TOT_INS ) ) != PAPI_OK ) {
|
|
Packit Service |
a1973e |
if ( retval != PAPI_ECNFLCT )
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_add_event", retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
if ( j ) {
|
|
Packit Service |
a1973e |
if ( ( retval = PAPI_start( EventSet ) ) != PAPI_OK )
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_start", retval );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
for ( i = 0; i < n; i++ ) {
|
|
Packit Service |
a1973e |
c = a * b;
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
if (!TESTS_QUIET) fprintf(stdout,"c=%lf\n",c);
|
|
Packit Service |
a1973e |
if ( ( retval = PAPI_stop( EventSet, g1 ) ) != PAPI_OK )
|
|
Packit Service |
a1973e |
test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
|
|
Packit Service |
a1973e |
}
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
test_pass( __FILE__ );
|
|
Packit Service |
a1973e |
|
|
Packit Service |
a1973e |
return 0;
|
|
Packit Service |
a1973e |
}
|