|
Packit |
577717 |
/* From Dave McNamara at PSRV. Thanks! */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
/* If you try to add an event that doesn't exist, you get the correct error
|
|
Packit |
577717 |
message, yet you get subsequent Seg. Faults when you try to do PAPI_start and
|
|
Packit |
577717 |
PAPI_stop. I would expect some bizarre behavior if I had no events added to the
|
|
Packit |
577717 |
event set and then tried to PAPI_start but if I had successfully added one
|
|
Packit |
577717 |
event, then the 2nd one get an error when I tried to add it, is it possible for
|
|
Packit |
577717 |
PAPI_start to work but just count the first event?
|
|
Packit |
577717 |
*/
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#include <stdio.h>
|
|
Packit |
577717 |
#include <stdlib.h>
|
|
Packit |
577717 |
|
|
Packit |
577717 |
#include "papi.h"
|
|
Packit |
577717 |
#include "papi_test.h"
|
|
Packit |
577717 |
|
|
Packit |
577717 |
int
|
|
Packit |
577717 |
main( int argc, char **argv )
|
|
Packit |
577717 |
{
|
|
Packit |
577717 |
double c, a = 0.999, b = 1.001;
|
|
Packit |
577717 |
int n = 1000;
|
|
Packit |
577717 |
int EventSet = PAPI_NULL;
|
|
Packit |
577717 |
int retval;
|
|
Packit |
577717 |
int i, j = 0;
|
|
Packit |
577717 |
long long g1[2];
|
|
Packit |
577717 |
|
|
Packit |
577717 |
tests_quiet( argc, argv ); /* Set TESTS_QUIET variable */
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( retval =
|
|
Packit |
577717 |
PAPI_library_init( PAPI_VER_CURRENT ) ) != PAPI_VER_CURRENT )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_library_init", retval );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( retval = PAPI_create_eventset( &EventSet ) ) != PAPI_OK )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_create_eventset", retval );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( PAPI_query_event( PAPI_L2_TCM ) == PAPI_OK )
|
|
Packit |
577717 |
j++;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( j == 1 &&
|
|
Packit |
577717 |
( retval = PAPI_add_event( EventSet, PAPI_L2_TCM ) ) != PAPI_OK ) {
|
|
Packit |
577717 |
if ( retval != PAPI_ECNFLCT )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_add_event", retval );
|
|
Packit |
577717 |
j--; /* The event was not added */
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
i = j;
|
|
Packit |
577717 |
if ( PAPI_query_event( PAPI_L2_DCM ) == PAPI_OK )
|
|
Packit |
577717 |
j++;
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( j == ( i + 1 ) &&
|
|
Packit |
577717 |
( retval = PAPI_add_event( EventSet, PAPI_L2_DCM ) ) != PAPI_OK ) {
|
|
Packit |
577717 |
if ( retval != PAPI_ECNFLCT )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_add_event", retval );
|
|
Packit |
577717 |
j--; /* The event was not added */
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( j ) {
|
|
Packit |
577717 |
if ( ( retval = PAPI_start( EventSet ) ) != PAPI_OK )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_start", retval );
|
|
Packit |
577717 |
for ( i = 0; i < n; i++ ) {
|
|
Packit |
577717 |
c = a * b;
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
if (!TESTS_QUIET) fprintf(stdout,"c=%lf\n",c);
|
|
Packit |
577717 |
|
|
Packit |
577717 |
if ( ( retval = PAPI_stop( EventSet, g1 ) ) != PAPI_OK )
|
|
Packit |
577717 |
test_fail( __FILE__, __LINE__, "PAPI_stop", retval );
|
|
Packit |
577717 |
}
|
|
Packit |
577717 |
|
|
Packit |
577717 |
test_pass( __FILE__ );
|
|
Packit |
577717 |
|
|
Packit |
577717 |
return 0;
|
|
Packit |
577717 |
}
|