[Openmp-commits] [openmp] [OpenMP][AIX] Use syssmt() to get the number of SMTs per physical CPU (PR #89985)
Xing Xue via Openmp-commits
openmp-commits at lists.llvm.org
Wed Apr 24 13:49:16 PDT 2024
https://github.com/xingxue-ibm created https://github.com/llvm/llvm-project/pull/89985
This patch changes to use system call `syssmt()` instead of `lpar_get_info()` to get the number of SMTs (logical processors) per physical processor for AIX. `lpar_get_info()` gives the max number of SMTs that the physical processor can support while `syssmt()` returns the number that is currently configured.
>From 0eb05bcb724d4f25b4564b8059ffd4aa469455c7 Mon Sep 17 00:00:00 2001
From: Xing Xue <xingxue at outlook.com>
Date: Wed, 24 Apr 2024 15:39:45 -0400
Subject: [PATCH] Use system call syssmt() to get the number of SMTs per
physical CPU.
---
openmp/runtime/src/kmp_affinity.cpp | 10 +---------
openmp/runtime/src/kmp_affinity.h | 2 ++
2 files changed, 3 insertions(+), 9 deletions(-)
diff --git a/openmp/runtime/src/kmp_affinity.cpp b/openmp/runtime/src/kmp_affinity.cpp
index 378e5aa296c41a..f34e55555545f3 100644
--- a/openmp/runtime/src/kmp_affinity.cpp
+++ b/openmp/runtime/src/kmp_affinity.cpp
@@ -3038,15 +3038,7 @@ static bool __kmp_affinity_create_cpuinfo_map(int *line,
KMP_INFORM(AffParseFilename, "KMP_AFFINITY", "system info for topology");
// Get the number of SMT threads per core.
- int retval =
- lpar_get_info(LPAR_INFO_FORMAT1, &cpuinfo, sizeof(lpar_info_format1_t));
- if (!retval)
- smt_threads = cpuinfo.smt_threads;
- else {
- CLEANUP_THREAD_INFO;
- *msg_id = kmp_i18n_str_UnknownTopology;
- return false;
- }
+ smt_threads = syssmt(GET_NUMBER_SMT_SETS, 0, 0, NULL);
// Allocate a resource set containing available system resourses.
rsethandle_t sys_rset = rs_alloc(RS_SYSTEM);
diff --git a/openmp/runtime/src/kmp_affinity.h b/openmp/runtime/src/kmp_affinity.h
index 8e9e7667eb904e..3dc2c84d53f773 100644
--- a/openmp/runtime/src/kmp_affinity.h
+++ b/openmp/runtime/src/kmp_affinity.h
@@ -322,6 +322,8 @@ class KMPHwlocAffinity : public KMPAffinity {
#include <sys/dr.h>
#include <sys/rset.h>
#define VMI_MAXRADS 64 // Maximum number of RADs allowed by AIX.
+#define GET_NUMBER_SMT_SETS 0x0004
+extern "C" int syssmt(int flags, int, int, int *);
#endif
class KMPNativeAffinity : public KMPAffinity {
class Mask : public KMPAffinity::Mask {
More information about the Openmp-commits
mailing list