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

via Openmp-commits openmp-commits at lists.llvm.org
Mon Jul 21 06:26:40 PDT 2025


Author: Jonathan Peyton
Date: 2025-07-21T08:26:35-05:00
New Revision: c9fe19a99bf41c165524dcb3e9ff939527b5178b

URL: https://github.com/llvm/llvm-project/commit/c9fe19a99bf41c165524dcb3e9ff939527b5178b
DIFF: https://github.com/llvm/llvm-project/commit/c9fe19a99bf41c165524dcb3e9ff939527b5178b.diff

LOG: [OpenMP] Improve performance of ticket lock (x86) (#143557)

Ticket lock has a yield operation (shown below) which degrades
performance on larger server machines due to an unconditional pause
operation.

```
#define KMP_YIELD(cond)                                                        \
  {                                                                            \
    KMP_CPU_PAUSE();                                                           \
    if ((cond) && (KMP_TRY_YIELD))                                             \
      __kmp_yield();                                                           \
  }
```

Added: 
    

Modified: 
    openmp/runtime/src/kmp_lock.cpp

Removed: 
    


################################################################################
diff  --git a/openmp/runtime/src/kmp_lock.cpp b/openmp/runtime/src/kmp_lock.cpp
index 11fa233c4bd27..47dcc806e20d1 100644
--- a/openmp/runtime/src/kmp_lock.cpp
+++ b/openmp/runtime/src/kmp_lock.cpp
@@ -712,16 +712,9 @@ 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);
 
-  KMP_YIELD(distance >
-            (kmp_uint32)(__kmp_avail_proc ? __kmp_avail_proc : __kmp_xproc));
   return KMP_LOCK_RELEASED;
 }
 


        


More information about the Openmp-commits mailing list