PAPI 7.1.0.0
Loading...
Searching...
No Matches
papi_fwrappers.c
Go to the documentation of this file.
1/****************************/
2/* THIS IS OPEN SOURCE CODE */
3/****************************/
4
5/*
6* File: papi_fwrappers.c
7* Author: Philip Mucci
8* mucci@cs.utk.edu
9* Mods: Nils Smeds
10* smeds@pdc.kth.se
11* Anders Nilsson
12* anni@pdc.kth.se
13* Kevin London
14* london@cs.utk.edu
15* dan terpstra
16* terpstra@cs.utk.edu
17* Min Zhou
18* min@cs.utk.edu
19*/
20
21#pragma GCC visibility push(default)
22
23#include <stdio.h>
24#include <assert.h>
25#include <string.h>
26#include "papi.h"
27
28/* Lets use defines to rename all the files */
29
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
34#elif FORTRANCAPS
35#define PAPI_FCALL(function,caps,args) void caps args
36#else
37#define PAPI_FCALL(function,caps,args) void function args
38#endif
39
40/* Many Unix systems passes Fortran string lengths as extra arguments */
41#if defined(_AIX) || defined(sun) || defined(linux)
42#define _FORTRAN_STRLEN_AT_END
43#endif
44/* The Low Level Wrappers */
45
48/* helper routine to convert Fortran strings to C strings */
49#if defined(_FORTRAN_STRLEN_AT_END)
50static void Fortran2cstring( char *cstring, char *Fstring, int clen , int Flen )
51{
52 int slen, i;
53
54 /* What is the maximum number of chars to copy ? */
55 slen = Flen < clen ? Flen : clen;
56 strncpy( cstring, Fstring, ( size_t ) slen );
57
58 /* Remove trailing blanks from initial Fortran string */
59 for ( i = slen - 1; i > -1 && cstring[i] == ' '; cstring[i--] = '\0' );
60
61 /* Make sure string is NULL terminated */
62 cstring[clen - 1] = '\0';
63 if ( slen < clen )
64 cstring[slen] = '\0';
65}
66#endif
67
78PAPI_FCALL( papif_accum, PAPIF_ACCUM,
79 ( int *EventSet, long long *values, int *check ) )
80{
82}
83
94PAPI_FCALL( papif_add_event, PAPIF_ADD_EVENT,
95 ( int *EventSet, int *Event, int *check ) )
96{
98}
99
110#if defined(_FORTRAN_STRLEN_AT_END)
111PAPI_FCALL( papif_add_named_event, PAPIF_ADD_NAMED_EVENT,
112 ( int *EventSet, char *EventName, int *check, int Event_len ) )
113{
114 char tmp[PAPI_MAX_STR_LEN];
115 Fortran2cstring( tmp, EventName, PAPI_MAX_STR_LEN, Event_len );
117}
118#else
119PAPI_FCALL( papif_add_named_event, PAPIF_ADD_NAMED_EVENT,
120 ( int *EventSet, char *EventName, int *check ) )
121{
122 *check = PAPI_add_named_event( *EventSet, EventName );
123}
124#endif
125
136PAPI_FCALL( papif_add_events, PAPIF_ADD_EVENTS,
137 ( int *EventSet, int *Events, int *number, int *check ) )
138{
139 *check = PAPI_add_events( *EventSet, Events, *number );
140}
141
152PAPI_FCALL( papif_cleanup_eventset, PAPIF_CLEANUP_EVENTSET,
153 ( int *EventSet, int *check ) )
154{
156}
157
168PAPI_FCALL( papif_create_eventset, PAPIF_CREATE_EVENTSET,
169 ( int *EventSet, int *check ) )
170{
172}
173
184PAPI_FCALL( papif_assign_eventset_component, PAPIF_ASSIGN_EVENTSET_COMPONENT,
185 ( int *EventSet, int *cidx, int *check ) )
186{
188}
189
200PAPI_FCALL( papif_destroy_eventset, PAPIF_DESTROY_EVENTSET,
201 ( int *EventSet, int *check ) )
202{
204}
205
216 /* XXX This looks totally broken. Should be passed all the members of the dmem_info struct. */
217PAPI_FCALL( papif_get_dmem_info, PAPIF_GET_DMEM_INFO,
218 ( long long *dest, int *check ) )
219{
221}
222
236#if defined(_FORTRAN_STRLEN_AT_END)
237PAPI_FCALL( papif_get_exe_info, PAPIF_GET_EXE_INFO,
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 ) )
242#else
243PAPI_FCALL( papif_get_exe_info, PAPIF_GET_EXE_INFO,
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 ) )
247#endif
248{
250/* WARNING: The casts from vptr_t to long below WILL BREAK on systems with
251 64-bit addresses. I did it here because I was lazy. And because I wanted
252 to get rid of those pesky gcc warnings. If you find a 64-bit system,
253 conditionalize the cast with (yet another) #ifdef...
254*/
255 if ( ( *check = PAPI_get_opt( PAPI_EXEINFO, &e ) ) == PAPI_OK ) {
256#if defined(_FORTRAN_STRLEN_AT_END)
257 int i;
258 strncpy( fullname, e.exe_info->fullname, ( size_t ) fullname_len );
259 for ( i = ( int ) strlen( e.exe_info->fullname ); i < fullname_len;
260 fullname[i++] = ' ' );
261 strncpy( name, e.exe_info->address_info.name, ( size_t ) name_len );
262 for ( i = ( int ) strlen( e.exe_info->address_info.name ); i < name_len;
263 name[i++] = ' ' );
264#else
265 strncpy( fullname, e.exe_info->fullname, PAPI_MAX_STR_LEN );
267#endif
268 *text_start = ( long ) e.exe_info->address_info.text_start;
269 *text_end = ( long ) e.exe_info->address_info.text_end;
270 *data_start = ( long ) e.exe_info->address_info.data_start;
271 *data_end = ( long ) e.exe_info->address_info.data_end;
272 *bss_start = ( long ) e.exe_info->address_info.bss_start;
273 *bss_end = ( long ) e.exe_info->address_info.bss_end;
274 }
275}
276
289#if defined(_FORTRAN_STRLEN_AT_END)
290PAPI_FCALL( papif_get_hardware_info, PAPIF_GET_HARDWARE_INFO, ( int *ncpu,
291 int *nnodes,
292 int *totalcpus,
293 int *vendor,
294 char
295 *vendor_str,
296 int *model,
297 char *model_str,
298 float *revision,
299 float *mhz,
300 int vendor_len,
301 int
302 model_len ) )
303#else
304PAPI_FCALL( papif_get_hardware_info, PAPIF_GET_HARDWARE_INFO, ( int *ncpu,
305 int *nnodes,
306 int *totalcpus,
307 int *vendor,
308 char
309 *vendor_string,
310 int *model,
311 char
312 *model_string,
313 float *revision,
314 float *mhz ) )
315#endif
316{
317 const PAPI_hw_info_t *hwinfo;
318 int i;
319 hwinfo = PAPI_get_hardware_info( );
320 if ( hwinfo == NULL ) {
321 *ncpu = 0;
322 *nnodes = 0;
323 *totalcpus = 0;
324 *vendor = 0;
325 *model = 0;
326 *revision = 0;
327 *mhz = 0;
328 } else {
329 *ncpu = hwinfo->ncpu;
330 *nnodes = hwinfo->nnodes;
331 *totalcpus = hwinfo->totalcpus;
332 *vendor = hwinfo->vendor;
333 *model = hwinfo->model;
334 *revision = hwinfo->revision;
335 *mhz = hwinfo->cpu_max_mhz;
336#if defined(_FORTRAN_STRLEN_AT_END)
337 strncpy( vendor_str, hwinfo->vendor_string, ( size_t ) vendor_len );
338 for ( i = ( int ) strlen( hwinfo->vendor_string ); i < vendor_len;
339 vendor_str[i++] = ' ' );
340 strncpy( model_str, hwinfo->model_string, ( size_t ) model_len );
341 for ( i = ( int ) strlen( hwinfo->model_string ); i < model_len;
342 model_str[i++] = ' ' );
343#else
344 (void)i; /* unused... */
345 /* This case needs the passed strings to be of sufficient size *
346 * and will include the NULL character in the target string */
347 strcpy( vendor_string, hwinfo->vendor_string );
348 strcpy( model_string, hwinfo->model_string );
349#endif
350 }
351 return;
352}
353
365PAPI_FCALL( papif_num_hwctrs, PAPIF_num_hwctrs, ( int *num ) )
366{
367 *num = PAPI_num_hwctrs( );
368}
369
381PAPI_FCALL( papif_num_cmp_hwctrs, PAPIF_num_cmp_hwctrs,
382 ( int *cidx, int *num ) )
383{
384 *num = PAPI_num_cmp_hwctrs( *cidx );
385}
386
397PAPI_FCALL( papif_get_real_cyc, PAPIF_GET_REAL_CYC, ( long long *real_cyc ) )
398{
399 *real_cyc = PAPI_get_real_cyc( );
400}
401
412PAPI_FCALL( papif_get_real_usec, PAPIF_GET_REAL_USEC, ( long long *time ) )
413{
414 *time = PAPI_get_real_usec( );
415}
416
427PAPI_FCALL( papif_get_real_nsec, PAPIF_GET_REAL_NSEC, ( long long *time ) )
428{
429 *time = PAPI_get_real_nsec( );
430}
431
442PAPI_FCALL( papif_get_virt_cyc, PAPIF_GET_VIRT_CYC, ( long long *virt_cyc ) )
443{
444 *virt_cyc = PAPI_get_virt_cyc( );
445}
446
457PAPI_FCALL( papif_get_virt_usec, PAPIF_GET_VIRT_USEC, ( long long *time ) )
458{
459 *time = PAPI_get_virt_usec( );
460}
461
472PAPI_FCALL( papif_is_initialized, PAPIF_IS_INITIALIZED, ( int *level ) )
473{
474 *level = PAPI_is_initialized( );
475}
476
487PAPI_FCALL( papif_library_init, PAPIF_LIBRARY_INIT, ( int *check ) )
488{
490}
491
502PAPI_FCALL( papif_thread_id, PAPIF_THREAD_ID, ( unsigned long *id ) )
503{
504 *id = PAPI_thread_id( );
505}
506
517PAPI_FCALL( papif_register_thread, PAPIF_REGISTER_THREAD, ( int *check ) )
518{
520}
521
532PAPI_FCALL( papif_unregister_thread, PAPIF_UNREGISTER_THREAD, ( int *check ) )
533{
535}
536
537/* There was a long (10+ years!) typo that was not noticed here */
538/* Leaving it here as not to break any existing code out there */
539
540PAPI_FCALL( papif_unregster_thread, PAPIF_UNREGSTER_THREAD, ( int *check ) )
541{
543}
544
555/* This must be passed an EXTERNAL or INTRINISIC FUNCTION not a SUBROUTINE */
556PAPI_FCALL( papif_thread_init, PAPIF_THREAD_INIT,
557 ( unsigned long int ( *handle ) ( void ), int *check ) )
558{
560}
561
572PAPI_FCALL( papif_list_events, PAPIF_LIST_EVENTS,
573 ( int *EventSet, int *Events, int *number, int *check ) )
574{
575 *check = PAPI_list_events( *EventSet, Events, number );
576}
577
588PAPI_FCALL( papif_multiplex_init, PAPIF_MULTIPLEX_INIT, ( int *check ) )
589{
591}
592
603PAPI_FCALL( papif_get_multiplex, PAPIF_GET_MULTIPLEX,
604 ( int *EventSet, int *check ) )
605{
607}
608
619PAPI_FCALL( papif_set_multiplex, PAPIF_SET_MULTIPLEX,
620 ( int *EventSet, int *check ) )
621{
623}
624
635#if defined(_FORTRAN_STRLEN_AT_END)
636PAPI_FCALL( papif_perror, PAPIF_PERROR,
637 ( char *message,
638 int message_len ) )
639#else
641 ( char *message ) )
642#endif
643{
644#if defined(_FORTRAN_STRLEN_AT_END)
645 char tmp[PAPI_MAX_STR_LEN];
646 Fortran2cstring( tmp, message, PAPI_MAX_STR_LEN, message_len );
647
648 PAPI_perror( tmp );
649#else
650 PAPI_perror( message );
651#endif
652}
653
654/* This will not work until Fortran2000 :)
655 * PAPI_FCALL(papif_profil, PAPIF_PROFIL, (unsigned short *buf, unsigned *bufsiz, unsigned long *offset, unsigned *scale, unsigned *eventset,
656 * unsigned *eventcode, unsigned *threshold, unsigned *flags, unsigned *check))
657 * {
658 * *check = PAPI_profil(buf, *bufsiz, *offset, *scale, *eventset, *eventcode, *threshold, *flags);
659 * }
660 */
661
672PAPI_FCALL( papif_query_event, PAPIF_QUERY_EVENT,
673 ( int *EventCode, int *check ) )
674{
675 *check = PAPI_query_event( *EventCode );
676}
677
688#if defined(_FORTRAN_STRLEN_AT_END)
689PAPI_FCALL( papif_query_named_event, PAPIF_QUERY_NAMED_EVENT,
690 ( char *EventName, int *check, int Event_len ) )
691{
692 char tmp[PAPI_MAX_STR_LEN];
693 Fortran2cstring( tmp, EventName, PAPI_MAX_STR_LEN, Event_len );
695}
696#else
697PAPI_FCALL( papif_query_named_event, PAPIF_QUERY_NAMED_EVENT,
698 ( char *EventName, int *check ) )
699{
700 *check = PAPI_query_named_event( EventName );
701}
702#endif
703
716#if defined(_FORTRAN_STRLEN_AT_END)
717PAPI_FCALL( papif_get_event_info, PAPIF_GET_EVENT_INFO,
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 ) )
722#else
723PAPI_FCALL( papif_get_event_info, PAPIF_GET_EVENT_INFO,
724 ( int *EventCode, char *symbol, char *long_descr, char *short_descr,
725 int *count, char *event_note, int *flags, int *check ) )
726#endif
727{
729 ( void ) flags; /*Unused */
730#if defined(_FORTRAN_STRLEN_AT_END)
731 int i;
732 if ( ( *check = PAPI_get_event_info( *EventCode, &info ) ) == PAPI_OK ) {
733 strncpy( symbol, info.symbol, ( size_t ) symbol_len );
734 for ( i = ( int ) strlen( info.symbol ); i < symbol_len;
735 symbol[i++] = ' ' );
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++] = ' ' );
742
743 *count = ( int ) info.count;
744
745 int note_len=0;
746
747 strncpy( event_note, info.note, ( size_t ) event_note_len );
748 note_len=strlen(info.note);
749
750 for ( i = note_len; i < event_note_len;
751 event_note[i++] = ' ' );
752 }
753#else
754/* printf("EventCode: %d\n", *EventCode ); -KSL */
755 if ( ( *check = PAPI_get_event_info( *EventCode, &info ) ) == PAPI_OK ) {
756 strncpy( symbol, info.symbol, PAPI_MAX_STR_LEN );
757 strncpy( long_descr, info.long_descr, PAPI_MAX_STR_LEN );
758 strncpy( short_descr, info.short_descr, PAPI_MAX_STR_LEN );
759 *count = info.count;
760 if (info.note)
761 strncpy( event_note, info.note,
763 }
764/* printf("Check: %d\n", *check); -KSL */
765#endif
766}
767
778#if defined(_FORTRAN_STRLEN_AT_END)
779PAPI_FCALL( papif_event_code_to_name, PAPIF_EVENT_CODE_TO_NAME,
780 ( int *EventCode, char *out_str, int *check, int out_len ) )
781#else
782PAPI_FCALL( papif_event_code_to_name, PAPIF_EVENT_CODE_TO_NAME,
783 ( int *EventCode, char *out, int *check ) )
784#endif
785{
786#if defined(_FORTRAN_STRLEN_AT_END)
787 char tmp[PAPI_MAX_STR_LEN];
788 int i;
789 *check = PAPI_event_code_to_name( *EventCode, tmp );
790 /* tmp has \0 within PAPI_MAX_STR_LEN chars so strncpy is safe */
791 strncpy( out_str, tmp, ( size_t ) out_len );
792 /* overwrite any NULLs and trailing garbage in out_str */
793 for ( i = ( int ) strlen( tmp ); i < out_len; out_str[i++] = ' ' );
794#else
795 /* The array "out" passed by the user must be sufficiently long */
796 *check = PAPI_event_code_to_name( *EventCode, out );
797#endif
798}
799
810#if defined(_FORTRAN_STRLEN_AT_END)
811PAPI_FCALL( papif_event_name_to_code, PAPIF_EVENT_NAME_TO_CODE,
812 ( char *in_str, int *out, int *check, int in_len ) )
813#else
814PAPI_FCALL( papif_event_name_to_code, PAPIF_EVENT_NAME_TO_CODE,
815 ( char *in, int *out, int *check ) )
816#endif
817{
818#if defined(_FORTRAN_STRLEN_AT_END)
819 int slen, i;
820 char tmpin[PAPI_MAX_STR_LEN];
821
822 /* What is the maximum number of chars to copy ? */
823 slen = in_len < PAPI_MAX_STR_LEN ? in_len : PAPI_MAX_STR_LEN;
824 strncpy( tmpin, in_str, ( size_t ) slen );
825
826 /* Remove trailing blanks from initial Fortran string */
827 for ( i = slen - 1; i > -1 && tmpin[i] == ' '; tmpin[i--] = '\0' );
828
829 /* Make sure string is NULL terminated before call */
830 tmpin[PAPI_MAX_STR_LEN - 1] = '\0';
831 if ( slen < PAPI_MAX_STR_LEN )
832 tmpin[slen] = '\0';
833
834 *check = PAPI_event_name_to_code( tmpin, out );
835#else
836 /* This will have trouble if argument in is not null terminated */
837 *check = PAPI_event_name_to_code( in, out );
838#endif
839}
840
851PAPI_FCALL( papif_num_events, PAPIF_NUM_EVENTS, ( int *EventCode, int *count ) )
852{
853 *count = PAPI_num_events( *EventCode );
854}
855
866PAPI_FCALL( papif_enum_event, PAPIF_ENUM_EVENT,
867 ( int *EventCode, int *modifier, int *check ) )
868{
869 *check = PAPI_enum_event( EventCode, *modifier );
870}
871
883 ( int *EventSet, long long *values, int *check ) )
884{
886}
887
898PAPI_FCALL( papif_read_ts, PAPIF_READ_TS,
899 ( int *EventSet, long long *values, long long *cycles, int *check ) )
900{
901 *check = PAPI_read_ts( *EventSet, values, cycles );
902}
903
914PAPI_FCALL( papif_remove_event, PAPIF_REMOVE_EVENT,
915 ( int *EventSet, int *Event, int *check ) )
916{
918}
919
930#if defined(_FORTRAN_STRLEN_AT_END)
931PAPI_FCALL( papif_remove_named_event, PAPIF_REMOVE_NAMED_EVENT,
932 ( int *EventSet, char *EventName, int *check, int Event_len ) )
933{
934 char tmp[PAPI_MAX_STR_LEN];
935 Fortran2cstring( tmp, EventName, PAPI_MAX_STR_LEN, Event_len );
937}
938#else
939PAPI_FCALL( papif_remove_named_event, PAPIF_REMOVE_NAMED_EVENT,
940 ( int *EventSet, char *EventName, int *check ) )
941{
942 *check = PAPI_remove_named_event( *EventSet, EventName );
943}
944#endif
945
956PAPI_FCALL( papif_remove_events, PAPIF_REMOVE_EVENTS,
957 ( int *EventSet, int *Events, int *number, int *check ) )
958{
959 *check = PAPI_remove_events( *EventSet, Events, *number );
960}
961
972PAPI_FCALL( papif_reset, PAPIF_RESET, ( int *EventSet, int *check ) )
973{
975}
976
987PAPI_FCALL( papif_set_debug, PAPIF_SET_DEBUG, ( int *debug, int *check ) )
988{
989 *check = PAPI_set_debug( *debug );
990}
991
1002PAPI_FCALL( papif_set_domain, PAPIF_SET_DOMAIN, ( int *domain, int *check ) )
1003{
1004 *check = PAPI_set_domain( *domain );
1005}
1006
1017PAPI_FCALL( papif_set_cmp_domain, PAPIF_SET_CMP_DOMAIN,
1018 ( int *domain, int *cidx, int *check ) )
1019{
1020 *check = PAPI_set_cmp_domain( *domain, *cidx );
1021}
1022
1033PAPI_FCALL( papif_set_granularity, PAPIF_SET_GRANULARITY,
1034 ( int *granularity, int *check ) )
1035{
1036 *check = PAPI_set_granularity( *granularity );
1037}
1038
1049PAPI_FCALL( papif_set_cmp_granularity, PAPIF_SET_CMP_GRANULARITY,
1050 ( int *granularity, int *cidx, int *check ) )
1051{
1052 *check = PAPI_set_cmp_granularity( *granularity, *cidx );
1053}
1054
1065PAPI_FCALL( papif_shutdown, PAPIF_SHUTDOWN, ( void ) )
1066{
1067 PAPI_shutdown( );
1068}
1069
1080PAPI_FCALL( papif_start, PAPIF_START, ( int *EventSet, int *check ) )
1081{
1082 *check = PAPI_start( *EventSet );
1083}
1084
1096 ( int *EventSet, int *status, int *check ) )
1097{
1098 *check = PAPI_state( *EventSet, status );
1099}
1100
1112 ( int *EventSet, long long *values, int *check ) )
1113{
1115}
1116
1128 ( int *EventSet, long long *values, int *check ) )
1129{
1131}
1132
1144 ( int *lock, int *check ) )
1145{
1146 *check = PAPI_lock( *lock );
1147}
1148
1160 ( int *lock, int *check ) )
1161{
1162 *check = PAPI_unlock( *lock );
1163}
1164
1165
1166/* Fortran only APIs for get_opt and set_opt functionality */
1167
1180PAPI_FCALL( papif_get_clockrate, PAPIF_GET_CLOCKRATE, ( int *cr ) )
1181{
1182 *cr = PAPI_get_opt( PAPI_CLOCKRATE, (PAPI_option_t *) NULL );
1183}
1184
1197#if defined(_FORTRAN_STRLEN_AT_END)
1198PAPI_FCALL( papif_get_preload, PAPIF_GET_PRELOAD,
1199 ( char *lib_preload_env, int *check, int lib_preload_env_len ) )
1200#else
1201PAPI_FCALL( papif_get_preload, PAPIF_GET_PRELOAD,
1202 ( char *lib_preload_env, int *check ) )
1203#endif
1204{
1205 PAPI_option_t p;
1206#if defined(_FORTRAN_STRLEN_AT_END)
1207 int i;
1208
1209 if ( ( *check = PAPI_get_opt( PAPI_PRELOAD, &p ) ) == PAPI_OK ) {
1210 strncpy( lib_preload_env, p.preload.lib_preload_env,
1211 ( size_t ) lib_preload_env_len );
1212 for ( i = ( int ) strlen( p.preload.lib_preload_env );
1213 i < lib_preload_env_len; lib_preload_env[i++] = ' ' );
1214 }
1215#else
1216 if ( ( *check = PAPI_get_opt( PAPI_PRELOAD, &p ) ) == PAPI_OK ) {
1217 strncpy( lib_preload_env, p.preload.lib_preload_env, PAPI_MAX_STR_LEN );
1218 }
1219#endif
1220}
1221
1232PAPI_FCALL( papif_get_granularity, PAPIF_GET_GRANULARITY,
1233 ( int *eventset, int *granularity, int *mode, int *check ) )
1234{
1235 PAPI_option_t g;
1236
1237 if ( *mode == PAPI_DEFGRN ) {
1238 *granularity = PAPI_get_opt( *mode, &g );
1239 *check = PAPI_OK;
1240 } else if ( *mode == PAPI_GRANUL ) {
1241 g.granularity.eventset = *eventset;
1242 if ( ( *check = PAPI_get_opt( *mode, &g ) ) == PAPI_OK ) {
1243 *granularity = g.granularity.granularity;
1244 }
1245 } else {
1246 *check = PAPI_EINVAL;
1247 }
1248}
1249
1260PAPI_FCALL( papif_get_domain, PAPIF_GET_DOMAIN,
1261 ( int *eventset, int *domain, int *mode, int *check ) )
1262{
1263 PAPI_option_t d;
1264
1265 if ( *mode == PAPI_DEFDOM ) {
1266 *domain = PAPI_get_opt( *mode, (PAPI_option_t *) NULL );
1267 *check = PAPI_OK;
1268 } else if ( *mode == PAPI_DOMAIN ) {
1269 d.domain.eventset = *eventset;
1270 if ( ( *check = PAPI_get_opt( *mode, &d ) ) == PAPI_OK ) {
1271 *domain = d.domain.domain;
1272 }
1273 } else {
1274 *check = PAPI_EINVAL;
1275 }
1276}
1277
1278#if 0
1279PAPI_FCALL( papif_get_inherit, PAPIF_GET_INHERIT, ( int *inherit, int *check ) )
1280{
1282
1283 if ( ( *check = PAPI_get_opt( PAPI_INHERIT, &i ) ) == PAPI_OK ) {
1284 *inherit = i.inherit.inherit;
1285 }
1286}
1287#endif
1288
1300PAPI_FCALL( papif_set_event_domain, PAPIF_SET_EVENT_DOMAIN,
1301 ( int *es, int *domain, int *check ) )
1302{
1303 PAPI_option_t d;
1304
1305 d.domain.domain = *domain;
1306 d.domain.eventset = *es;
1307 *check = PAPI_set_opt( PAPI_DOMAIN, &d );
1308}
1309
1320PAPI_FCALL( papif_set_inherit, PAPIF_SET_INHERIT, ( int *inherit, int *check ) )
1321{
1323
1324 i.inherit.inherit = *inherit;
1326}
1327
1339 ( float *rtime, float *ptime, long long *ins, float *ipc,
1340 int *check ) )
1341{
1342 *check = PAPI_ipc( rtime, ptime, ins, ipc );
1343}
1344
1356 ( int event, float *rtime, float *ptime,
1357 long long *ref, long long *core, long long *evt, float *epc,
1358 int *check) )
1359{
1360 *check = PAPI_epc( event, rtime, ptime, ref, core, evt, epc );
1361}
1362
1373PAPI_FCALL( papif_flips_rate, PAPIF_FLIPS_RATE,
1374 ( int event, float *real_time, float *proc_time, long long *flpins,
1375 float *mflips, int *check ) )
1376{
1377 *check = PAPI_flips_rate( event, real_time, proc_time, flpins, mflips );
1378}
1379
1390PAPI_FCALL( papif_flops_rate, PAPIF_FLOPS_RATE,
1391 ( int event, float *real_time, float *proc_time, long long *flpops,
1392 float *mflops, int *check ) )
1393{
1394 *check = PAPI_flops_rate( event, real_time, proc_time, flpops, mflops );
1395}
1396
1407PAPI_FCALL( papif_rate_stop, PAPIF_RATE_STOP,
1408 ( int *check ) )
1409{
1410 *check = PAPI_rate_stop( );
1411}
1412
1414
1425PAPI_FCALL( papif_enum_dev_type, PAPIF_ENUM_DEV_TYPE, ( int *modifier, int *handle_index, int *check ))
1426{
1429}
1430
1442#if defined(_FORTRAN_STRLEN_AT_END)
1443PAPI_FCALL( papif_get_dev_type_attr, PAPIF_GET_DEV_TYPE_ATTR, (int *handle_index,
1444 int *attribute,
1445 int *value,
1446 char *string,
1447 int *check,
1448 int string_len) )
1449#else
1450PAPI_FCALL( papif_get_dev_type_attr, PAPIF_GET_DEV_TYPE_ATTR, (int *handle_index,
1451 int *attribute,
1452 int *value,
1453 char *string,
1454 int *check) )
1455#endif
1456{
1457 const char *string_ptr;
1458 int i;
1459 *handle_index = 0;
1460 *check = PAPI_OK;
1461
1462 assert(sysdetect_fort_handle);
1463
1464 switch(*attribute) {
1469 value);
1470 break;
1474 &string_ptr);
1475 if (*check != PAPI_OK) {
1476 break;
1477 }
1478#if defined(_FORTRAN_STRLEN_AT_END)
1479 strncpy(string, string_ptr, string_len);
1480 for ( i = ( int ) string_len; i < PAPI_MAX_STR_LEN;
1481 string[i++] = ' ' );
1482#else
1483 strcpy(string, string_ptr);
1484 for ( i = ( int ) strlen(string_ptr); i < PAPI_MAX_STR_LEN;
1485 string[i++] = ' ' );
1486#endif
1487 break;
1488 default:
1489 *check = PAPI_EINVAL;
1490 }
1491 *handle_index = 0;
1492 return;
1493}
1494
1506#if defined(_FORTRAN_STRLEN_AT_END)
1507PAPI_FCALL( papif_get_dev_attr, PAPIF_GET_DEV_ATTR, (int *handle_index,
1508 int *id,
1509 int *attribute,
1510 int *value,
1511 char *string,
1512 int *check,
1513 int string_len) )
1514#else
1515PAPI_FCALL( papif_get_dev_attr, PAPIF_GET_DEV_ATTR, (int *handle_index,
1516 int *id,
1517 int *attribute,
1518 int *value,
1519 char *string,
1520 int *check) )
1521#endif
1522{
1523 int i;
1524 const char *string_ptr;
1525 *handle_index = 0;
1526 *check = PAPI_OK;
1527
1528 assert(sysdetect_fort_handle);
1529
1530 switch(*attribute) {
1591 *check = PAPI_get_dev_attr(sysdetect_fort_handle, *id, *attribute,
1592 value);
1593 break;
1596 *check = PAPI_get_dev_attr(sysdetect_fort_handle, *id, *attribute,
1597 &string_ptr);
1598 if (*check != PAPI_OK) {
1599 break;
1600 }
1601#if defined(_FORTRAN_STRLEN_AT_END)
1602 strncpy(string, string_ptr, (size_t) string_len);
1603 for ( i = ( int ) strlen(string_ptr); i < PAPI_MAX_STR_LEN;
1604 string[i++] = ' ' );
1605#else
1606 strcpy(string, string_ptr);
1607 for ( i = ( int ) strlen(string_ptr); i < PAPI_MAX_STR_LEN;
1608 string[i++] = ' ' );
1609#endif
1610 break;
1611 default:
1612 *check = PAPI_EINVAL;
1613 }
1614 return;
1615}
1616
1617/* The High Level API Wrappers */
1671#if defined(_FORTRAN_STRLEN_AT_END)
1672PAPI_FCALL( papif_hl_region_begin, PAPIF_HL_REGION_BEGIN,
1673 ( char* name, int *check, int Event_len ) )
1674{
1675 char tmp[PAPI_MAX_STR_LEN];
1676 Fortran2cstring( tmp, name, PAPI_MAX_STR_LEN, Event_len );
1678}
1679#else
1680PAPI_FCALL( papif_hl_region_begin, PAPIF_HL_REGION_BEGIN,
1681 ( char* name, int *check ) )
1682{
1684}
1685#endif
1686
1740#if defined(_FORTRAN_STRLEN_AT_END)
1741PAPI_FCALL( papif_hl_read, PAPIF_HL_READ,
1742 ( char* name, int *check, int Event_len ) )
1743{
1744 char tmp[PAPI_MAX_STR_LEN];
1745 Fortran2cstring( tmp, name, PAPI_MAX_STR_LEN, Event_len );
1746 *check = PAPI_hl_read( tmp );
1747}
1748#else
1750 ( char* name, int *check ) )
1751{
1752 *check = PAPI_hl_read( name );
1753}
1754#endif
1755
1803#if defined(_FORTRAN_STRLEN_AT_END)
1804PAPI_FCALL( papif_hl_region_end, PAPIF_HL_REGION_END,
1805 ( char* name, int *check, int Event_len ) )
1806{
1807 char tmp[PAPI_MAX_STR_LEN];
1808 Fortran2cstring( tmp, name, PAPI_MAX_STR_LEN, Event_len );
1810}
1811#else
1812PAPI_FCALL( papif_hl_region_end, PAPIF_HL_REGION_END,
1813 ( char* name, int *check ) )
1814{
1816}
1817#endif
1818
1866 ( int *check ) )
1867{
1868 *check = PAPI_hl_stop( );
1869}
1870
1871#pragma GCC visibility pop
static papi_handle_t handle
Definition: Gamum.c:21
double tmp
int i
atomic_p lock[]
Definition: aix.c:25
static long count
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.
check for initialization
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
Definition: f90papi.h:169
#define PAPI_DEV_ATTR__CUDA_UINT_THR_PER_BLK
Definition: f90papi.h:226
#define PAPI_DEV_ATTR__CUDA_UINT_WARP_SIZE
Definition: f90papi.h:114
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_LINE_COUNT
Definition: f90papi.h:32
#define PAPI_DEV_ATTR__ROCM_UINT_GRD_DIM_Y
Definition: f90papi.h:258
#define PAPI_DEV_ATTR__ROCM_UINT_WAVE_PER_CU
Definition: f90papi.h:163
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_PER_SM
Definition: f90papi.h:156
#define PAPI_OK
Definition: f90papi.h:73
#define PAPI_DEV_ATTR__CUDA_ULONG_UID
Definition: f90papi.h:192
#define PAPI_DEV_ATTR__CPU_UINT_FAMILY
Definition: f90papi.h:142
#define PAPI_CLOCKRATE
Definition: f90papi.h:110
#define PAPI_DEV_ATTR__CPU_UINT_SOCKET_COUNT
Definition: f90papi.h:125
#define PAPI_DEV_TYPE_ATTR__INT_PAPI_ID
Definition: f90papi.h:59
#define PAPI_DEFGRN
Definition: f90papi.h:26
#define PAPI_GRANUL
Definition: f90papi.h:179
#define PAPI_DEV_ATTR__CPU_UINT_THR_PER_NUMA
Definition: f90papi.h:155
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_LINE_SIZE
Definition: f90papi.h:213
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_DIM_Z
Definition: f90papi.h:117
#define PAPI_DEV_ATTR__ROCM_UINT_WAVEFRONT_SIZE
Definition: f90papi.h:252
#define PAPI_DEV_ATTR__CUDA_UINT_UNIFIED_ADDR
Definition: f90papi.h:279
#define PAPI_DEV_ATTR__CUDA_UINT_SM_COUNT
Definition: f90papi.h:249
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_ASSOC
Definition: f90papi.h:35
#define PAPI_DEV_ATTR__CUDA_UINT_GRD_DIM_Y
Definition: f90papi.h:106
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_SIZE
Definition: f90papi.h:251
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_LINE_SIZE
Definition: f90papi.h:128
#define PAPI_DEV_ATTR__CPU_UINT_THREAD_COUNT
Definition: f90papi.h:181
#define PAPI_DEV_TYPE_ATTR__INT_COUNT
Definition: f90papi.h:140
#define PAPI_DEV_ATTR__CPU_UINT_NUMA_COUNT
Definition: f90papi.h:18
#define PAPI_DEV_TYPE_ATTR__INT_VENDOR_ID
Definition: f90papi.h:116
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_LINE_COUNT
Definition: f90papi.h:56
#define PAPI_DEV_ATTR__CUDA_UINT_MANAGED_MEM
Definition: f90papi.h:183
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_SIZE
Definition: f90papi.h:259
#define PAPI_DEV_ATTR__ROCM_UINT_COMP_CAP_MINOR
Definition: f90papi.h:228
#define PAPI_EINVAL
Definition: f90papi.h:115
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_SIZE
Definition: f90papi.h:31
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_DIM_Y
Definition: f90papi.h:217
#define PAPI_DEV_ATTR__ROCM_CHAR_DEVICE_NAME
Definition: f90papi.h:84
#define PAPI_DEV_ATTR__CUDA_UINT_SHM_PER_BLK
Definition: f90papi.h:216
#define PAPI_MAX_STR_LEN
Definition: f90papi.h:77
#define PAPI_DEV_ATTR__ROCM_UINT_WORKGROUP_SIZE
Definition: f90papi.h:118
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_LINE_COUNT
Definition: f90papi.h:15
#define PAPI_DEV_ATTR__ROCM_UINT_COMP_CAP_MAJOR
Definition: f90papi.h:34
#define PAPI_DOMAIN
Definition: f90papi.h:159
#define PAPI_DEV_ATTR__CPU_CHAR_NAME
Definition: f90papi.h:246
#define PAPI_DEV_ATTR__CUDA_UINT_GRD_DIM_X
Definition: f90papi.h:42
#define PAPI_INHERIT
Definition: f90papi.h:76
#define PAPI_DEV_ATTR__ROCM_ULONG_UID
Definition: f90papi.h:28
#define PAPI_DEV_ATTR__CPU_UINT_L3U_CACHE_LINE_COUNT
Definition: f90papi.h:182
#define PAPI_DEV_TYPE_ATTR__CHAR_NAME
Definition: f90papi.h:126
#define PAPI_DEV_ATTR__CUDA_UINT_MEMCPY_OVERLAP
Definition: f90papi.h:273
#define PAPI_DEV_ATTR__ROCM_UINT_SHM_PER_WG
Definition: f90papi.h:33
#define PAPI_DEV_ATTR__CUDA_UINT_COMP_CAP_MINOR
Definition: f90papi.h:135
#define PAPI_DEV_ATTR__CUDA_UINT_MAP_HOST_MEM
Definition: f90papi.h:151
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_ASSOC
Definition: f90papi.h:23
#define PAPI_DEV_ATTR__CUDA_UINT_SHM_PER_SM
Definition: f90papi.h:218
#define PAPI_DEV_ATTR__CPU_UINT_STEPPING
Definition: f90papi.h:153
#define PAPI_DEV_ATTR__ROCM_UINT_CU_COUNT
Definition: f90papi.h:191
#define PAPI_DEV_ATTR__CUDA_UINT_BLK_DIM_X
Definition: f90papi.h:166
#define PAPI_PRELOAD
Definition: f90papi.h:37
#define PAPI_DEV_ATTR__ROCM_UINT_SIMD_PER_CU
Definition: f90papi.h:92
#define PAPI_DEV_ATTR__ROCM_UINT_WG_DIM_X
Definition: f90papi.h:145
#define PAPI_DEV_ATTR__CUDA_UINT_MULTI_KERNEL
Definition: f90papi.h:55
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_ASSOC
Definition: f90papi.h:207
#define PAPI_DEV_ATTR__CUDA_UINT_GRD_DIM_Z
Definition: f90papi.h:267
#define PAPI_DEV_ATTR__ROCM_UINT_GRD_DIM_X
Definition: f90papi.h:49
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_SIZE
Definition: f90papi.h:184
#define PAPI_DEV_ATTR__CPU_UINT_MODEL
Definition: f90papi.h:98
#define PAPI_DEFDOM
Definition: f90papi.h:188
#define PAPI_DEV_ATTR__ROCM_UINT_WG_DIM_Z
Definition: f90papi.h:241
#define PAPI_EXEINFO
Definition: f90papi.h:36
#define PAPI_DEV_ATTR__ROCM_UINT_GRD_DIM_Z
Definition: f90papi.h:20
#define PAPI_DEV_ATTR__CPU_UINT_L2U_CACHE_LINE_SIZE
Definition: f90papi.h:232
#define PAPI_DEV_ATTR__CPU_UINT_CORE_COUNT
Definition: f90papi.h:41
#define PAPI_DEV_ATTR__CPU_UINT_L1I_CACHE_ASSOC
Definition: f90papi.h:47
#define PAPI_DEV_ATTR__CPU_UINT_L1D_CACHE_LINE_SIZE
Definition: f90papi.h:205
#define PAPI_DEV_ATTR__CUDA_CHAR_DEVICE_NAME
Definition: f90papi.h:81
#define PAPI_DEV_TYPE_ATTR__CHAR_STATUS
Definition: f90papi.h:239
#define PAPI_DEV_ATTR__CUDA_UINT_COMP_CAP_MAJOR
Definition: f90papi.h:69
static int EventSet
Definition: init_fini.c:8
static long long values[NUM_EVENTS]
Definition: init_fini.c:10
Return codes and api definitions.
static void * sysdetect_fort_handle
#define PAPI_FCALL(function, caps, args)
i inherit inherit
* handle_index
* check
static void Fortran2cstring(char *cstring, char *Fstring, int clen, int Flen)
static int cidx
int model
Definition: pfmlib_amd64.c:86
amd64_rev_t revision
Definition: pfmlib_amd64.c:81
const char * name
Definition: rocs.c:225
int
Definition: sde_internal.h:89
long long int long long
Definition: sde_internal.h:85
vptr_t text_start
Definition: papi.h:686
char name[PAPI_HUGE_STR_LEN]
Definition: papi.h:685
vptr_t text_end
Definition: papi.h:687
vptr_t bss_start
Definition: papi.h:690
vptr_t data_end
Definition: papi.h:689
vptr_t data_start
Definition: papi.h:688
vptr_t bss_end
Definition: papi.h:691
A pointer to the following is passed to PAPI_get_dmem_info()
Definition: papi.h:865
unsigned int count
Definition: papi.h:981
char note[PAPI_HUGE_STR_LEN]
Definition: papi.h:1007
char short_descr[PAPI_MIN_STR_LEN]
Definition: papi.h:961
char symbol[PAPI_HUGE_STR_LEN]
Definition: papi.h:960
char long_descr[PAPI_HUGE_STR_LEN]
Definition: papi.h:963
char fullname[PAPI_HUGE_STR_LEN]
Definition: papi.h:697
PAPI_address_map_t address_info
Definition: papi.h:698
Hardware info structure.
Definition: papi.h:774
char vendor_string[PAPI_MAX_STR_LEN]
Definition: papi.h:782
int nnodes
Definition: papi.h:779
int model
Definition: papi.h:783
int totalcpus
Definition: papi.h:780
int vendor
Definition: papi.h:781
float revision
Definition: papi.h:785
int ncpu
Definition: papi.h:775
char model_string[PAPI_MAX_STR_LEN]
Definition: papi.h:784
int cpu_max_mhz
Definition: papi.h:790
char lib_preload_env[PAPI_MAX_STR_LEN]
Definition: papi.h:619
A pointer to the following is passed to PAPI_set/get_opt()
Definition: papi.h:843
PAPI_preload_info_t preload
Definition: papi.h:844
PAPI_granularity_option_t granularity
Definition: papi.h:847
PAPI_domain_option_t domain
Definition: papi.h:849
PAPI_exe_info_t * exe_info
Definition: papi.h:857
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)