Skip to content

Commit 6e98ec9

Browse files
[OpenMP] libomp: fix ittnotify usage.
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
1 parent 3628bb7 commit 6e98ec9

File tree

4 files changed

+196
-225
lines changed

4 files changed

+196
-225
lines changed

openmp/runtime/src/kmp_itt.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,9 @@
2424
#include "ittnotify_config.h"
2525
__itt_global __kmp_ittapi_clean_global;
2626
extern __itt_global __kmp_itt__ittapi_global;
27-
kmp_int32 __kmp_barrier_domain_count;
28-
kmp_int32 __kmp_region_domain_count;
29-
__itt_domain *__kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
30-
__itt_domain *__kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
31-
__itt_domain *__kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
32-
kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
27+
28+
kmp_itthash_t __kmp_itt_barrier_domains = {{0}, 0};
29+
kmp_itthash_t __kmp_itt_region_domains = {{0}, 0};
3330
__itt_domain *metadata_domain = NULL;
3431
__itt_string_handle *string_handle_imbl = NULL;
3532
__itt_string_handle *string_handle_loop = NULL;

openmp/runtime/src/kmp_itt.h

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -278,15 +278,21 @@ __kmp_inline void __kmp_itt_stack_callee_leave(__itt_caller);
278278
} /* if */ \
279279
} while (0)
280280

281-
const int KMP_MAX_FRAME_DOMAINS =
282-
512; // Maximum number of frame domains to use (maps to
281+
// Maximum number of frame domains to use (maps to
283282
// different OpenMP regions in the user source code).
284-
extern kmp_int32 __kmp_barrier_domain_count;
285-
extern kmp_int32 __kmp_region_domain_count;
286-
extern __itt_domain *__kmp_itt_barrier_domains[KMP_MAX_FRAME_DOMAINS];
287-
extern __itt_domain *__kmp_itt_region_domains[KMP_MAX_FRAME_DOMAINS];
288-
extern __itt_domain *__kmp_itt_imbalance_domains[KMP_MAX_FRAME_DOMAINS];
289-
extern kmp_int32 __kmp_itt_region_team_size[KMP_MAX_FRAME_DOMAINS];
283+
const int KMP_MAX_FRAME_DOMAINS = 997;
284+
typedef struct kmp_itthash_entry {
285+
ident_t *loc;
286+
int team_size;
287+
__itt_domain *d;
288+
struct kmp_itthash_entry *next_in_bucket;
289+
} kmp_itthash_entry_t;
290+
typedef struct kmp_itthash {
291+
kmp_itthash_entry_t *buckets[KMP_MAX_FRAME_DOMAINS];
292+
int count; // just a heuristic to limit number of entries
293+
} kmp_itthash_t;
294+
extern kmp_itthash_t __kmp_itt_region_domains;
295+
extern kmp_itthash_t __kmp_itt_barrier_domains;
290296
extern __itt_domain *metadata_domain;
291297
extern __itt_string_handle *string_handle_imbl;
292298
extern __itt_string_handle *string_handle_loop;

0 commit comments

Comments
 (0)