diff --git a/headers/mypapi.h b/headers/mypapi.h index dceff854928c0944c1952953d267f4bbff2a1925..3025ac4566cbe296c79928af90681e1b0aff3bf3 100644 --- a/headers/mypapi.h +++ b/headers/mypapi.h @@ -22,9 +22,15 @@ #if defined(USE_PAPI) // ----------------------------------------------------------- #include <papi.h> -#define PAPI_EVENTS_NUM 4 +#define PAPI_EVENTS_NUM 8 const unsigned int native_dp_scalar = (((0xc7 & 0xffffff)<<8) | (0xfc & 0xff)); -int papi_events[PAPI_EVENTS_NUM] = {PAPI_TOT_INS, PAPI_TOT_CYC, PAPI_L2_DCA, PAPI_L2_DCM}; +//int papi_events[PAPI_EVENTS_NUM] = {PAPI_TOT_INS, PAPI_TOT_CYC, PAPI_L2_DCA, PAPI_L2_DCM}; +int papi_events[PAPI_EVENTS_NUM] = {PAPI_SP_OPS, PAPI_DP_OPS, PAPI_VEC_SP, PAPI_VEC_DP}; +char *papi_eventnames[PAPI_EVENTS_NUM] = {"Instructions", "cycles", "L2D accesses", "L2D misses", + "SC DFP", "SC SFP", "V128 DFP", "V256 DFP"}; +char *papi_namedevents[PAPI_EVENTS_NUM] = {"PAPI_TOT_INS","PAPI_TOT_CYC","PAPI_L2_DCA", "PAPI_L2_LDM", + "FP_ARITH:SCALAR_DOUBLE", "FP_ARITH:SCALAR_SINGLE", + "FP_ARITH:128B_PACKED_DOUBLE", "FP_ARITH:256B_PACKED_DOUBLE"}; int papi_EventSet = PAPI_NULL; // the handle for the events' set long long papi_buffer[PAPI_EVENTS_NUM] = {0}; // storage for the counters' values long long papi_values[PAPI_EVENTS_NUM] = {0}; // accumulate the counters' values @@ -52,6 +58,11 @@ long long papi_values[PAPI_EVENTS_NUM] = {0}; // accumulate th printf("a problem with PAPI (code %d) : event %d arise at line %d: %s (%d)\n", \ (R), (E), __LINE__, (S1), (n)); fflush(stdout); }} +#define PAPI_WARN_NAMEDEVENT( R, E, S1, n ) { \ + if ( (R) != PAPI_OK ) { \ + printf("a problem with PAPI (code %d) : event %s arise at line %d: %s (%d)\n", \ + (R), (E), __LINE__, (S1), (n)); fflush(stdout); }} + #define PAPI_ADD_EVENTS_to_SET { for ( int i = 0; i < PAPI_EVENTS_NUM; i++) { \ retval = PAPI_query_event(papi_events[i]); \ @@ -60,12 +71,21 @@ long long papi_values[PAPI_EVENTS_NUM] = {0}; // accumulate th PAPI_WARN_EVENT(retval, papi_events[i], "adding event", i);} else { \ PAPI_WARN_EVENT(retval, papi_events[i],"querying event", i)} } } +#define PAPI_ADD_NAMEDEVENTS_to_SET { for ( int i = 0; i < PAPI_EVENTS_NUM; i++) { \ + int native = 0; \ + retval = PAPI_event_name_to_code(papi_namedevents[i] , &native ); \ + if ( retval == PAPI_OK ) { \ + retval = PAPI_add_event(papi_EventSet, native); \ + PAPI_WARN_NAMEDEVENT(retval, papi_namedevents[i], "adding event", i);} else { \ + PAPI_WARN_NAMEDEVENT(retval, papi_namedevents[i],"querying event", i)} } } + #define PAPI_INIT { \ int retval = PAPI_library_init(PAPI_VER_CURRENT); \ if (retval != PAPI_VER_CURRENT) \ printf("wrong PAPI initialization: version %d instead of %d has been found\n", retval, PAPI_VER_CURRENT); \ retval = PAPI_create_eventset(&papi_EventSet); PAPI_WARN(retval,"creating event set"); \ - PAPI_ADD_EVENTS_to_SET; } + PAPI_ADD_NAMEDEVENTS_to_SET; } + //PAPI_ADD_EVENTS_to_SET; } // to use HIGH-LEVEL API //#define PAPI_START_CNTR { int res = PAPI_start_counters(papi_events, PAPI_EVENTS_NUM); PAPI_CHECK_RES(res); }