14#define DLSYM_CHECK(name) \
16 if ( NULL != (err=dlerror()) ) { \
18 SDEDBG("obtain_papi_symbols(): Unable to load symbol %s: %s\n", #name, err);\
40#if defined(USE_LIBAO_ATOMICS)
54sdei_check_overflow_status(uint32_t cntr_uniq_id,
long long int latest){
56 (*papi_sde_check_overflow_status_ptr)(cntr_uniq_id, latest);
87 void *
handle = dlopen(NULL, RTLD_NOW|RTLD_GLOBAL);
88 if( NULL != (err = dlerror()) ){
89 SDEDBG(
"obtain_papi_symbols(): %s\n",err);
102 SDEDBG(
"obtain_papi_symbols(): All symbols from libpapi.so have been successfully acquired.\n");
121 papisde_library_desc_t *tmp_lib;
129 char *
tmp= getenv(
"PAPI_DEBUG");
130 if( (NULL !=
tmp) && (0 != strlen(
tmp)) && (strstr(
tmp,
"SUBSTRATE") || strstr(
tmp,
"ALL")) ){
134 SDEDBG(
"Registering library: '%s'\n", name_of_library);
145 tmp_lib = (papisde_library_desc_t *)
do_sde_init(name_of_library, gctl);
149 SDEDBG(
"Library '%s' has been registered.\n",name_of_library);
171 papisde_library_desc_t *lib_handle = (papisde_library_desc_t *)
handle;
172 lib_handle->disabled = 1;
199 papisde_library_desc_t *lib_handle = (papisde_library_desc_t *)
handle;
200 lib_handle->disabled = 0;
213 papisde_library_desc_t *lib_handle, *tmp_lib, *next_lib, *prev_lib;
216 lib_handle = (papisde_library_desc_t *)
handle;
218 if( (NULL==lib_handle) || lib_handle->disabled || (NULL==gctl) || gctl->disabled)
221 SDEDBG(
"papi_sde_shutdown(): for library '%s'.\n", lib_handle->libraryName);
225 sde_counter_t *all_lib_counters;
226 int item_cnt =
ht_to_array(lib_handle->lib_counters, &all_lib_counters);
228 for(
i=0;
i<item_cnt;
i++){
229 char *cntr_name = all_lib_counters[
i].name;
236 free(all_lib_counters);
241 next_lib = lib_handle->next;
242 if (gctl->lib_list_head == lib_handle) {
243 gctl->lib_list_head = next_lib;
246 tmp_lib = gctl->lib_list_head;
247 while (tmp_lib != lib_handle && tmp_lib != NULL)
250 tmp_lib = tmp_lib->next;
252 if (prev_lib != NULL) {
253 prev_lib->next = next_lib;
257 free(lib_handle->libraryName);
278 papisde_library_desc_t *lib_handle;
285 lib_handle = (papisde_library_desc_t *)
handle;
287 if( (NULL==lib_handle) || lib_handle->disabled || (NULL==gctl) || gctl->disabled)
314 papisde_library_desc_t *lib_handle;
321 lib_handle = (papisde_library_desc_t *)
handle;
323 if( (NULL==lib_handle) || lib_handle->disabled || (NULL==gctl) || gctl->disabled)
344 papisde_library_desc_t *lib_handle;
346 char *full_event_name;
351 lib_handle = (papisde_library_desc_t *)
handle;
353 if( (NULL==lib_handle) || lib_handle->disabled || (NULL==gctl) || gctl->disabled)
356 if( NULL == lib_handle->libraryName ){
357 SDE_ERROR(
"papi_sde_unregister_counter(): 'handle' is clobbered. Unable to unregister counter.");
361 size_t str_len = strlen(lib_handle->libraryName)+strlen(
event_name)+2+1;
362 full_event_name = (
char *)malloc(str_len*
sizeof(
char));
363 snprintf(full_event_name, str_len,
"%s::%s", lib_handle->libraryName,
event_name);
365 SDEDBG(
"Unregistering counter: '%s' from SDE library: %s.\n", full_event_name, lib_handle->libraryName);
374 SDE_ERROR(
"Counter '%s' has not been registered by library '%s'.", full_event_name, lib_handle->libraryName);
375 free(full_event_name);
381 free(full_event_name);
400 sde_counter_t *tmp_item;
401 papisde_library_desc_t *lib_handle;
402 char *full_event_name;
405 lib_handle = (papisde_library_desc_t *)
handle;
407 if( (NULL==lib_handle) || lib_handle->disabled || (NULL==gctl) || gctl->disabled)
410 if( NULL == lib_handle->libraryName ){
411 SDE_ERROR(
"papi_sde_describe_counter(): 'handle' is clobbered. Unable to add description for counter.");
415 size_t str_len = strlen(lib_handle->libraryName)+strlen(
event_name)+2+1;
416 full_event_name = (
char *)malloc(str_len*
sizeof(
char));
417 snprintf(full_event_name, str_len,
"%s::%s", lib_handle->libraryName,
event_name);
424 if( NULL != tmp_item ){
425 tmp_item->description = strdup(event_description);
426 free(full_event_name);
430 SDEDBG(
"papi_sde_describe_counter() Event: '%s' is not registered in SDE library: '%s'\n", full_event_name, lib_handle->libraryName);
432 free(full_event_name);
451 papisde_library_desc_t *lib_handle;
452 sde_counter_t *tmp_item, *tmp_group;
453 uint32_t cntr_group_uniq_id;
454 char *full_event_name, *full_group_name;
457 lib_handle = (papisde_library_desc_t *)
handle;
459 if( (NULL==lib_handle) || lib_handle->disabled || (NULL==gctl) || gctl->disabled)
464 if( NULL == lib_handle->libraryName ){
465 SDE_ERROR(
"papi_sde_add_counter_to_group(): 'handle' is clobbered. Unable to add counter to group.");
469 size_t str_len = strlen(lib_handle->libraryName)+strlen(
event_name)+2+1;
470 full_event_name = (
char *)malloc(str_len*
sizeof(
char));
471 snprintf(full_event_name, str_len,
"%s::%s", lib_handle->libraryName,
event_name);
479 if( NULL == tmp_item ){
480 SDE_ERROR(
"papi_sde_add_counter_to_group(): Unable to find counter: '%s'.",full_event_name);
481 free(full_event_name);
487 free(full_event_name);
489 str_len = strlen(lib_handle->libraryName)+strlen(group_name)+2+1;
490 full_group_name = (
char *)malloc(str_len*
sizeof(
char));
491 snprintf(full_group_name, str_len,
"%s::%s", lib_handle->libraryName, group_name);
495 if( NULL == tmp_group ){
502 cntr_group_uniq_id = gctl->num_reg_events++;
503 gctl->num_live_events++;
505 SDEDBG(
"%s line %d: Unique ID for new counter group = %d\n", __FILE__, __LINE__, cntr_group_uniq_id);
507 tmp_group = (sde_counter_t *)calloc(1,
sizeof(sde_counter_t));
509 tmp_group->glb_uniq_id = cntr_group_uniq_id;
511 tmp_group->name = strdup(full_group_name);
513 tmp_group->description = strdup( full_group_name );
514 tmp_group->which_lib = lib_handle;
515 tmp_group->u.cntr_group.group_flags = group_flags;
521 if( NULL == tmp_group->u.cntr_group.group_head ){
525 SDE_ERROR(
"papi_sde_add_counter_to_group(): Found an empty counter group: '%s'. This might indicate that a cleanup routine is not doing its job.", group_name);
531 if( tmp_group->u.cntr_group.group_flags != group_flags ){
532 SDE_ERROR(
"papi_sde_add_counter_to_group(): Attempting to add counter '%s' to counter group '%s' with incompatible group flags.",
event_name, group_name);
533 free(full_group_name);
540 papisde_list_entry_t *new_head = (papisde_list_entry_t *)calloc(1,
sizeof(papisde_list_entry_t));
541 new_head->item = tmp_item;
542 new_head->next = tmp_group->u.cntr_group.group_head;
543 tmp_group->u.cntr_group.group_head = new_head;
545 SDE_ERROR(
"papi_sde_add_counter_to_group(): Error while adding counter '%s' to counter group: '%s'.", tmp_item->name, group_name);
548 free(full_group_name);
579 long long int *counter_data;
580 char *full_event_name;
581 papisde_library_desc_t *lib_handle;
585 lib_handle = (papisde_library_desc_t *)
handle;
587 if( (NULL==lib_handle) || lib_handle->disabled || (NULL==gctl) || gctl->disabled)
595 if( NULL == lib_handle->libraryName ){
596 SDE_ERROR(
"papi_sde_create_counter(): 'handle' is clobbered. Unable to create counter.");
600 SDEDBG(
"Adding created counter: '%s' with mode: '%d' in SDE library: %s.\n",
event_name, cntr_mode, lib_handle->libraryName);
603 counter_data = (
long long int *)calloc(1,
sizeof(
long long int));
611 size_t str_len = strlen(lib_handle->libraryName)+strlen(
event_name)+2+1;
612 full_event_name = (
char *)malloc(str_len*
sizeof(
char));
613 snprintf(full_event_name, str_len,
"%s::%s", lib_handle->libraryName,
event_name);
617 SDEDBG(
"Logging counter '%s' not properly inserted in SDE library '%s'\n", full_event_name, lib_handle->libraryName);
618 free(full_event_name);
627 free(full_event_name);
640 sde_counter_t *tmp_cntr;
645 if( (NULL==tmp_cntr) || (NULL==tmp_cntr->which_lib) || tmp_cntr->which_lib->disabled || (NULL==gctl) || gctl->disabled)
650 if( !
IS_CNTR_CREATED(tmp_cntr) || (NULL == tmp_cntr->u.cntr_basic.data) ){
651 SDE_ERROR(
"papi_sde_inc_counter(): 'cntr_handle' is clobbered. Unable to modify value of counter.");
657 SDE_ERROR(
"papi_sde_inc_counter(): Counter is not of type \"long long int\" and cannot be modified using this function.");
662 SDEDBG(
"Preparing to increment counter: '%s::%s' by %lld.\n", tmp_cntr->which_lib->libraryName, tmp_cntr->name, increment);
664 ptr = tmp_cntr->u.cntr_basic.data;
667 sdei_check_overflow_status(tmp_cntr->glb_uniq_id, *ptr);
685 sde_counter_t *tmp_cset_handle;
686 char *full_cset_name;
687 papisde_library_desc_t *lib_handle;
690 SDEDBG(
"papi_sde_create_counting_set()\n");
692 lib_handle = (papisde_library_desc_t *)
handle;
694 if( (NULL==lib_handle) || lib_handle->disabled || (NULL==gctl) || gctl->disabled)
697 if( NULL != cset_name )
698 SDEDBG(
"Preparing to create counting set: '%s'.\n", cset_name);
700 if( NULL == lib_handle->libraryName ){
701 SDE_ERROR(
"papi_sde_create_counting_set(): 'handle' is clobbered. Unable to create counting set.");
705 SDEDBG(
"Adding counting set: '%s' in SDE library: %s.\n", cset_name, lib_handle->libraryName);
716 size_t str_len = strlen(lib_handle->libraryName)+strlen(cset_name)+2+1;
717 full_cset_name = (
char *)malloc(str_len*
sizeof(
char));
718 snprintf(full_cset_name, str_len,
"%s::%s", lib_handle->libraryName, cset_name);
721 if(NULL == tmp_cset_handle) {
722 SDEDBG(
"Recorder '%s' not properly inserted in SDE library '%s'\n", full_cset_name, lib_handle->libraryName);
723 free(full_cset_name);
727 if( NULL != cset_handle ){
728 *(sde_counter_t **)cset_handle = tmp_cset_handle;
731 free(full_cset_name);
739 sde_counter_t *tmp_cset;
742 tmp_cset = (sde_counter_t *)cset_handle;
744 if( (NULL==tmp_cset) || (NULL==tmp_cset->which_lib) || tmp_cset->which_lib->disabled || (NULL==gctl) || gctl->disabled)
749 if( !
IS_CNTR_CSET(tmp_cset) || (NULL == tmp_cset->u.cntr_cset.data) ){
750 SDE_ERROR(
"papi_sde_counting_set_remove(): Counting set is clobbered. Unable to remove element.");
755 SDEDBG(
"Preparing to remove element from counting set: '%s::%s'.\n", tmp_cset->which_lib->libraryName, tmp_cset->name);
756 ret_val =
cset_remove_elem(tmp_cset->u.cntr_cset.data, hashable_size, element, type_id);
768 sde_counter_t *tmp_cset;
771 tmp_cset = (sde_counter_t *)cset_handle;
773 if( (NULL==tmp_cset) || (NULL==tmp_cset->which_lib) || tmp_cset->which_lib->disabled || (NULL==gctl) || gctl->disabled)
778 if( !
IS_CNTR_CSET(tmp_cset) || (NULL == tmp_cset->u.cntr_cset.data) ){
779 SDE_ERROR(
"papi_sde_counting_set_insert(): Counting set is clobbered. Unable to insert element.");
784 SDEDBG(
"Preparing to insert element in counting set: '%s::%s'.\n", tmp_cset->which_lib->libraryName, tmp_cset->name);
785 ret_val =
cset_insert_elem(tmp_cset->u.cntr_cset.data, element_size, hashable_size, element, type_id);
797 sde_counter_t *tmp_rec_handle;
799 char *aux_event_name;
801 char *full_event_name;
803#define _SDE_MODIFIER_COUNT 6
808 papisde_library_desc_t *lib_handle = (papisde_library_desc_t *)
handle;
810 if( (NULL==lib_handle) || lib_handle->disabled || (NULL==gctl) || gctl->disabled)
815 if( NULL == lib_handle->libraryName ){
816 SDE_ERROR(
"papi_sde_create_recorder(): 'handle' is clobbered. Unable to create recorder.");
821 SDEDBG(
"Preparing to create recorder: '%s' with typesize: '%d' in SDE library: %s.\n",
event_name, (
int)typesize, lib_handle->libraryName);
824 cntr_union.
cntr_recorder.
data = (recorder_data_t *)calloc(1,
sizeof(recorder_data_t));
835 str_len = strlen(lib_handle->libraryName)+strlen(
event_name)+2+1;
836 full_event_name = (
char *)malloc(str_len*
sizeof(
char));
837 snprintf(full_event_name, str_len,
"%s::%s", lib_handle->libraryName,
event_name);
840 if(NULL == tmp_rec_handle) {
841 SDEDBG(
"Recorder '%s' not properly inserted in SDE library '%s'\n", full_event_name, lib_handle->libraryName);
842 free(full_event_name);
848 free(full_event_name);
850 if( NULL != record_handle ){
851 *(sde_counter_t **)record_handle = tmp_rec_handle;
857 size_t tmp_len = strlen(modifiers[
i]);
858 if( tmp_len > str_len )
862 aux_event_name = (
char *)calloc(str_len,
sizeof(
char));
864 snprintf(aux_event_name, str_len,
"%s%s",
event_name, modifiers[0]);
865 SDEDBG(
"papi_sde_create_recorder(): Preparing to register aux counter: '%s' in SDE library: %s.\n", aux_event_name, lib_handle->libraryName);
868 aux_cntr_union.
cntr_basic.
data = &(tmp_rec_handle->u.cntr_recorder.data->used_entries);
871 SDEDBG(
"papi_sde_create_recorder(): Registration of aux counter: '%s' in SDE library: %s FAILED.\n", aux_event_name, lib_handle->libraryName);
872 free(aux_event_name);
877 if( NULL != cmpr_func_ptr ){
879 sde_sorting_params_t *sorting_params;
881 sorting_params = (sde_sorting_params_t *)malloc(
sizeof(sde_sorting_params_t));
882 sorting_params->recording = tmp_rec_handle;
883 sorting_params->cmpr_func_ptr = cmpr_func_ptr;
885 snprintf(aux_event_name, str_len,
"%s%s",
event_name, modifiers[
i]);
887 SDEDBG(
"papi_sde_create_recorder(): Preparing to register aux fp counter: '%s' in SDE library: %s.\n", aux_event_name, lib_handle->libraryName);
889 memset(&aux_cntr_union, 0,
sizeof(aux_cntr_union));
894 SDEDBG(
"papi_sde_create_recorder(): Registration of aux counter: '%s' in SDE library: %s FAILED.\n", aux_event_name, lib_handle->libraryName);
895 free(aux_event_name);
901 free(aux_event_name);
911 sde_counter_t *tmp_rcrd;
914 tmp_rcrd = (sde_counter_t *)record_handle;
916 if( (NULL==tmp_rcrd) || (NULL==tmp_rcrd->which_lib) || tmp_rcrd->which_lib->disabled || (NULL==gctl) || gctl->disabled)
919 SDEDBG(
"Preparing to record value of size %lu at address: %p\n",typesize, value);
923 if( !
IS_CNTR_RECORDER(tmp_rcrd) || (NULL == tmp_rcrd->u.cntr_recorder.data) ){
924 SDE_ERROR(
"papi_sde_record(): 'record_handle' is clobbered. Unable to record value.");
942 sde_counter_t *tmp_rcrdr;
945 tmp_rcrdr = (sde_counter_t *)record_handle;
947 if( (NULL==tmp_rcrdr) || (NULL==tmp_rcrdr->which_lib) || tmp_rcrdr->which_lib->disabled || (NULL==gctl) || gctl->disabled)
952 if( !
IS_CNTR_RECORDER(tmp_rcrdr) || NULL == tmp_rcrdr->u.cntr_recorder.data ){
953 SDE_ERROR(
"papi_sde_reset_recorder(): 'record_handle' is clobbered. Unable to reset recorder.");
959 tmp_rcrdr->u.cntr_recorder.data->used_entries = 0;
960 free( tmp_rcrdr->u.cntr_recorder.data->sorted_buffer );
961 tmp_rcrdr->u.cntr_recorder.data->sorted_buffer = NULL;
962 tmp_rcrdr->u.cntr_recorder.data->sorted_entries = 0;
976 sde_counter_t *tmp_cntr;
981 if( (NULL==tmp_cntr) || (NULL==tmp_cntr->which_lib) || tmp_cntr->which_lib->disabled || (NULL==gctl) || gctl->disabled)
987 SDE_ERROR(
"papi_sde_reset_counter(): Counter is not created by PAPI, so it cannot be reset.");
992 ptr = (
long long int *)(tmp_cntr->u.cntr_basic.data);
995 SDE_ERROR(
"papi_sde_reset_counter(): Counter structure is clobbered. Unable to reset value of counter.");
1018 sde_counter_t *counter_handle;
1019 papisde_library_desc_t *lib_handle;
1020 char *full_event_name;
1022 lib_handle = (papisde_library_desc_t *)
handle;
1024 if( (NULL==lib_handle) || lib_handle->disabled || (NULL==gctl) || gctl->disabled)
1027 if( NULL == lib_handle->libraryName ){
1028 SDE_ERROR(
"papi_sde_get_counter_handle(): 'handle' is clobbered.");
1032 size_t str_len = strlen(lib_handle->libraryName)+strlen(
event_name)+2+1;
1033 full_event_name = (
char *)malloc(str_len*
sizeof(
char));
1034 snprintf(full_event_name, str_len,
"%s::%s", lib_handle->libraryName,
event_name);
1041 free(full_event_name);
1043 return counter_handle;
1054 n1 = *(
long long *)p1;
1055 n2 = *(
long long *)p2;
1057 if( n1 < n2 )
return -1;
1058 if( n1 > n2 )
return 1;
1068 if( n1 < n2 )
return -1;
1069 if( n1 > n2 )
return 1;
1079 if( n1 < n2 )
return -1;
1080 if( n1 > n2 )
return 1;
1090 if( n1 < n2 )
return -1;
1091 if( n1 > n2 )
return 1;
1095#define _SDE_CMP_MIN 0
1096#define _SDE_CMP_MAX 1
1102 void *edge = NULL, *edge_copy;
1104 long long current_size, cumul_size = 0;
1108 sde_counter_t *rcrd;
1109 int (*cmpr_func_ptr)(
const void *p1,
const void *p2);
1112 rcrd = ((sde_sorting_params_t *)param)->recording;
1113 elem_cnt = rcrd->u.cntr_recorder.data->used_entries;
1114 typesize = rcrd->u.cntr_recorder.data->typesize;
1116 cmpr_func_ptr = ((sde_sorting_params_t *)param)->cmpr_func_ptr;
1120 if( (0 == elem_cnt) || (NULL == cmpr_func_ptr) )
1127 if( (NULL != rcrd->u.cntr_recorder.data->sorted_buffer) &&
1128 (rcrd->u.cntr_recorder.data->sorted_entries < elem_cnt) ){
1130 free( rcrd->u.cntr_recorder.data->sorted_buffer );
1131 rcrd->u.cntr_recorder.data->sorted_buffer = NULL;
1132 rcrd->u.cntr_recorder.data->sorted_entries = 0;
1137 if( NULL != rcrd->u.cntr_recorder.data->sorted_buffer ){
1139 edge = rcrd->u.cntr_recorder.data->sorted_buffer;
1141 edge = (
char *)(rcrd->u.cntr_recorder.data->sorted_buffer) + (elem_cnt-1)*typesize;
1144 edge = rcrd->u.cntr_recorder.data->ptr_array[0];
1151 src = rcrd->u.cntr_recorder.data->ptr_array[chunk];
1153 for(
i=0; (
i < (elem_cnt-cumul_size)) && (
i < current_size);
i++){
1154 void *next_elem = (
char *)src +
i*typesize;
1155 int rslt = cmpr_func_ptr(next_elem, edge);
1165 cumul_size += current_size;
1167 if( cumul_size >= elem_cnt )
1177 edge_copy = malloc( 1 * typesize);
1178 memcpy(edge_copy, edge, 1 * typesize);
1181 return (
long long)edge_copy;
1195 long long quantile, elem_cnt;
1198 sde_counter_t *rcrd;
1199 int (*cmpr_func_ptr)(
const void *p1,
const void *p2);
1201 rcrd = ((sde_sorting_params_t *)param)->recording;
1202 elem_cnt = rcrd->u.cntr_recorder.data->used_entries;
1203 typesize = rcrd->u.cntr_recorder.data->typesize;
1205 cmpr_func_ptr = ((sde_sorting_params_t *)param)->cmpr_func_ptr;
1209 if( (0 == elem_cnt) || (NULL == cmpr_func_ptr) )
1216 if( (NULL != rcrd->u.cntr_recorder.data->sorted_buffer) &&
1217 (rcrd->u.cntr_recorder.data->sorted_entries < elem_cnt) ){
1219 free( rcrd->u.cntr_recorder.data->sorted_buffer );
1220 rcrd->u.cntr_recorder.data->sorted_buffer = NULL;
1221 rcrd->u.cntr_recorder.data->sorted_entries = 0;
1225 if( NULL == rcrd->u.cntr_recorder.data->sorted_buffer ){
1226 rcrd->u.cntr_recorder.data->sorted_buffer = malloc(elem_cnt * typesize);
1229 rcrd->u.cntr_recorder.data->sorted_entries = elem_cnt;
1231 void *sorted_buffer = rcrd->u.cntr_recorder.data->sorted_buffer;
1233 qsort(sorted_buffer, elem_cnt, typesize, cmpr_func_ptr);
1234 void *tmp_ptr = (
char *)sorted_buffer + typesize*((elem_cnt*percent)/100);
1241 result_data = malloc(typesize);
1242 memcpy(result_data, tmp_ptr, typesize);
1245 quantile = (
long long)result_data;
static void * cntr_handle
static papi_handle_t handle
char event_name[2][PAPI_MAX_STR_LEN]
unsigned long AO_t __attribute__((__aligned__(4)))
void(* papi_sde_check_overflow_status_ptr)(uint32_t cntr_id, long long int value)
int(* papi_sde_set_timer_for_overflow_ptr)(void)
void papi_sde_check_overflow_status(unsigned int cntr_uniq_id, long long int latest)
int papi_sde_set_timer_for_overflow(void)
int papi_sde_compare_int(const void *p1, const void *p2)
static long long sdei_compute_edge(void *param, int which_edge)
static long long sdei_compute_quantile(void *param, int percent)
papi_handle_t papi_sde_init(const char *name_of_library)
int papi_sde_disable(papi_handle_t handle)
papisde_control_t * _papisde_global_control
static long long sdei_compute_q3(void *param)
int papi_sde_reset_recorder(void *record_handle)
static long long sdei_compute_max(void *param)
int papi_sde_unregister_counter(papi_handle_t handle, const char *event_name)
int papi_sde_enable(papi_handle_t handle)
int papi_sde_counting_set_remove(void *cset_handle, size_t hashable_size, const void *element, uint32_t type_id)
int papi_sde_counting_set_insert(void *cset_handle, size_t element_size, size_t hashable_size, const void *element, uint32_t type_id)
int papi_sde_compare_long_long(const void *p1, const void *p2)
static long long sdei_compute_min(void *param)
int papi_sde_create_recorder(papi_handle_t handle, const char *event_name, size_t typesize, int(*cmpr_func_ptr)(const void *p1, const void *p2), void **record_handle)
pthread_mutex_t _sde_hwd_lock_data
void * papi_sde_get_counter_handle(void *handle, const char *event_name)
int papi_sde_register_counter(papi_handle_t handle, const char *event_name, int cntr_mode, int cntr_type, void *counter)
int papi_sde_compare_float(const void *p1, const void *p2)
int sdei_set_timer_for_overflow(void)
int papi_sde_reset_counter(void *cntr_handle)
static void obtain_papi_symbols(void)
int papi_sde_shutdown(papi_handle_t handle)
int papi_sde_compare_double(const void *p1, const void *p2)
int papi_sde_inc_counter(papi_handle_t cntr_handle, long long int increment)
int papi_sde_add_counter_to_group(papi_handle_t handle, const char *event_name, const char *group_name, uint32_t group_flags)
int papi_sde_record(void *record_handle, size_t typesize, const void *value)
static long long sdei_compute_q1(void *param)
#define _SDE_MODIFIER_COUNT
static long long sdei_compute_med(void *param)
int papi_sde_create_counting_set(papi_handle_t handle, const char *cset_name, void **cset_handle)
int papi_sde_register_counter_cb(papi_handle_t handle, const char *event_name, int cntr_mode, int cntr_type, papi_sde_fptr_t callback, void *param)
int papi_sde_create_counter(papi_handle_t handle, const char *event_name, int cntr_mode, void **cntr_handle)
int papi_sde_describe_counter(void *handle, const char *event_name, const char *event_description)
#define DLSYM_CHECK(name)
#define PAPI_SDE_long_long
static void SDE_ERROR(const char *format,...)
#define SDEDBG(format, args...)
long long int(* papi_sde_fptr_t)(void *)
int cset_insert_elem(cset_hash_table_t *hash_ptr, size_t element_size, size_t hashable_size, const void *element, uint32_t type_id)
uint32_t ht_hash_name(const char *str)
void exp_container_to_contiguous(recorder_data_t *exp_container, void *cont_buffer)
void ht_insert(papisde_list_entry_t *hash_table, int ht_key, sde_counter_t *sde_counter)
int ht_to_array(papisde_list_entry_t *hash_table, sde_counter_t **rslt_array)
int exp_container_insert_element(recorder_data_t *exp_container, size_t typesize, const void *value)
int cset_remove_elem(cset_hash_table_t *hash_ptr, size_t hashable_size, const void *element, uint32_t type_id)
sde_counter_t * ht_lookup_by_name(papisde_list_entry_t *hash_table, const char *name)
uint32_t ht_hash_id(uint32_t uniq_id)
#define IS_CNTR_CSET(_CNT)
#define EXP_CONTAINER_MIN_SIZE
int sdei_setup_counter_internals(papi_handle_t handle, const char *event_name, int cntr_mode, int cntr_type, enum CNTR_CLASS cntr_class, cntr_class_specific_t cntr_union)
#define IS_CNTR_RECORDER(_CNT)
papi_handle_t do_sde_init(const char *name_of_library, papisde_control_t *gctl)
int sdei_inc_ref_count(sde_counter_t *counter)
int sdei_delete_counter(papisde_library_desc_t *lib_handle, const char *name)
#define EXP_CONTAINER_ENTRIES
#define IS_CNTR_CREATED(_CNT)
papisde_control_t * sdei_get_global_struct(void)
cntr_class_recorder_t cntr_recorder
cntr_class_cset_t cntr_cset
cntr_class_callback_t cntr_cb
cntr_class_basic_t cntr_basic