Blame man/man3/PAPI_overflow.3

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\&.