[Openmp-commits] [openmp] [OpenMP] Improve performance of ticket lock (x86) (PR #143557)

Jonathan Peyton via Openmp-commits openmp-commits at lists.llvm.org
Tue Jun 10 11:16:51 PDT 2025


https://github.com/jpeyton52 updated https://github.com/llvm/llvm-project/pull/143557

>From f8c9131c2ec897dd7e9e2fb7834a8b0263b77dbb Mon Sep 17 00:00:00 2001
From: Jonathan Peyton <jonathan.l.peyton at intel.com>
Date: Tue, 10 Jun 2025 10:46:17 -0500
Subject: [PATCH 1/2] [OpenMP] Improve performance of ticket lock (x86)

Ticket lock has a yield operation which degrades performance on larger
server machines due to an unconditional pause operation.
---
 openmp/runtime/src/kmp_lock.cpp | 2 --
 1 file changed, 2 deletions(-)

diff --git a/openmp/runtime/src/kmp_lock.cpp b/openmp/runtime/src/kmp_lock.cpp
index 0ad14f862bcb9..daafc5c75b33e 100644
--- a/openmp/runtime/src/kmp_lock.cpp
+++ b/openmp/runtime/src/kmp_lock.cpp
@@ -720,8 +720,6 @@ int __kmp_release_ticket_lock(kmp_ticket_lock_t *lck, kmp_int32 gtid) {
   std::atomic_fetch_add_explicit(&lck->lk.now_serving, 1U,
                                  std::memory_order_release);
 
-  KMP_YIELD(distance >
-            (kmp_uint32)(__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc));
   return KMP_LOCK_RELEASED;
 }
 

>From 403c58f23248a45007c424c53a82ecb29b7c97b6 Mon Sep 17 00:00:00 2001
From: Jonathan Peyton <jonathan.l.peyton at intel.com>
Date: Tue, 10 Jun 2025 13:14:10 -0500
Subject: [PATCH 2/2] Remove the distance variable as suggested by Hansang

---
 openmp/runtime/src/kmp_lock.cpp | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/openmp/runtime/src/kmp_lock.cpp b/openmp/runtime/src/kmp_lock.cpp
index daafc5c75b33e..62df9c8c424bc 100644
--- a/openmp/runtime/src/kmp_lock.cpp
+++ b/openmp/runtime/src/kmp_lock.cpp
@@ -712,11 +712,6 @@ static int __kmp_test_ticket_lock_with_checks(kmp_ticket_lock_t *lck,
 }
 
 int __kmp_release_ticket_lock(kmp_ticket_lock_t *lck, kmp_int32 gtid) {
-  kmp_uint32 distance = std::atomic_load_explicit(&lck->lk.next_ticket,
-                                                  std::memory_order_relaxed) -
-                        std::atomic_load_explicit(&lck->lk.now_serving,
-                                                  std::memory_order_relaxed);
-
   std::atomic_fetch_add_explicit(&lck->lk.now_serving, 1U,
                                  std::memory_order_release);
 



More information about the Openmp-commits mailing list