Skip to content

Commit

Permalink
[OpenMP] libomp: fix ittnotify usage.
Browse files Browse the repository at this point in the history
Replaced storing of ittnotify domain array index into
location info structure (which is now read-only) with storing of
(location info address + ittnotify domain + team size) into hash map.
Replaced __kmp_itt_barrier_domains and __kmp_itt_imbalance_domains arrays with
__kmp_itt_barrier_domains hash map; __kmp_itt_region_domains and
__kmp_itt_region_team_size arrays with __kmp_itt_region_domains hash map.
Basic functionality did not change (at least tried to not change).

The patch fixes https://bugs.llvm.org/show_bug.cgi?id=48644.

Differential Revision: https://reviews.llvm.org/D111580
  • Loading branch information
AndreyChurbanov committed Oct 13, 2021
1 parent 3628bb7 commit 6e98ec9
Show file tree
Hide file tree
Showing 4 changed files with 196 additions and 225 deletions.
9 changes: 3 additions & 6 deletions openmp/runtime/src/kmp_itt.cpp
Expand Up @@ -24,12 +24,9 @@
#include "ittnotify_config.h"
__itt_global __kmp_ittapi_clean_global;
extern __itt_global __kmp_itt__ittapi_global;
kmp_int32 __kmp_barrier_domain_count;
kmp_int32 __kmp_region_domain_count;
__itt_domain *__kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
__itt_domain *__kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
__itt_domain *__kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];

kmp_itthash_t __kmp_itt_barrier_domains = {{0}, 0};
kmp_itthash_t __kmp_itt_region_domains = {{0}, 0};
__itt_domain *metadata_domain = NULL;
__itt_string_handle *string_handle_imbl = NULL;
__itt_string_handle *string_handle_loop = NULL;
Expand Down
22 changes: 14 additions & 8 deletions openmp/runtime/src/kmp_itt.h
Expand Up @@ -278,15 +278,21 @@ __kmp_inline void __kmp_itt_stack_callee_leave(__itt_caller);
} /* if */ \
} while (0)

const int KMP_MAX_FRAME_DOMAINS =
512; // Maximum number of frame domains to use (maps to
// Maximum number of frame domains to use (maps to
// different OpenMP regions in the user source code).
extern kmp_int32 __kmp_barrier_domain_count;
extern kmp_int32 __kmp_region_domain_count;
extern __itt_domain *__kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
extern __itt_domain *__kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
extern __itt_domain *__kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
extern kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
const int KMP_MAX_FRAME_DOMAINS = 997;
typedef struct kmp_itthash_entry {
ident_t *loc;
int team_size;
__itt_domain *d;
struct kmp_itthash_entry *next_in_bucket;
} kmp_itthash_entry_t;
typedef struct kmp_itthash {
kmp_itthash_entry_t *buckets[KMP_MAX_FRAME_DOMAINS];
int count; // just a heuristic to limit number of entries
} kmp_itthash_t;
extern kmp_itthash_t __kmp_itt_region_domains;
extern kmp_itthash_t __kmp_itt_barrier_domains;
extern __itt_domain *metadata_domain;
extern __itt_string_handle *string_handle_imbl;
extern __itt_string_handle *string_handle_loop;
Expand Down

0 comments on commit 6e98ec9

Please sign in to comment.