34#define PAPI_VERSION_NUMBER(maj,min,rev) (((maj)<<16) | ((min)<<8) | (rev))
35#define PAPI_VERSION_MAJOR(x) (((x)>>16) & 0xffff)
36#define PAPI_VERSION_MINOR(x) (((x)>>8) & 0xff)
37#define PAPI_VERSION_REVISION(x) ((x) & 0xff)
40#define PAPI_VERSION PAPI_VERSION_NUMBER(2,3,4)
43#define PAPI_VI_VERSION PAPI_VERSION_NUMBER(3,0,6)
46#define PAPI_EPERM PAPI_EMISC
53#define PAPI_PRESET_MASK 0x80000000
55#define PAPI_PRESET_AND_MASK 0x7FFFFFFF
56#define PAPI_NATIVE_MASK 0x40000000
57#define PAPI_NATIVE_AND_MASK 0x3FFFFFFF
64#define PAPI_CLOCKRATE PAPI_GET_CLOCKRATE
65#define PAPI_MAX_HWCTRS PAPI_GET_MAX_HWCTRS
66#define PAPI_HWINFO PAPI_GET_HWINFO
67#define PAPI_EXEINFO PAPI_GET_EXEINFO
68#define PAPI_MAX_CPUS PAPI_GET_MAX_CPUS
69#define PAPI_CPUS PAPI_GET_CPUS
70#define PAPI_THREADS PAPI_GET_THREADS
76#define PAPI_MIN_STR_LEN PAPI_MAX_STR_LEN
77#define PAPI_HUGE_STR_LEN PAPI_MAX_STR_LEN
85#define PAPI_PROFIL_BUCKET_16 0
86#define PAPI_PROFIL_BUCKET_32 0
87#define PAPI_PROFIL_BUCKET_64 0
97#define PAPI_FP_OPS PAPI_FP_INS
107#define PAPI_MAX_INFO_TERMS 8
110 unsigned int event_code;
140 PAPI_PENT4_ENUM_GROUPS = 0x100,
141 PAPI_PENT4_ENUM_COMBOS,
142 PAPI_PENT4_ENUM_BITS,
145 PAPI_PWR4_ENUM_GROUPS = 0x200
148typedef struct _papi_address_map
170#define PAPI_MAX_MEM_HIERARCHY_LEVELS 3
171#define PAPI_MH_TYPE_EMPTY 0x0
172#define PAPI_MH_TYPE_INST 0x1
173#define PAPI_MH_TYPE_DATA 0x2
174#define PAPI_MH_TYPE_UNIFIED PAPI_MH_TYPE_INST|PAPI_MH_TYPE_DATA
176typedef struct _papi_mh_tlb_info
183typedef struct _papi_mh_cache_info
192typedef struct _papi_mh_level_info
198typedef struct _papi_mh_info
215typedef struct _papi3_hw_info
231typedef struct _papi3_preload_option
234 char lib_preload_sep;
237} PAPIvi_preload_option_t;
239typedef struct _papi3_program_info
244 PAPIvi_preload_option_t preload_info;
280#define PAPIvi_add_event(EventSet, Event) \
281 PAPI_add_event(&EventSet, Event)
282#define PAPIvi_add_events(EventSet, Events, number) \
283 PAPI_add_events(&EventSet, Events, number)
284#define PAPIvi_cleanup_eventset(EventSet) \
285 PAPI_cleanup_eventset(&EventSet)
286#define PAPIvi_remove_event(EventSet, EventCode) \
287 PAPI_rem_event(&EventSet, EventCode)
288#define PAPIvi_remove_events(EventSet, Events, number) \
289 PAPI_rem_events(&EventSet, Events, number)
290#define PAPIvi_set_multiplex(EventSet) \
291 PAPI_set_multiplex(&EventSet)
294#define PAPIvi_is_initialized \
298#define PAPIvi_lock(lck) \
300#define PAPIvi_profil(buf, bufsiz, offset, scale, EventSet, EventCode, threshold, flags) \
301 PAPI_profil((unsigned short *)buf, bufsiz, (unsigned long)offset, scale, EventSet, EventCode, threshold, flags)
302#define PAPIvi_thread_init(id_fn) \
303 PAPI_thread_init(id_fn, 0)
304#define PAPIvi_unlock(lck) \
308static const PAPIvi_exe_info_t *
309PAPIvi_get_executable_info(
void )
311 static PAPIvi_exe_info_t prginfo3;
314 if ( prginfo2 == NULL )
317 strcpy( prginfo3.fullname, prginfo2->
fullname );
318 strcpy( prginfo3.name, prginfo2->name );
319 prginfo3.address_info.mapname[0] = 0;
320 prginfo3.address_info.text_start = prginfo2->text_start;
326 strcpy( prginfo3.preload_info.lib_preload_env, prginfo2->lib_preload_env );
328 return ( &prginfo3 );
331static const PAPIvi_hw_info_t *
332PAPIvi_get_hardware_info(
void )
334 static PAPIvi_hw_info_t papi3_hw_info;
336 const PAPI_mem_info_t *papi2_mem_info = PAPI_get_memory_info( );
339 memcpy( &papi3_hw_info, papi2_hw_info,
sizeof (
PAPI_hw_info_t ) );
341 memset( &papi3_hw_info.mem_hierarchy, 0, sizeof (
PAPI_mh_info_t ) );
343 if ( papi2_mem_info->total_tlb_size &&
344 papi2_mem_info->itlb_size == 0 && papi2_mem_info->dtlb_size == 0 ) {
346 papi3_hw_info.mem_hierarchy.level[0].tlb[0].num_entries =
347 papi2_mem_info->total_tlb_size;
349 if ( papi2_mem_info->itlb_size ) {
350 papi3_hw_info.mem_hierarchy.level[0].tlb[0].type =
352 papi3_hw_info.mem_hierarchy.level[0].tlb[0].num_entries =
353 papi2_mem_info->itlb_size;
354 papi3_hw_info.mem_hierarchy.level[0].tlb[0].associativity =
355 papi2_mem_info->itlb_assoc;
357 if ( papi2_mem_info->dtlb_size ) {
358 papi3_hw_info.mem_hierarchy.level[0].tlb[1].type =
360 papi3_hw_info.mem_hierarchy.level[0].tlb[1].num_entries =
361 papi2_mem_info->dtlb_size;
362 papi3_hw_info.mem_hierarchy.level[0].tlb[1].associativity =
363 papi2_mem_info->dtlb_assoc;
367 if ( papi2_mem_info->total_L1_size )
368 papi3_hw_info.mem_hierarchy.levels = 1;
369 if ( papi2_mem_info->total_L1_size &&
370 papi2_mem_info->L1_icache_size == 0 &&
371 papi2_mem_info->L1_dcache_size == 0 ) {
372 papi3_hw_info.mem_hierarchy.level[0].cache[0].type =
374 papi3_hw_info.mem_hierarchy.level[0].cache[0].size =
375 papi2_mem_info->total_L1_size << 10;
377 if ( papi2_mem_info->L1_icache_size ) {
378 papi3_hw_info.mem_hierarchy.level[0].cache[0].type =
380 papi3_hw_info.mem_hierarchy.level[0].cache[0].size =
381 papi2_mem_info->L1_icache_size << 10;
382 papi3_hw_info.mem_hierarchy.level[0].cache[0].associativity =
383 papi2_mem_info->L1_icache_assoc;
384 papi3_hw_info.mem_hierarchy.level[0].cache[0].num_lines =
385 papi2_mem_info->L1_icache_lines;
386 papi3_hw_info.mem_hierarchy.level[0].cache[0].line_size =
387 papi2_mem_info->L1_icache_linesize;
389 if ( papi2_mem_info->L1_dcache_size ) {
390 papi3_hw_info.mem_hierarchy.level[0].cache[1].type =
392 papi3_hw_info.mem_hierarchy.level[0].cache[1].size =
393 papi2_mem_info->L1_dcache_size << 10;
394 papi3_hw_info.mem_hierarchy.level[0].cache[1].associativity =
395 papi2_mem_info->L1_dcache_assoc;
396 papi3_hw_info.mem_hierarchy.level[0].cache[1].num_lines =
397 papi2_mem_info->L1_dcache_lines;
398 papi3_hw_info.mem_hierarchy.level[0].cache[1].line_size =
399 papi2_mem_info->L1_dcache_linesize;
404 if ( papi2_mem_info->L2_cache_size ) {
405 papi3_hw_info.mem_hierarchy.levels = 2;
406 papi3_hw_info.mem_hierarchy.level[1].cache[0].type =
408 papi3_hw_info.mem_hierarchy.level[1].cache[0].size =
409 papi2_mem_info->L2_cache_size << 10;
410 papi3_hw_info.mem_hierarchy.level[1].cache[0].associativity =
411 papi2_mem_info->L2_cache_assoc;
412 papi3_hw_info.mem_hierarchy.level[1].cache[0].num_lines =
413 papi2_mem_info->L2_cache_lines;
414 papi3_hw_info.mem_hierarchy.level[1].cache[0].line_size =
415 papi2_mem_info->L2_cache_linesize;
419 if ( papi2_mem_info->L3_cache_size ) {
420 papi3_hw_info.mem_hierarchy.levels = 3;
421 papi3_hw_info.mem_hierarchy.level[2].cache[0].type =
423 papi3_hw_info.mem_hierarchy.level[2].cache[0].size =
424 papi2_mem_info->L3_cache_size << 10;
425 papi3_hw_info.mem_hierarchy.level[2].cache[0].associativity =
426 papi2_mem_info->L3_cache_assoc;
427 papi3_hw_info.mem_hierarchy.level[2].cache[0].num_lines =
428 papi2_mem_info->L3_cache_lines;
429 papi3_hw_info.mem_hierarchy.level[2].cache[0].line_size =
430 papi2_mem_info->L3_cache_linesize;
433 return ( &papi3_hw_info );
447PAPIvi_enum_event(
int *EventCode,
int modifier )
450 const PAPI_preset_info_t *presets = PAPI_query_all_events_verbose( );
453 if ( ( !modifier ) || ( presets[
i].avail ) ) {
468 const PAPI_preset_info_t *info2 = PAPI_query_all_events_verbose( );
475 info->
count = info2[
i].avail;
478 strcpy( info->
derived,
"DERIVED" );
483 strcpy( info->
symbol, info2[
i].event_name );
484 if ( info2[
i].event_label == NULL )
488 if ( info2[
i].event_descr == NULL )
492 if ( info2[
i].event_note == NULL )
495 strcpy( info->
note, info2[
i].event_note );
514#define PAPIvi_get_shared_lib_info \
515 PAPI_get_shared_lib_info
516#define PAPIvi_get_thr_specific(tag, ptr) \
517 PAPI_get_thr_specific(tag, ptr)
518#define PAPIvi_num_events(EventSet) \
519 PAPI_num_events(EventSet)
520#define PAPIvi_register_thread \
522#define PAPIvi_set_thr_specific(tag, ptr) \
523 PAPI_set_thr_specific(tag, ptr)
532#define PAPIvi_accum(EventSet, values) \
533 PAPI_accum(EventSet, values)
534#define PAPIvi_create_eventset(EventSet) \
535 PAPI_create_eventset(EventSet)
536#define PAPIvi_destroy_eventset(EventSet) \
537 PAPI_destroy_eventset(EventSet)
538#define PAPIvi_event_code_to_name(EventCode, out) \
539 PAPI_event_code_to_name(EventCode, out)
540#define PAPIvi_event_name_to_code(in, out) \
541 PAPI_event_name_to_code(in, out)
542#define PAPIvi_get_dmem_info(option) \
543 PAPI_get_dmem_info(option)
544#define PAPIvi_get_opt(option, ptr) \
545 PAPI_get_opt(option, ptr)
546#define PAPIvi_get_real_cyc \
548#define PAPIvi_get_real_usec \
550#define PAPIvi_get_virt_cyc \
552#define PAPIvi_get_virt_usec \
554#define PAPIvi_library_init(version) \
555 PAPI_library_init(version)
556#define PAPIvi_list_events(EventSet, Events, number) \
557 PAPI_list_events(EventSet, Events, number)
558#define PAPIvi_multiplex_init \
560#define PAPIvi_num_hwctrs \
562#define PAPIvi_overflow(EventSet, EventCode, threshold, flags, handler) \
563 PAPI_overflow(EventSet, EventCode, threshold, flags, handler)
564#define PAPIvi_perror( s ) \
566#define PAPIvi_query_event(EventCode) \
567 PAPI_query_event(EventCode)
568#define PAPIvi_read(EventSet, values) \
569 PAPI_read(EventSet, values)
570#define PAPIvi_reset(EventSet) \
572#define PAPIvi_set_debug(level) \
573 PAPI_set_debug(level)
574#define PAPIvi_set_domain(domain) \
575 PAPI_set_domain(domain)
576#define PAPIvi_set_granularity(granularity) \
577 PAPI_set_granularity(granularity)
578#define PAPIvi_set_opt(option, ptr) \
579 PAPI_set_opt(option, ptr)
580#define PAPIvi_shutdown \
582#define PAPIvi_sprofil(prof, profcnt, EventSet, EventCode, threshold, flags) \
583 PAPI_sprofil(prof, profcnt, EventSet, EventCode, threshold, flags)
584#define PAPIvi_start(EventSet) \
586#define PAPIvi_state(EventSet, status) \
587 PAPI_state(EventSet, status)
588#define PAPIvi_stop(EventSet, values) \
589 PAPI_stop(EventSet, values)
590#define PAPIvi_strerror(err) \
592#define PAPIvi_thread_id \
594#define PAPIvi_write(EventSet, values) \
595 PAPI_write(EventSet, values)
628#define PAPIvi_accum_counters(values, array_len) \
629 PAPI_accum_counters(values, array_len)
630#define PAPIvi_num_counters \
632#define PAPIvi_read_counters(values, array_len) \
633 PAPI_read_counters(values, array_len)
634#define PAPIvi_start_counters(Events, array_len) \
635 PAPI_start_counters(Events, array_len)
636#define PAPIvi_stop_counters(values, array_len) \
637 PAPI_stop_counters(values, array_len)
638#define PAPIvi_flops(rtime, ptime, flpops, mflops) \
639 PAPI_flops(rtime, ptime, flpops, mflops)
642#define PAPIvi_flips(rtime, ptime, flpins, mflips) \
643 PAPI_flops(rtime, ptime, flpins, mflips)
646#define PAPIvi_ipc(rtime, ptime, ins, ipc) \
647 PAPI_ipc(rtime, ptime, ins, ipc)
658#elif (PAPI_VERSION_MAJOR(PAPI_VERSION) == 3)
667#define PAPI_SET_DEBUG PAPI_DEBUG
668#define PAPI_GET_DEBUG PAPI_DEBUG
670#define PAPI_SET_MULTIPLEX PAPI_MULTIPLEX
671#define PAPI_GET_MULTIPLEX PAPI_MULTIPLEX
673#define PAPI_SET_DEFDOM PAPI_DEFDOM
674#define PAPI_GET_DEFDOM PAPI_DEFDOM
676#define PAPI_SET_DOMAIN PAPI_DOMAIN
677#define PAPI_GET_DOMAIN PAPI_DOMAIN
679#define PAPI_SET_DEFGRN PAPI_DEFGRN
680#define PAPI_GET_DEFGRN PAPI_DEFGRN
682#define PAPI_SET_GRANUL PAPI_GRANUL
683#define PAPI_GET_GRANUL PAPI_GRANUL
685#define PAPI_SET_INHERIT PAPI_INHERIT
686#define PAPI_GET_INHERIT PAPI_INHERIT
688#define PAPI_GET_NUMCTRS PAPI_NUMCTRS
689#define PAPI_SET_NUMCTRS PAPI_NUMCTRS
691#define PAPI_SET_PROFIL PAPI_PROFIL
692#define PAPI_GET_PROFIL PAPI_PROFIL
697#define PAPIvi_hw_info_t PAPI_hw_info_t
698#define PAPIvi_exe_info_t PAPI_exe_info_t
704#define PAPIvi_accum(EventSet, values) \
705 PAPI_accum(EventSet, values)
706#define PAPIvi_add_event(EventSet, Event) \
707 PAPI_add_event(EventSet, Event)
708#define PAPIvi_add_events(EventSet, Events, number) \
709 PAPI_add_events(EventSet, Events, number)
710#define PAPIvi_cleanup_eventset(EventSet) \
711 PAPI_cleanup_eventset(EventSet)
712#define PAPIvi_create_eventset(EventSet) \
713 PAPI_create_eventset(EventSet)
714#define PAPIvi_destroy_eventset(EventSet) \
715 PAPI_destroy_eventset(EventSet)
716#define PAPIvi_enum_event(EventCode, modifier) \
717 PAPI_enum_event(EventCode, modifier)
718#define PAPIvi_event_code_to_name(EventCode, out) \
719 PAPI_event_code_to_name(EventCode, out)
720#define PAPIvi_event_name_to_code(in, out) \
721 PAPI_event_name_to_code(in, out)
722#define PAPIvi_get_dmem_info(option) \
723 PAPI_get_dmem_info(option)
724#define PAPIvi_get_event_info(EventCode, info) \
725 PAPI_get_event_info(EventCode, info)
726#define PAPIvi_get_executable_info \
727 PAPI_get_executable_info
728#define PAPIvi_get_hardware_info \
729 PAPI_get_hardware_info
730#define PAPIvi_get_multiplex(EventSet) \
731 PAPI_get_multiplex(EventSet)
732#define PAPIvi_get_opt(option, ptr) \
733 PAPI_get_opt(option, ptr)
734#define PAPIvi_get_real_cyc \
736#define PAPIvi_get_real_usec \
738#define PAPIvi_get_shared_lib_info \
739 PAPI_get_shared_lib_info
740#define PAPIvi_get_thr_specific(tag, ptr) \
741 PAPI_get_thr_specific(tag, ptr)
742#define PAPIvi_get_virt_cyc \
744#define PAPIvi_get_virt_usec \
746#define PAPIvi_is_initialized \
748#define PAPIvi_library_init(version) \
749 PAPI_library_init(version)
750#define PAPIvi_list_events(EventSet, Events, number) \
751 PAPI_list_events(EventSet, Events, number)
752#define PAPIvi_lock(lck) \
754#define PAPIvi_multiplex_init \
756#define PAPIvi_num_hwctrs \
758#define PAPIvi_num_events(EventSet) \
759 PAPI_num_events(EventSet)
760#define PAPIvi_overflow(EventSet, EventCode, threshold, flags, handler) \
761 PAPI_overflow(EventSet, EventCode, threshold, flags, handler)
762#define PAPIvi_perror( s ) \
764#define PAPIvi_profil(buf, bufsiz, offset, scale, EventSet, EventCode, threshold, flags) \
765 PAPI_profil(buf, bufsiz, offset, scale, EventSet, EventCode, threshold, flags)
766#define PAPIvi_query_event(EventCode) \
767 PAPI_query_event(EventCode)
768#define PAPIvi_read(EventSet, values) \
769 PAPI_read(EventSet, values)
770#define PAPIvi_register_thread \
772#define PAPIvi_remove_event(EventSet, EventCode) \
773 PAPI_remove_event(EventSet, EventCode)
774#define PAPIvi_remove_events(EventSet, Events, number) \
775 PAPI_remove_events(EventSet, Events, number)
776#define PAPIvi_reset(EventSet) \
778#define PAPIvi_set_debug(level) \
779 PAPI_set_debug(level)
780#define PAPIvi_set_domain(domain) \
781 PAPI_set_domain(domain)
782#define PAPIvi_set_granularity(granularity) \
783 PAPI_set_granularity(granularity)
784#define PAPIvi_set_multiplex(EventSet) \
785 PAPI_set_multiplex(EventSet)
786#define PAPIvi_set_opt(option, ptr) \
787 PAPI_set_opt(option, ptr)
788#define PAPIvi_set_thr_specific(tag, ptr) \
789 PAPI_set_thr_specific(tag, ptr)
790#define PAPIvi_shutdown \
792#define PAPIvi_sprofil(prof, profcnt, EventSet, EventCode, threshold, flags) \
793 PAPI_sprofil(prof, profcnt, EventSet, EventCode, threshold, flags)
794#define PAPIvi_start(EventSet) \
796#define PAPIvi_state(EventSet, status) \
797 PAPI_state(EventSet, status)
798#define PAPIvi_stop(EventSet, values) \
799 PAPI_stop(EventSet, values)
800#define PAPIvi_strerror(err) \
802#define PAPIvi_thread_id \
804#define PAPIvi_thread_init(id_fn) \
805 PAPI_thread_init(id_fn)
806#define PAPIvi_unlock(lck) \
808#define PAPIvi_write(EventSet, values) \
809 PAPI_write(EventSet, values)
813#define PAPIvi_accum_counters(values, array_len) \
814 PAPI_accum_counters(values, array_len)
815#define PAPIvi_num_counters \
817#define PAPIvi_read_counters(values, array_len) \
818 PAPI_read_counters(values, array_len)
819#define PAPIvi_start_counters(Events, array_len) \
820 PAPI_start_counters(Events, array_len)
821#define PAPIvi_stop_counters(values, array_len) \
822 PAPI_stop_counters(values, array_len)
823#define PAPIvi_flips(rtime, ptime, flpins, mflips) \
824 PAPI_flips(rtime, ptime, flpins, mflips)
825#define PAPIvi_flops(rtime, ptime, flpops, mflops) \
826 PAPI_flops(rtime, ptime, flpops, mflops)
827#define PAPIvi_ipc(rtime, ptime, ins, ipc) \
828 PAPI_ipc(rtime, ptime, ins, ipc)
838#error Compiling against a not yet released PAPI version
Get the executable's address space info.
get information about the system hardware
char event_name[2][PAPI_MAX_STR_LEN]
#define PAPI_MAX_MEM_HIERARCHY_LEVELS
#define PAPI_MAX_INFO_TERMS
#define PAPI_HUGE_STR_LEN
static struct counter_info * event_info
#define PAPI_PRESET_AND_MASK
#define PAPI_MAX_PRESET_EVENTS
Return codes and api definitions.
#define PAPI_MH_TYPE_DATA
#define PAPI_MH_TYPE_INST
#define PAPI_MH_TYPE_UNIFIED
get the executable's address space info
char note[PAPI_HUGE_STR_LEN]
char short_descr[PAPI_MIN_STR_LEN]
char symbol[PAPI_HUGE_STR_LEN]
char derived[PAPI_MIN_STR_LEN]
char long_descr[PAPI_HUGE_STR_LEN]
get the executable's info
char fullname[PAPI_HUGE_STR_LEN]
PAPI_address_map_t address_info
mh for mem hierarchy maybe?