9#if !defined(PAPI_SDE_LIB_INTERNAL_H)
10#define PAPI_SDE_LIB_INTERNAL_H
24#define EXP_CONTAINER_ENTRIES 52
25#define EXP_CONTAINER_MIN_SIZE 2048
27#define PAPISDE_HT_SIZE 512
29#define is_readonly(_X_) (PAPI_SDE_RO == ((_X_)&0x0F))
30#define is_readwrite(_X_) (PAPI_SDE_RW == ((_X_)&0x0F))
31#define is_delta(_X_) (PAPI_SDE_DELTA == ((_X_)&0xF0))
32#define is_instant(_X_) (PAPI_SDE_INSTANT == ((_X_)&0xF0))
45#if defined(SDE_HASH_SMALL)
46 #define _SDE_HASH_BUCKET_COUNT_ 61
47 #define _SDE_HASH_BUCKET_WIDTH_ 5
49 #define _SDE_HASH_BUCKET_COUNT_ 373
50 #define _SDE_HASH_BUCKET_WIDTH_ 14
58#define SDE_HASH_IS_FUZZY 0
60typedef struct cset_hash_decorated_object_s {
75typedef struct cset_hash_bucket_s {
81typedef struct cset_hash_table_s {
90 papisde_list_entry_t *
next;
102typedef struct cntr_class_basic_s {
106typedef struct cntr_class_callback_s {
111typedef struct cntr_class_recorder_s {
115typedef struct cntr_class_cset_s {
119typedef struct cntr_class_group_s {
124typedef union cntr_class_specific_u{
162#define IS_CNTR_REGISTERED(_CNT) ( CNTR_CLASS_REGISTERED == (_CNT)->cntr_class )
163#define IS_CNTR_CREATED(_CNT) ( CNTR_CLASS_CREATED == (_CNT)->cntr_class )
164#define IS_CNTR_BASIC(_CNT) ( CNTR_CLASS_BASIC & (_CNT)->cntr_class )
165#define IS_CNTR_CALLBACK(_CNT) ( CNTR_CLASS_CB == (_CNT)->cntr_class )
166#define IS_CNTR_RECORDER(_CNT) ( CNTR_CLASS_RECORDER == (_CNT)->cntr_class )
167#define IS_CNTR_CSET(_CNT) ( CNTR_CLASS_CSET == (_CNT)->cntr_class )
168#define IS_CNTR_PLACEHOLDER(_CNT) ( CNTR_CLASS_PLACEHOLDER == (_CNT)->cntr_class )
169#define IS_CNTR_GROUP(_CNT) ( CNTR_CLASS_GROUP == (_CNT)->cntr_class )
217#pragma GCC visibility push(default)
231#pragma GCC visibility pop
241 (h) *= 0x2127599bf4325c37ULL; \
245static inline uint64_t
fasthash64(
const void *
buf,
size_t len, uint64_t seed)
247 const uint64_t m = 0x880355f21e6d1965ULL;
248 const uint64_t *pos = (
const uint64_t *)
buf;
249 const uint64_t *end = pos + (len / 8);
250 const uint32_t *pos2;
251 uint64_t h = seed ^ (len * m);
260 pos2 = (
const uint32_t*)pos;
264 case 7: v ^= (uint64_t)pos2[6] << 48;
266 case 6: v ^= (uint64_t)pos2[5] << 40;
268 case 5: v ^= (uint64_t)pos2[4] << 32;
270 case 4: v ^= (uint64_t)pos2[3] << 24;
272 case 3: v ^= (uint64_t)pos2[2] << 16;
274 case 2: v ^= (uint64_t)pos2[1] << 8;
276 case 1: v ^= (uint64_t)pos2[0];
static papi_handle_t handle
char event_name[2][PAPI_MAX_STR_LEN]
volatile int buf[CACHE_FLUSH_BUFFER_SIZE_INTS]
SDE prototypes and macros.
long long int(* papi_sde_fptr_t)(void *)
int sde_ti_read_counter(uint32_t, long long int *)
int cset_delete(cset_hash_table_t *hash_ptr)
int sde_ti_is_simple_counter(uint32_t)
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 _SDE_HASH_BUCKET_COUNT_
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)
int sdei_read_and_update_data_value(sde_counter_t *counter, long long int previous_value, long long int *rslt_ptr)
static uint64_t fasthash64(const void *buf, size_t len, uint64_t seed)
papisde_control_t * _papisde_global_control
int sde_ti_name_to_code(const char *, uint32_t *)
uint32_t ht_hash_name(const char *str)
void exp_container_to_contiguous(recorder_data_t *exp_container, void *cont_buffer)
int sde_ti_is_counter_set_to_overflow(uint32_t)
void sdei_counting_set_to_list(void *cset_handle, cset_list_object_t **list_head)
papi_handle_t do_sde_init(const char *name_of_library, papisde_control_t *gctl)
void ht_insert(papisde_list_entry_t *hash_table, int ht_key, sde_counter_t *sde_counter)
sde_counter_t * allocate_and_insert(papisde_control_t *gctl, papisde_library_desc_t *lib_handle, const char *name, uint32_t uniq_id, int cntr_mode, int cntr_type, enum CNTR_CLASS cntr_class, cntr_class_specific_t cntr_union)
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 sde_ti_reset_counter(uint32_t)
sde_counter_t * ht_delete(papisde_list_entry_t *hash_table, int ht_key, uint32_t uniq_id)
int sdei_inc_ref_count(sde_counter_t *counter)
int cset_remove_elem(cset_hash_table_t *hash_ptr, size_t hashable_size, const void *element, uint32_t type_id)
int sde_ti_set_counter_overflow(uint32_t, int)
sde_counter_t * ht_lookup_by_name(papisde_list_entry_t *hash_table, const char *name)
sde_counter_t * ht_lookup_by_id(papisde_list_entry_t *hash_table, uint32_t uniq_id)
uint32_t ht_hash_id(uint32_t uniq_id)
int sdei_set_timer_for_overflow(void)
int sde_ti_get_num_reg_events(void)
int sdei_read_counter_group(sde_counter_t *counter, long long int *rslt_ptr)
int sdei_delete_counter(papisde_library_desc_t *lib_handle, const char *name)
#define EXP_CONTAINER_ENTRIES
char * sde_ti_get_event_name(int)
char * sde_ti_get_event_description(int)
void papi_sde_counting_set_to_list(void *cset_handle, cset_list_object_t **list_head)
int sde_ti_write_counter(uint32_t, long long)
#define _SDE_HASH_BUCKET_WIDTH_
int sdei_hardware_write(sde_counter_t *counter, long long int new_value)
cset_list_object_t * cset_to_list(cset_hash_table_t *hash_ptr)
papisde_control_t * sdei_get_global_struct(void)
int sde_ti_shutdown(void)
void exp_container_init(sde_counter_t *handle, size_t typesize)
papisde_list_entry_t * group_head
cset_list_object_t * overflow_list
papisde_library_desc_t * lib_list_head
papisde_list_entry_t all_reg_counters[PAPISDE_HT_SIZE]
papisde_list_entry_t lib_counters[PAPISDE_HT_SIZE]
papisde_library_desc_t * next
papisde_list_entry_t * next
void * ptr_array[EXP_CONTAINER_ENTRIES]
long long int previous_data
papisde_library_desc_t * which_lib
int(* cmpr_func_ptr)(const void *p1, const void *p2)
sde_counter_t * recording
cntr_class_recorder_t cntr_recorder
cntr_class_cset_t cntr_cset
cntr_class_callback_t cntr_cb
cntr_class_group_t cntr_group
cntr_class_basic_t cntr_basic