|
Packit |
577717 |
.TH "PAPI_overflow" 3 "Mon Dec 18 2017" "Version 5.6.0.0" "PAPI" \" -*- nroff -*-
|
|
Packit |
577717 |
.ad l
|
|
Packit |
577717 |
.nh
|
|
Packit |
577717 |
.SH NAME
|
|
Packit |
577717 |
PAPI_overflow \-
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
Set up an event set to begin registering overflows\&.
|
|
Packit |
577717 |
|
|
Packit |
577717 |
.SH SYNOPSIS
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
.SH "Detailed Description"
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
\fBPAPI_overflow()\fP marks a specific EventCode in an EventSet to generate an overflow signal after every threshold events are counted\&. More than one event in an event set can be used to trigger overflows\&. In such cases, the user must call this function once for each overflowing event\&. To turn off overflow on a specified event, call this function with a threshold value of 0\&.
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
Overflows can be implemented in either software or hardware, but the scope is the entire event set\&. PAPI defaults to hardware overflow if it is available\&. In the case of software overflow, a periodic timer interrupt causes PAPI to compare the event counts against the threshold values and call the overflow handler if one or more events have exceeded their threshold\&. In the case of hardware overflow, the counters are typically set to the negative of the threshold value and count up to 0\&. This zero-crossing triggers a hardware interrupt that calls the overflow handler\&. Because of this counter interrupt, the counter values for overflowing counters may be very small or even negative numbers, and cannot be relied upon as accurate\&. In such cases the overflow handler can approximate the counts by supplying the threshold value whenever an overflow occurs\&.
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
_papi_overflow_handler() is a placeholder for a user-defined function to process overflow events\&. A pointer to this function is passed to the \fBPAPI_overflow\fP routine, where it is invoked whenever a software or hardware overflow occurs\&. This handler receives the EventSet of the overflowing event, the Program Counter address when the interrupt occured, an overflow_vector that can be processed to determined which event(s) caused the overflow, and a pointer to the machine context, which can be used in a platform-specific manor to extract register information about what was happening when the overflow occured\&.
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
\fBC Interface:\fP
|
|
Packit |
577717 |
.RS 4
|
|
Packit |
577717 |
#include <\fBpapi\&.h\fP>
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
int \fBPAPI_overflow\fP (int EventSet, int EventCode, int threshold, int flags, PAPI_overflow_handler_t handler );
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
(*PAPI_overflow_handler_t) _papi_overflow_handler (int EventSet, void *address, long_long overflow_vector, void *context );
|
|
Packit |
577717 |
.RE
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
\fBFortran Interface:\fP
|
|
Packit |
577717 |
.RS 4
|
|
Packit |
577717 |
Not implemented
|
|
Packit |
577717 |
.RE
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
\fBParameters:\fP
|
|
Packit |
577717 |
.RS 4
|
|
Packit |
577717 |
\fIEventSet\fP -- an integer handle to a PAPI event set as created by \fBPAPI_create_eventset\fP
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIEventCode\fP -- the preset or native event code to be set for overflow detection\&. This event must have already been added to the EventSet\&.
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIthreshold\fP -- the overflow threshold value for this EventCode\&.
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIflags\fP -- bitmap that controls the overflow mode of operation\&. Set to PAPI_OVERFLOW_FORCE_SW to force software overflowing, even if hardware overflow support is available\&. If hardware overflow support is available on a given system, it will be the default mode of operation\&. There are situations where it is advantageous to use software overflow instead\&. Although software overflow is inherently less accurate, with more latency and processing overhead, it does allow for overflowing on derived events, and for the accurate recording of overflowing event counts\&. These two features are typically not available with hardware overflow\&. Only one type of overflow is allowed per event set, so setting one event to hardware overflow and another to forced software overflow will result in an error being returned\&.
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIhandler\fP -- pointer to the user supplied handler function to call upon overflow
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIaddress\fP -- the Program Counter address at the time of the overflow
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIoverflow_vector\fP -- a long long word containing flag bits to indicate which hardware counter(s) caused the overflow
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fI*context\fP -- pointer to a machine specific structure that defines the register context at the time of overflow\&. This parameter is often unused and can be ignored in the user function\&.
|
|
Packit |
577717 |
.RE
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
\fBReturn values:\fP
|
|
Packit |
577717 |
.RS 4
|
|
Packit |
577717 |
\fIPAPI_OK\fP On success, \fBPAPI_overflow\fP returns PAPI_OK\&.
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIPAPI_EINVAL\fP One or more of the arguments is invalid\&. Most likely a bad threshold value\&.
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIPAPI_ENOMEM\fP Insufficient memory to complete the operation\&.
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIPAPI_ENOEVST\fP The EventSet specified does not exist\&.
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIPAPI_EISRUN\fP The EventSet is currently counting events\&.
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIPAPI_ECNFLCT\fP The underlying counter hardware cannot count this event and other events in the EventSet simultaneously\&. Also can happen if you are trying to overflow both by hardware and by forced software at the same time\&.
|
|
Packit |
577717 |
.br
|
|
Packit |
577717 |
\fIPAPI_ENOEVNT\fP The PAPI event is not available on the underlying hardware\&.
|
|
Packit |
577717 |
.RE
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
\fBExample\fP
|
|
Packit |
577717 |
.RS 4
|
|
Packit |
577717 |
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
.nf
|
|
Packit |
577717 |
* // Define a simple overflow handler:
|
|
Packit |
577717 |
* void handler(int EventSet, void *address, long_long overflow_vector, void *context)
|
|
Packit |
577717 |
* {
|
|
Packit |
577717 |
* fprintf(stderr,\"Overflow at %p! bit=%#llx \\n\",
|
|
Packit |
577717 |
* address,overflow_vector);
|
|
Packit |
577717 |
* }
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
* // Call PAPI_overflow for an EventSet containing PAPI_TOT_INS,
|
|
Packit |
577717 |
* // setting the threshold to 100000\&. Use the handler defined above\&.
|
|
Packit |
577717 |
* retval = PAPI_overflow(EventSet, PAPI_TOT_INS, 100000, 0, handler);
|
|
Packit |
577717 |
*
|
|
Packit |
577717 |
|
|
Packit |
577717 |
.fi
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
.RE
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
\fBSee Also:\fP
|
|
Packit |
577717 |
.RS 4
|
|
Packit |
577717 |
\fBPAPI_get_overflow_event_index\fP
|
|
Packit |
577717 |
.RE
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
|
|
Packit |
577717 |
|
|
Packit |
577717 |
.SH "Author"
|
|
Packit |
577717 |
.PP
|
|
Packit |
577717 |
Generated automatically by Doxygen for PAPI from the source code\&.
|