PAPI_sprofil(3) | PAPI | PAPI_sprofil(3) |
PAPI_sprofil -
Generate PC histogram data from multiple code regions where hardware counter overflow occurs.
C Interface:
Parameters:
profcnt number of structures in the prof array for hardware
profiling.
EventSet The PAPI EventSet to profile. This EventSet is marked as
profiling-ready, but profiling doesn't actually start until a
PAPI_start() call is issued.
EventCode Code of the Event in the EventSet to profile. This event must
already be a member of the EventSet.
threshold minimum number of events that must occur before the PC is
sampled. If hardware overflow is supported for your component, this
threshold will trigger an interrupt when reached. Otherwise, the counters
will be sampled periodically and the PC will be recorded for the first
sample that exceeds the threshold. If the value of threshold is 0, profiling
will be disabled for this event.
flags bit pattern to control profiling behavior. Defined values are
given in a table in the documentation for PAPI_pofil
Return values:
PAPI_sprofil() is a structure driven profiler that profiles one or more disjoint regions of code in a single call. It accepts a pointer to a preinitialized array of sprofil structures, and initiates profiling based on the values contained in the array. Each structure in the array defines the profiling parameters that are normally passed to PAPI_profil(). For more information on profiling, PAPI_profil
Example:
* int retval; * unsigned long length; * PAPI_exe_info_t *prginfo; * unsigned short *profbuf1, *profbuf2, profbucket; * PAPI_sprofil_t sprof[3]; * * prginfo = PAPI_get_executable_info(); * if (prginfo == NULL) handle_error( NULL ); * length = (unsigned long)(prginfo->text_end - prginfo->text_start); * // Allocate 2 buffers of equal length * profbuf1 = (unsigned short *)malloc(length); * profbuf2 = (unsigned short *)malloc(length); * if ((profbuf1 == NULL) || (profbuf2 == NULL)) * handle_error( NULL ); * memset(profbuf1,0x00,length); * memset(profbuf2,0x00,length); * // First buffer * sprof[0].pr_base = profbuf1; * sprof[0].pr_size = length; * sprof[0].pr_off = (caddr_t) DO_FLOPS; * sprof[0].pr_scale = 0x10000; * // Second buffer * sprof[1].pr_base = profbuf2; * sprof[1].pr_size = length; * sprof[1].pr_off = (caddr_t) DO_READS; * sprof[1].pr_scale = 0x10000; * // Overflow bucket * sprof[2].pr_base = profbucket; * sprof[2].pr_size = 1; * sprof[2].pr_off = 0; * sprof[2].pr_scale = 0x0002; * retval = PAPI_sprofil(sprof, EventSet, PAPI_FP_INS, 1000000, * PAPI_PROFIL_POSIX | PAPI_PROFIL_BUCKET_16)) != PAPI_OK) * if ( retval != PAPI_OK ) handle_error( retval ); *
See Also:
PAPI_get_executable_info
PAPI_profil
Generated automatically by Doxygen for PAPI from the source code.
Thu Feb 27 2020 | Version 6.0.0.0 |