21#pragma GCC visibility push(default)
30#ifdef FORTRANUNDERSCORE
31#define PAPI_FCALL(function,caps,args) void function##_ args
32#elif FORTRANDOUBLEUNDERSCORE
33#define PAPI_FCALL(function,caps,args) void function##__ args
35#define PAPI_FCALL(function,caps,args) void caps args
37#define PAPI_FCALL(function,caps,args) void function args
41#if defined(_AIX) || defined(sun) || defined(linux)
42#define _FORTRAN_STRLEN_AT_END
49#if defined(_FORTRAN_STRLEN_AT_END)
50static void Fortran2cstring(
char *cstring,
char *Fstring,
int clen ,
int Flen )
55 slen = Flen < clen ? Flen : clen;
56 strncpy( cstring, Fstring, (
size_t ) slen );
59 for (
i = slen - 1;
i > -1 && cstring[
i] ==
' '; cstring[
i--] =
'\0' );
62 cstring[clen - 1] =
'\0';
110#if defined(_FORTRAN_STRLEN_AT_END)
112 (
int *
EventSet,
char *EventName,
int *
check,
int Event_len ) )
218 (
long long *dest,
int *
check ) )
236#if defined(_FORTRAN_STRLEN_AT_END)
238 (
char *fullname,
char *
name,
long long *text_start,
239 long long *text_end,
long long *data_start,
long long *data_end,
240 long long *bss_start,
long long *bss_end,
241 int *
check,
int fullname_len,
int name_len ) )
244 (
char *fullname,
char *
name,
long long *text_start,
245 long long *text_end,
long long *data_start,
long long *data_end,
246 long long *bss_start,
long long *bss_end,
int *
check ) )
256#if defined(_FORTRAN_STRLEN_AT_END)
260 fullname[
i++] =
' ' );
289#if defined(_FORTRAN_STRLEN_AT_END)
320 if ( hwinfo == NULL ) {
329 *ncpu = hwinfo->
ncpu;
336#if defined(_FORTRAN_STRLEN_AT_END)
337 strncpy( vendor_str, hwinfo->
vendor_string, (
size_t ) vendor_len );
339 vendor_str[
i++] =
' ' );
340 strncpy( model_str, hwinfo->
model_string, (
size_t ) model_len );
342 model_str[
i++] =
' ' );
382 (
int *
cidx,
int *num ) )
557 (
unsigned long int ( *
handle ) (
void ),
int *
check ) )
635#if defined(_FORTRAN_STRLEN_AT_END)
644#if defined(_FORTRAN_STRLEN_AT_END)
673 (
int *EventCode,
int *
check ) )
688#if defined(_FORTRAN_STRLEN_AT_END)
690 (
char *EventName,
int *
check,
int Event_len ) )
698 (
char *EventName,
int *
check ) )
716#if defined(_FORTRAN_STRLEN_AT_END)
718 (
int *EventCode,
char *symbol,
char *long_descr,
char *short_descr,
719 int *
count,
char *event_note,
int *flags,
int *
check,
720 int symbol_len,
int long_descr_len,
int short_descr_len,
721 int event_note_len ) )
724 (
int *EventCode,
char *symbol,
char *long_descr,
char *short_descr,
725 int *
count,
char *event_note,
int *flags,
int *
check ) )
730#if defined(_FORTRAN_STRLEN_AT_END)
733 strncpy( symbol, info.
symbol, (
size_t ) symbol_len );
734 for (
i = (
int ) strlen( info.
symbol );
i < symbol_len;
736 strncpy( long_descr, info.
long_descr, (
size_t ) long_descr_len );
737 for (
i = (
int ) strlen( info.
long_descr );
i < long_descr_len;
738 long_descr[
i++] =
' ' );
739 strncpy( short_descr, info.
short_descr, (
size_t ) short_descr_len );
740 for (
i = (
int ) strlen( info.
short_descr );
i < short_descr_len;
741 short_descr[
i++] =
' ' );
747 strncpy( event_note, info.
note, (
size_t ) event_note_len );
748 note_len=strlen(info.
note);
750 for (
i = note_len;
i < event_note_len;
751 event_note[
i++] =
' ' );
761 strncpy( event_note, info.
note,
778#if defined(_FORTRAN_STRLEN_AT_END)
780 (
int *EventCode,
char *out_str,
int *
check,
int out_len ) )
783 (
int *EventCode,
char *out,
int *
check ) )
786#if defined(_FORTRAN_STRLEN_AT_END)
791 strncpy( out_str,
tmp, (
size_t ) out_len );
793 for (
i = (
int ) strlen(
tmp );
i < out_len; out_str[
i++] =
' ' );
810#if defined(_FORTRAN_STRLEN_AT_END)
812 (
char *in_str,
int *out,
int *
check,
int in_len ) )
815 (
char *in,
int *out,
int *
check ) )
818#if defined(_FORTRAN_STRLEN_AT_END)
824 strncpy( tmpin, in_str, (
size_t ) slen );
827 for (
i = slen - 1;
i > -1 && tmpin[
i] ==
' '; tmpin[
i--] =
'\0' );
867 (
int *EventCode,
int *modifier,
int *
check ) )
930#if defined(_FORTRAN_STRLEN_AT_END)
932 (
int *
EventSet,
char *EventName,
int *
check,
int Event_len ) )
1018 (
int *domain,
int *
cidx,
int *
check ) )
1034 (
int *granularity,
int *
check ) )
1050 (
int *granularity,
int *
cidx,
int *
check ) )
1197#if defined(_FORTRAN_STRLEN_AT_END)
1199 (
char *lib_preload_env,
int *
check,
int lib_preload_env_len ) )
1202 (
char *lib_preload_env,
int *
check ) )
1206#if defined(_FORTRAN_STRLEN_AT_END)
1211 (
size_t ) lib_preload_env_len );
1213 i < lib_preload_env_len; lib_preload_env[
i++] =
' ' );
1233 (
int *eventset,
int *granularity,
int *mode,
int *
check ) )
1261 (
int *eventset,
int *domain,
int *mode,
int *
check ) )
1301 (
int *es,
int *domain,
int *
check ) )
1339 (
float *rtime,
float *ptime,
long long *ins,
float *ipc,
1356 (
int event,
float *rtime,
float *ptime,
1357 long long *ref,
long long *core,
long long *evt,
float *epc,
1360 *
check =
PAPI_epc( event, rtime, ptime, ref, core, evt, epc );
1374 (
int event,
float *real_time,
float *proc_time,
long long *flpins,
1375 float *mflips,
int *
check ) )
1391 (
int event,
float *real_time,
float *proc_time,
long long *flpops,
1392 float *mflops,
int *
check ) )
1442#if defined(_FORTRAN_STRLEN_AT_END)
1457 const char *string_ptr;
1464 switch(*attribute) {
1478#if defined(_FORTRAN_STRLEN_AT_END)
1479 strncpy(
string, string_ptr, string_len);
1481 string[
i++] =
' ' );
1483 strcpy(
string, string_ptr);
1485 string[
i++] =
' ' );
1506#if defined(_FORTRAN_STRLEN_AT_END)
1524 const char *string_ptr;
1530 switch(*attribute) {
1601#if defined(_FORTRAN_STRLEN_AT_END)
1602 strncpy(
string, string_ptr, (
size_t) string_len);
1604 string[
i++] =
' ' );
1606 strcpy(
string, string_ptr);
1608 string[
i++] =
' ' );
1671#if defined(_FORTRAN_STRLEN_AT_END)
1673 (
char*
name,
int *
check,
int Event_len ) )
1740#if defined(_FORTRAN_STRLEN_AT_END)
1742 (
char*
name,
int *
check,
int Event_len ) )
1803#if defined(_FORTRAN_STRLEN_AT_END)
1805 (
char*
name,
int *
check,
int Event_len ) )
1871#pragma GCC visibility pop
static papi_handle_t handle
static int Event[MAX_EVENTS]
Return the number of hardware counters on the specified component.
Return the number of hardware counters on the cpu.
Unlock one of the mutex variables defined in papi.h.
Accumulate and reset counters in an EventSet.
add PAPI preset or native hardware event to an event set
add multiple PAPI presets or native hardware events to an event set
add PAPI preset or native hardware event by name to an EventSet
Assign a component index to an existing but empty EventSet.
Empty and destroy an EventSet.
Create a new empty PAPI EventSet.
Empty and destroy an EventSet.
returns handle of next device type
Enumerate PAPI preset or native events.
Simplified call to get arbitrary events per cycle, real and processor time.
Convert a numeric hardware event code to a name.
Convert a name to a numeric hardware event code.
Simplified call to get Mflips/s (floating point instruction rate), real and processor time.
Simplified call to get Mflops/s (floating point operation rate), real and processor time.
returns device attributes
returns device type attributes
Get information about the dynamic memory usage of the current program.
Get the event's name and description info.
get information about the system hardware
Get the multiplexing status of specified event set.
Get PAPI library or event set options.
get real time counter value in clock cycles Returns the total real time passed since some arbitrary s...
Get real time counter value in nanoseconds.
get real time counter value in microseconds
get virtual time counter value in clock cycles
get virtual time counter values in microseconds
Read performance events inside of a region and store the difference to the corresponding beginning of...
Read performance events at the beginning of a region.
Read performance events at the end of a region and store the difference to the corresponding beginnin...
Stop a running high-level event set.
Simplified call to get instructions per cycle, real and processor time.
initialize the PAPI library.
list the events in an event set
Lock one of two mutex variables defined in papi.h.
Initialize multiplex support in the PAPI library.
Return the number of hardware counters for the specified component.
Return the number of events in an event set.
Return the number of hardware counters on the cpu.
Produces a string on standard error, describing the last library error.
Query if PAPI event exists.
Query if a named PAPI event exists.
Stop a running event set of a rate function.
Read hardware counters with a timestamp.
Read hardware counters from an event set.
Notify PAPI that a thread has 'appeared'.
removes a hardware event from a PAPI event set.
Remove an array of hardware event codes from a PAPI event set.
removes a named hardware event from a PAPI event set.
Reset the hardware event counts in an event set.
Set the default counting domain for new event sets bound to the specified component.
Set the default counting granularity for eventsets bound to the specified component.
Set the current debug level for error output from PAPI.
Set the default counting domain for new event sets bound to the cpu component.
Set the default counting granularity for eventsets bound to the cpu component.
Convert a standard event set to a multiplexed event set.
Set PAPI library or event set options.
Finish using PAPI and free all related resources.
Start counting hardware events in an event set.
Return the counting state of an EventSet.
Stop counting hardware events in an event set.
Get the thread identifier of the current thread.
Initialize thread support in the PAPI library.
Unlock one of the mutex variables defined in papi.h.
Notify PAPI that a thread has 'disappeared'.
Write counter values into counters.
#define PAPI_DEV_ATTR__ROCM_UINT_WG_DIM_Y
#define PAPI_DEV_ATTR__CUDA_UINT_THR_PER_BLK
#define PAPI_DEV_ATTR__CUDA_UINT_WARP_SIZE
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_LINE_COUNT
#define PAPI_DEV_ATTR__ROCM_UINT_GRD_DIM_Y
#define PAPI_DEV_ATTR__ROCM_UINT_WAVE_PER_CU
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_PER_SM
#define PAPI_DEV_ATTR__CUDA_ULONG_UID
#define PAPI_DEV_ATTR__CPU_UINT_FAMILY
#define PAPI_DEV_ATTR__CPU_UINT_SOCKET_COUNT
#define PAPI_DEV_TYPE_ATTR__INT_PAPI_ID
#define PAPI_DEV_ATTR__CPU_UINT_THR_PER_NUMA
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_LINE_SIZE
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_DIM_Z
#define PAPI_DEV_ATTR__ROCM_UINT_WAVEFRONT_SIZE
#define PAPI_DEV_ATTR__CUDA_UINT_UNIFIED_ADDR
#define PAPI_DEV_ATTR__CUDA_UINT_SM_COUNT
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_ASSOC
#define PAPI_DEV_ATTR__CUDA_UINT_GRD_DIM_Y
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_SIZE
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_LINE_SIZE
#define PAPI_DEV_ATTR__CPU_UINT_THREAD_COUNT
#define PAPI_DEV_TYPE_ATTR__INT_COUNT
#define PAPI_DEV_ATTR__CPU_UINT_NUMA_COUNT
#define PAPI_DEV_TYPE_ATTR__INT_VENDOR_ID
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_LINE_COUNT
#define PAPI_DEV_ATTR__CUDA_UINT_MANAGED_MEM
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_SIZE
#define PAPI_DEV_ATTR__ROCM_UINT_COMP_CAP_MINOR
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_SIZE
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_DIM_Y
#define PAPI_DEV_ATTR__ROCM_CHAR_DEVICE_NAME
#define PAPI_DEV_ATTR__CUDA_UINT_SHM_PER_BLK
#define PAPI_DEV_ATTR__ROCM_UINT_WORKGROUP_SIZE
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_LINE_COUNT
#define PAPI_DEV_ATTR__ROCM_UINT_COMP_CAP_MAJOR
#define PAPI_DEV_ATTR__CPU_CHAR_NAME
#define PAPI_DEV_ATTR__CUDA_UINT_GRD_DIM_X
#define PAPI_DEV_ATTR__ROCM_ULONG_UID
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_LINE_COUNT
#define PAPI_DEV_TYPE_ATTR__CHAR_NAME
#define PAPI_DEV_ATTR__CUDA_UINT_MEMCPY_OVERLAP
#define PAPI_DEV_ATTR__ROCM_UINT_SHM_PER_WG
#define PAPI_DEV_ATTR__CUDA_UINT_COMP_CAP_MINOR
#define PAPI_DEV_ATTR__CUDA_UINT_MAP_HOST_MEM
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_ASSOC
#define PAPI_DEV_ATTR__CUDA_UINT_SHM_PER_SM
#define PAPI_DEV_ATTR__CPU_UINT_STEPPING
#define PAPI_DEV_ATTR__ROCM_UINT_CU_COUNT
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_DIM_X
#define PAPI_DEV_ATTR__ROCM_UINT_SIMD_PER_CU
#define PAPI_DEV_ATTR__ROCM_UINT_WG_DIM_X
#define PAPI_DEV_ATTR__CUDA_UINT_MULTI_KERNEL
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_ASSOC
#define PAPI_DEV_ATTR__CUDA_UINT_GRD_DIM_Z
#define PAPI_DEV_ATTR__ROCM_UINT_GRD_DIM_X
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_SIZE
#define PAPI_DEV_ATTR__CPU_UINT_MODEL
#define PAPI_DEV_ATTR__ROCM_UINT_WG_DIM_Z
#define PAPI_DEV_ATTR__ROCM_UINT_GRD_DIM_Z
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_LINE_SIZE
#define PAPI_DEV_ATTR__CPU_UINT_CORE_COUNT
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_ASSOC
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_LINE_SIZE
#define PAPI_DEV_ATTR__CUDA_CHAR_DEVICE_NAME
#define PAPI_DEV_TYPE_ATTR__CHAR_STATUS
#define PAPI_DEV_ATTR__CUDA_UINT_COMP_CAP_MAJOR
static long long values[NUM_EVENTS]
Return codes and api definitions.
static void * sysdetect_fort_handle
#define PAPI_FCALL(function, caps, args)
static void Fortran2cstring(char *cstring, char *Fstring, int clen, int Flen)
char name[PAPI_HUGE_STR_LEN]
A pointer to the following is passed to PAPI_get_dmem_info()
char note[PAPI_HUGE_STR_LEN]
char short_descr[PAPI_MIN_STR_LEN]
char symbol[PAPI_HUGE_STR_LEN]
char long_descr[PAPI_HUGE_STR_LEN]
char fullname[PAPI_HUGE_STR_LEN]
PAPI_address_map_t address_info
char vendor_string[PAPI_MAX_STR_LEN]
char model_string[PAPI_MAX_STR_LEN]
char lib_preload_env[PAPI_MAX_STR_LEN]
A pointer to the following is passed to PAPI_set/get_opt()
PAPI_preload_info_t preload
PAPI_granularity_option_t granularity
PAPI_domain_option_t domain
PAPI_exe_info_t * exe_info
void PAPIF_STOP(int *EventSet, long long *values, int *check)
void PAPIF_HL_REGION_BEGIN(char *name, int *check, int Event_len)
void PAPIF_NUM_EVENTS(int *EventCode, int *count)
void PAPIF_RATE_STOP(int *check)
void PAPIF_GET_PRELOAD(char *lib_preload_env, int *check, int lib_preload_env_len)
void PAPIF_HL_REGION_END(char *name, int *check, int Event_len)
void PAPIF_UNREGISTER_THREAD(int *check)
void PAPIF_SHUTDOWN(void)
void PAPIF_GET_DOMAIN(int *eventset, int *domain, int *mode, int *check)
void PAPIF_STATE(int *EventSet, int *status, int *check)
void PAPIF_EVENT_CODE_TO_NAME(int *EventCode, char *out_str, int *check, int out_len)
void PAPIF_IS_INITIALIZED(int *level)
void PAPIF_LOCK(int *lock, int *check)
void PAPIF_FLOPS_RATE(int event, float *real_time, float *proc_time, long long *flpops, float *mflops, int *check)
void PAPIF_ENUM_DEV_TYPE(int *modifier, int *handle_index, int *check)
void PAPIF_LIST_EVENTS(int *EventSet, int *Events, int *number, int *check)
void PAPIF_REMOVE_NAMED_EVENT(int *EventSet, char *EventName, int *check, int Event_len)
void PAPIF_SET_CMP_GRANULARITY(int *granularity, int *cidx, int *check)
void PAPIF_GET_DMEM_INFO(long long *dest, int *check)
void PAPIF_EPC(int event, float *rtime, float *ptime, long long *ref, long long *core, long long *evt, float *epc, int *check)
void PAPIF_GET_DEV_TYPE_ATTR(int *handle_index, int *attribute, int *value, char *string, int *check, int string_len)
void PAPIF_GET_REAL_USEC(long long *time)
void PAPIF_GET_EXE_INFO(char *fullname, char *name, long long *text_start, long long *text_end, long long *data_start, long long *data_end, long long *bss_start, long long *bss_end, int *check, int fullname_len, int name_len)
void PAPIF_GET_HARDWARE_INFO(int *ncpu, int *nnodes, int *totalcpus, int *vendor, char *vendor_str, int *model, char *model_str, float *revision, float *mhz, int vendor_len, int model_len)
void PAPIF_HL_STOP(int *check)
void PAPIF_LIBRARY_INIT(int *check)
void PAPIF_ASSIGN_EVENTSET_COMPONENT(int *EventSet, int *cidx, int *check)
void PAPIF_WRITE(int *EventSet, long long *values, int *check)
void PAPIF_GET_VIRT_USEC(long long *time)
void PAPIF_EVENT_NAME_TO_CODE(char *in_str, int *out, int *check, int in_len)
void PAPIF_FLIPS_RATE(int event, float *real_time, float *proc_time, long long *flpins, float *mflips, int *check)
void PAPIF_GET_CLOCKRATE(int *cr)
void PAPIF_GET_GRANULARITY(int *eventset, int *granularity, int *mode, int *check)
void PAPIF_THREAD_ID(unsigned long *id)
void PAPIF_SET_DOMAIN(int *domain, int *check)
void PAPIF_RESET(int *EventSet, int *check)
void PAPIF_SET_CMP_DOMAIN(int *domain, int *cidx, int *check)
void PAPIF_REGISTER_THREAD(int *check)
void PAPIF_GET_VIRT_CYC(long long *virt_cyc)
void PAPIF_ADD_EVENTS(int *EventSet, int *Events, int *number, int *check)
void PAPIF_READ_TS(int *EventSet, long long *values, long long *cycles, int *check)
void PAPIF_ACCUM(int *EventSet, long long *values, int *check)
void PAPIF_CLEANUP_EVENTSET(int *EventSet, int *check)
void PAPIF_THREAD_INIT(unsigned long int(*handle)(void), int *check)
void PAPIF_START(int *EventSet, int *check)
void PAPIF_QUERY_NAMED_EVENT(char *EventName, int *check, int Event_len)
void PAPIF_GET_DEV_ATTR(int *handle_index, int *id, int *attribute, int *value, char *string, int *check, int string_len)
void PAPIF_REMOVE_EVENTS(int *EventSet, int *Events, int *number, int *check)
void PAPIF_REMOVE_EVENT(int *EventSet, int *Event, int *check)
void PAPIF_QUERY_EVENT(int *EventCode, int *check)
void PAPIF_IPC(float *rtime, float *ptime, long long *ins, float *ipc, int *check)
void PAPIF_GET_REAL_NSEC(long long *time)
void PAPIF_MULTIPLEX_INIT(int *check)
void PAPIF_GET_REAL_CYC(long long *real_cyc)
void PAPIF_GET_EVENT_INFO(int *EventCode, char *symbol, char *long_descr, char *short_descr, int *count, char *event_note, int *flags, int *check, int symbol_len, int long_descr_len, int short_descr_len, int event_note_len)
void PAPIF_GET_MULTIPLEX(int *EventSet, int *check)
void PAPIF_DESTROY_EVENTSET(int *EventSet, int *check)
void PAPIF_READ(int *EventSet, long long *values, int *check)
void PAPIF_SET_DEBUG(int *debug, int *check)
void PAPIF_ADD_NAMED_EVENT(int *EventSet, char *EventName, int *check, int Event_len)
void PAPIF_SET_EVENT_DOMAIN(int *es, int *domain, int *check)
void PAPIF_CREATE_EVENTSET(int *EventSet, int *check)
void PAPIF_PERROR(char *message, int message_len)
void PAPIF_SET_INHERIT(int *inherit, int *check)
void PAPIF_HL_READ(char *name, int *check, int Event_len)
void PAPIF_ENUM_EVENT(int *EventCode, int *modifier, int *check)
void PAPIF_ADD_EVENT(int *EventSet, int *Event, int *check)
void PAPIF_SET_MULTIPLEX(int *EventSet, int *check)
void PAPIF_SET_GRANULARITY(int *granularity, int *check)
void PAPIF_UNREGSTER_THREAD(int *check)