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
148 typedef 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 176 typedef struct _papi_mh_tlb_info
183 typedef struct _papi_mh_cache_info
192 typedef struct _papi_mh_level_info
198 typedef struct _papi_mh_info
215 typedef struct _papi3_hw_info
231 typedef struct _papi3_preload_option
234 char lib_preload_sep;
237 } PAPIvi_preload_option_t;
239 typedef 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) \ 308 static const PAPIvi_exe_info_t *
309 PAPIvi_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 );
331 static const PAPIvi_hw_info_t *
332 PAPIvi_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 );
447 PAPIvi_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 char event_name[2][PAPI_MAX_STR_LEN]
#define PAPI_MH_TYPE_INST
char long_descr[PAPI_HUGE_STR_LEN]
get the executable's info
char derived[PAPI_MIN_STR_LEN]
Return codes and api definitions.
#define PAPI_MH_TYPE_DATA
static struct counter_info * event_info
#define PAPI_MAX_PRESET_EVENTS
const PAPI_exe_info_t * PAPI_get_executable_info(void)
PAPI_address_map_t address_info
char symbol[PAPI_HUGE_STR_LEN]
#define PAPI_HUGE_STR_LEN
get the executable's address space info
char short_descr[PAPI_MIN_STR_LEN]
mh for mem hierarchy maybe?
#define PAPI_MAX_INFO_TERMS
#define PAPI_MH_TYPE_UNIFIED
#define PAPI_PRESET_AND_MASK
char fullname[PAPI_HUGE_STR_LEN]
const PAPI_hw_info_t * PAPI_get_hardware_info(void)
char note[PAPI_HUGE_STR_LEN]
#define PAPI_MAX_MEM_HIERARCHY_LEVELS