From f8c9131c2ec897dd7e9e2fb7834a8b0263b77dbb Mon Sep 17 00:00:00 2001 From: Jonathan Peyton 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 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);