PAPI3:PAPI add event.3
#include <papi.h> int PAPI_add_event(int EventSet, int EventCode ); int PAPI_add_events(int EventSet, int * EventCodes, int number );
#include fpapi.h PAPIF_add_event(C_INT EventSet, C_INT EventCode, C_INT check ) PAPIF_add_events(C_INT EventSet, C_INT(*) EventCodes, C_INT number, C_INT check )
PAPI_add_event() adds one event to a PAPI Event Set. PAPI_add_events() does the same, but for an array of events.
EventSet -- an integer handle for a PAPI Event Set as created by PAPI_create_eventset (3)
EventCode -- a defined event such as PAPI_TOT_INS.
*EventCode -- an array of defined events
number -- an integer indicating the number of events in the array *EventCode It should be noted that PAPI_add_events can partially succeed, exactly like PAPI_remove_events.
Positive integer The number of consecutive elements that succeeded before the error.
PAPI_EINVAL One or more of the arguments is invalid.
PAPI_ENOMEM Insufficient memory to complete the operation.
PAPI_ENOEVST The event set specified does not exist.
PAPI_EISRUN The event set is currently counting events.
PAPI_ECNFLCT The underlying counter hardware can not count this event and other events in the event set simultaneously.
PAPI_ENOEVNT The PAPI preset is not available on the underlying hardware.
PAPI_EBUG Internal error, please send mail to the developers.
The vector function should take a pointer to a length argument so a proper return value can be set upon partial success.
IBM POWER6 NOTES
Event counters 5 and 6 in the IBM POWER6 are restricted: .br \(bu Each can count just a single, fixed event. .br \(bu They are free-running and so can count only in the combined domain - PAPI_DOM_USER | PAPI_DOM_KERNEL | PAPI_DOM_SUPERVISOR. .br \(bu They cannot interrupt on overflow.
Although counter 6 counts processor cycles gated by the run latch (PM_RUN_CYC), the current implementation maps the PAPI preset event PAPI_TOT_CYC to PM_CYC because of the domain and overflow limitations of counter 6. PM_CYC can be counted with relatively few other events, so it's likely that you will receive PAPI_ECNFLCT if you try to add PAPI_TOT_CYC to an event set that already contains other events. If you can use the above mentioned combined domain and do not need the overflow capability, you should consider adding the native event PM_RUN_CYC instead of PAPI_TOT_CYC.
Counter 5 counts the native event PM_RUN_INST_CMPL, which is instructions completed gated by the run latch. For the same reasons given for counter 6, PAPI_TOT_INS is mapped to PM_INST_CMPL instead of PM_RUN_INST_CMPL. And as above, if you try to add PAPI_TOT_INS to an event group with other events already in it, you are likely to receive PAPI_ECNFLCT. If you can use the above combined domain and do not need the overflow capability, you should consider adding the native event PM_RUN_INST_CMPL instead of PAPI_TOT_INS.