[Openmp-commits] [openmp] 916a915 - [OpenMP] Assign thread ids in the cpuinfo topology method (#91013)
via Openmp-commits
openmp-commits at lists.llvm.org
Mon Jul 29 07:52:06 PDT 2024
Author: Jonathan Peyton
Date: 2024-07-29T09:52:02-05:00
New Revision: 916a91578f7b367c106859a0b46d8ce573bce36a
URL: https://github.com/llvm/llvm-project/commit/916a91578f7b367c106859a0b46d8ce573bce36a
DIFF: https://github.com/llvm/llvm-project/commit/916a91578f7b367c106859a0b46d8ce573bce36a.diff
LOG: [OpenMP] Assign thread ids in the cpuinfo topology method (#91013)
On non-hyperthreaded machines, the thread id is not always explicit in
the /proc/cpuinfo file. This patch adds a check to ensure the thread ids
are put in.
Added:
Modified:
openmp/runtime/src/kmp_affinity.cpp
Removed:
################################################################################
diff --git a/openmp/runtime/src/kmp_affinity.cpp b/openmp/runtime/src/kmp_affinity.cpp
index e6d00ed08702d..ab13ac4f43596 100644
--- a/openmp/runtime/src/kmp_affinity.cpp
+++ b/openmp/runtime/src/kmp_affinity.cpp
@@ -3841,6 +3841,32 @@ static bool __kmp_affinity_create_cpuinfo_map(int *line,
__kmp_free(counts);
CLEANUP_THREAD_INFO;
__kmp_topology->sort_ids();
+
+ int tlevel = __kmp_topology->get_level(KMP_HW_THREAD);
+ if (tlevel > 0) {
+ // If the thread level does not have ids, then put them in.
+ if (__kmp_topology->at(0).ids[tlevel] == kmp_hw_thread_t::UNKNOWN_ID) {
+ __kmp_topology->at(0).ids[tlevel] = 0;
+ }
+ for (int i = 1; i < __kmp_topology->get_num_hw_threads(); ++i) {
+ kmp_hw_thread_t &hw_thread = __kmp_topology->at(i);
+ if (hw_thread.ids[tlevel] != kmp_hw_thread_t::UNKNOWN_ID)
+ continue;
+ kmp_hw_thread_t &prev_hw_thread = __kmp_topology->at(i - 1);
+ // Check if socket, core, anything above thread level changed.
+ // If the ids did change, then restart thread id at 0
+ // Otherwise, set thread id to prev thread's id + 1
+ for (int j = 0; j < tlevel; ++j) {
+ if (hw_thread.ids[j] != prev_hw_thread.ids[j]) {
+ hw_thread.ids[tlevel] = 0;
+ break;
+ }
+ }
+ if (hw_thread.ids[tlevel] == kmp_hw_thread_t::UNKNOWN_ID)
+ hw_thread.ids[tlevel] = prev_hw_thread.ids[tlevel] + 1;
+ }
+ }
+
if (!__kmp_topology->check_ids()) {
kmp_topology_t::deallocate(__kmp_topology);
__kmp_topology = nullptr;
More information about the Openmp-commits
mailing list