NAME
PAPI_get_overflow_event_index - converts an overflow vector into an array of indexes to overflowing events
CONTENTS
Synopsis
Description
Arguments
Return Values
Errors
Examples
Bugs
See Also
SYNOPSIS
C Interface
#include <papi.h>
int PAPI_get_overflow_event_index(int EventSet, long_long overflow_vector, int *array, int *number);
Fortran Interface
Not implemented
DESCRIPTION
PAPI_get_overflow_event_index decomposes an overflow_vector into an event index array in which the first element
corresponds to the least significant set bit in overflow_vector and so on.
Based on overflow_vector, the user can only tell which physical counters overflowed.
Using this function, the user can map overflowing counters to specific events in the
event set. An array is used in this function to support the possibility of multiple
simultaneous overflow events.
ARGUMENTS
EventSet -- an integer handle to a PAPI event set as created by
PAPI_create_eventset (3)
overflow_vector -- a vector with bits set for each counter that overflowed.
This vector is passed by the system to the overflow handler routine.
*array -- an array of indexes for events in
EventSet. No more than
*number indexes will be stored into the
array.
*number -- On input the variable determines the size of the
array.
On output the variable contains the number of indexes in the
array.
Note that if the given
*array is too short to hold all the indexes correspond to the set bits in the overflow_vector the
*number variable will be set to the size of
array.
RETURN VALUES
On success, this function returns
PAPI_OK.
On error, a non-zero error code is returned.
ERRORS
PAPI_EINVAL | |
One or more of the arguments is invalid. This could occur if the
overflow_vector is empty (zero), if the
array or
number pointers are NULL, if the value of
number is less than one, or if the
EventSet is empty.
|
PAPI_ENOEVST | |
The
EventSet specified does not exist.
|
|
|
|
EXAMPLES
Create a user defined overflow handler routine that prints diagnostic
information about the overflow:
void handler(int EventSet, void *address, long_long overflow_vector, void *context)
{
int Events[4], number, i;
int total = 0, retval;
printf("Overflow #%d0 Handler(%d) Overflow at %p! vector=0x%llx0,
total, EventSet, address, overflow_vector);
total++;
number = 4;
retval = PAPI_get_overflow_event_index(EventSet,
overflow_vector, Events, &number);
if(retval == PAPI_OK)
for(i=0; i<number; i++) printf("Event index[%d] = %d", i, Events[i]);
}
BUGS
This function may not return all overflowing events if used with
software-driven overflow of multiple derived events.
SEE ALSO
PAPI_overflow (3)
PAPI Programmers Reference | PAPI_get_overflow_event_index (3) | September, 2004 |
|
|