[llvm] [openmp] [OFFLOAD] Add spirv implementation for named barrier (PR #180393)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 26 16:54:40 PDT 2026
================
@@ -181,8 +181,28 @@ void setCriticalLock(omp_lock_t *Lock) { setLock(Lock); }
///}
#if defined(__SPIRV__)
-void namedBarrierInit() { __builtin_trap(); } // TODO
-void namedBarrier() { __builtin_trap(); } // TODO
+
+[[clang::loader_uninitialized]] volatile Local<uint32_t> namedBarrierTracker;
+
+void namedBarrierInit() {
+ atomic::store(&namedBarrierTracker, 0u, atomic::seq_cst, atomic::workgroup);
+}
+
+void namedBarrier() {
+ uint32_t NumThreads = omp_get_num_threads();
+ uint32_t load =
+ atomic::add(&namedBarrierTracker, 1, atomic::seq_cst, atomic::workgroup);
+
+ if (load >= NumThreads - 1) {
+ atomic::store(&namedBarrierTracker, 0u, atomic::seq_cst, atomic::workgroup);
+ } else {
+ do {
+ load = atomic::load(&namedBarrierTracker, atomic::seq_cst,
+ atomic::workgroup);
+ } while (load != 0);
+ }
+ __gpu_sync_threads();
----------------
fineg74 wrote:
I see no difference in test performance with or without __gpu_sync_threads() call so removed it to move forward
https://github.com/llvm/llvm-project/pull/180393
More information about the llvm-commits
mailing list