17#define USE_CHECKS_COMMON
19#define KMP_INLINE_SUBR 1
22 void *data_addr,
size_t pc_size);
40#ifdef KMP_TASK_COMMON_DEBUG
41 KC_TRACE(10, (
"__kmp_threadprivate_find_task_common: thread#%d, called with "
49#ifdef KMP_TASK_COMMON_DEBUG
50 KC_TRACE(10, (
"__kmp_threadprivate_find_task_common: thread#%d, found "
71#ifdef KMP_TASK_COMMON_DEBUG
74 (
"__kmp_find_shared_task_common: thread#%d, found node %p on list\n",
102 for (
i = pc_size;
i > 0; --
i) {
115 char *
addr = (
char *)pc_addr;
117 for (
size_t offset = 0;
d != 0;
d =
d->next) {
118 for (
int i =
d->more;
i > 0; --
i) {
120 memset(&
addr[offset],
'\0',
d->size);
145 !
__kmp_root[gtid]->
r.r_uber_thread->th.th_pri_common->data[q]);
234 KC_TRACE(10, (
"__kmp_common_destroy_gtid: T#%d called\n", gtid));
264 KC_TRACE(30, (
"__kmp_common_destroy_gtid: T#%d threadprivate destructors "
271#ifdef KMP_TASK_COMMON_DEBUG
272static void dump_list(
void) {
282 KC_TRACE(10, (
"\tdump_list: gtid:%d addresses\n",
p));
287 (
"\tdump_list: THREADPRIVATE: Serial %p -> Parallel %p\n",
298 void *data_addr,
size_t pc_size) {
326 d_tn->
next = *lnk_tn;
400 d_tn->
next = *lnk_tn;
415#ifdef USE_CHECKS_COMMON
427#ifdef KMP_TASK_COMMON_DEBUG
431 (
"__kmp_threadprivate_insert: WARNING! thread#%d: collision on %p\n",
438#ifdef KMP_TASK_COMMON_DEBUG
440 (
"__kmp_threadprivate_insert: thread#%d, inserted node %p on list\n",
508 KC_TRACE(10, (
"__kmpc_threadprivate_register: called\n"));
510#ifdef USE_CHECKS_COMMON
534 d_tn->
next = *lnk_tn;
544 KC_TRACE(10, (
"__kmpc_threadprivate: T#%d called\n", global_tid));
546#ifdef USE_CHECKS_COMMON
556 KC_TRACE(20, (
"__kmpc_threadprivate: T#%d inserting private data\n",
564 (
"__kmpc_threadprivate: T#%d try to find private data at address %p\n",
570 KC_TRACE(20, (
"__kmpc_threadprivate: T#%d found data\n", global_tid));
571#ifdef USE_CHECKS_COMMON
583 KC_TRACE(20, (
"__kmpc_threadprivate: T#%d inserting data\n", global_tid));
589 KC_TRACE(10, (
"__kmpc_threadprivate: T#%d exiting; return value = %p\n",
619 KC_TRACE(10, (
"__kmpc_threadprivate_cached: T#%d called with cache: %p, "
620 "address: %p, size: %" KMP_SIZE_T_SPEC
"\n",
633 if (!tp_cache_addr) {
639 KC_TRACE(50, (
"__kmpc_threadprivate_cached: T#%d allocated cache at "
641 global_tid, my_cache));
646 tp_cache_addr->
addr = my_cache;
652 my_cache = tp_cache_addr->
addr;
666 if ((
ret =
TCR_PTR((*cache)[global_tid])) == 0) {
672 (
"__kmpc_threadprivate_cached: T#%d exiting; return value = %p\n",
680 KC_TRACE(10, (
"__kmp_threadprivate_resize_cache: called with size: %d\n",
692 KC_TRACE(50, (
"__kmp_threadprivate_resize_cache: allocated cache at %p\n",
695 void **old_cache = ptr->
addr;
697 my_cache[
i] = old_cache[
i];
703 tp_cache_addr->
addr = my_cache;
749 size_t vector_length) {
752 KC_TRACE(10, (
"__kmpc_threadprivate_register_vec: called\n"));
754#ifdef USE_CHECKS_COMMON
771 d_tn->
vec_len = (size_t)vector_length;
776 d_tn->
next = *lnk_tn;
785 void **cache = ptr->
addr;
void(* kmpc_dtor)(void *)
Pointer to the destructor function.
void *(* kmpc_cctor)(void *, void *)
Pointer to an alternate constructor.
void __kmpc_threadprivate_register(ident_t *loc, void *data, kmpc_ctor ctor, kmpc_cctor cctor, kmpc_dtor dtor)
void *(* kmpc_cctor_vec)(void *, void *, size_t)
Array constructor.
void *(* kmpc_ctor)(void *)
Pointer to the constructor function.
void *(* kmpc_ctor_vec)(void *, size_t)
Array constructor.
void * __kmpc_threadprivate_cached(ident_t *loc, kmp_int32 global_tid, void *data, size_t size, void ***cache)
void(* kmpc_dtor_vec)(void *, size_t)
Pointer to the array destructor function.
void __kmpc_threadprivate_register_vec(ident_t *loc, void *data, kmpc_ctor_vec ctor, kmpc_cctor_vec cctor, kmpc_dtor_vec dtor, size_t vector_length)
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void * data
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t size
void const char const char int ITT_FORMAT __itt_group_sync p
#define KMP_HASH_TABLE_SIZE
kmp_bootstrap_lock_t __kmp_tp_cached_lock
volatile int __kmp_init_gtid
kmp_cached_addr_t * __kmp_threadpriv_cache_list
volatile int __kmp_all_nth
kmp_lock_t __kmp_global_lock
volatile int __kmp_init_common
static bool KMP_UBER_GTID(int gtid)
#define KMP_INITIAL_GTID(gtid)
kmp_info_t ** __kmp_threads
#define __kmp_allocate(size)
int __kmp_threads_capacity
volatile int __kmp_init_serial
#define KMP_DEBUG_ASSERT(cond)
#define KMP_ITT_IGNORE(stmt)
static void __kmp_release_bootstrap_lock(kmp_bootstrap_lock_t *lck)
static int __kmp_acquire_lock(kmp_lock_t *lck, kmp_int32 gtid)
static int __kmp_acquire_bootstrap_lock(kmp_bootstrap_lock_t *lck)
static void __kmp_release_lock(kmp_lock_t *lck, kmp_int32 gtid)
#define KMP_COMPARE_AND_STORE_PTR(p, cv, sv)
void __kmp_common_destroy(void)
void __kmp_common_initialize(void)
static struct private_data * __kmp_init_common_data(void *pc_addr, size_t pc_size)
void kmp_threadprivate_insert_private_data(int gtid, void *pc_addr, void *data_addr, size_t pc_size)
static __forceinline struct private_common * __kmp_threadprivate_find_task_common(struct common_table *tbl, int gtid, void *pc_addr)
void __kmp_cleanup_threadprivate_caches()
void * __kmpc_threadprivate(ident_t *loc, kmp_int32 global_tid, void *data, size_t size)
struct private_common * kmp_threadprivate_insert(int gtid, void *pc_addr, void *data_addr, size_t pc_size)
static void __kmp_copy_common_data(void *pc_addr, struct private_data *d)
static __forceinline struct shared_common * __kmp_find_shared_task_common(struct shared_table *tbl, int gtid, void *pc_addr)
struct shared_table __kmp_threadprivate_d_table
void __kmp_threadprivate_resize_cache(int newCapacity)
void __kmp_common_destroy_gtid(int gtid)
static kmp_cached_addr_t * __kmp_find_cache(void *data)
struct private_common * data[KMP_HASH_TABLE_SIZE]
struct kmp_cached_addr * next
struct private_common * next
struct private_common * link
union shared_common::@4 cct
union shared_common::@3 ct
union shared_common::@5 dt
struct private_data * pod_init
struct shared_common * next
struct shared_common * data[KMP_HASH_TABLE_SIZE]