workgroup_barrier.hpp Source File

workgroup_barrier.hpp Source File#

Composable Kernel: workgroup_barrier.hpp Source File
tile/core/arch/workgroup_barrier.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2018-2025, Advanced Micro Devices, Inc. All rights reserved.
3
4#pragma once
5
8
9namespace ck_tile {
10
12{
14
16 {
17 return __atomic_load_n(base_ptr + offset, __ATOMIC_RELAXED);
18 }
19
21 {
22 if(threadIdx.x == 0)
23 {
24 while(ld(offset) != value) {}
25 }
26 __syncthreads();
27 }
28
30 {
31 if(threadIdx.x == 0)
32 {
33 while(ld(offset) < value) {}
34 }
35 __syncthreads();
36 }
37
39 {
40 if(threadIdx.x == 0)
41 {
42 while(atomicCAS(base_ptr + offset, compare, value) != compare) {}
43 }
44 __syncthreads();
45 }
46
47 // enter critical zoon, assume buffer is zero when launch kernel
49
50 // exit critical zoon, assume buffer is zero when launch kernel
52
54 {
55 __syncthreads();
56 if(threadIdx.x == 0)
57 {
58 atomicAdd(base_ptr + offset, 1);
59 }
60 }
61
63};
64
65} // namespace ck_tile
#define CK_TILE_DEVICE
Definition config.hpp:41
Definition tile/core/algorithm/cluster_descriptor.hpp:13
const GenericPointer< typename T::ValueType > T2 value
Definition pointer.h:1697
unsigned int uint32_t
Definition stdint.h:126
Definition coordinate_transform.hpp:1392
CK_TILE_DEVICE void inc(uint32_t offset=0)
Definition tile/core/arch/workgroup_barrier.hpp:53
CK_TILE_DEVICE uint32_t ld(uint32_t offset=0)
Definition tile/core/arch/workgroup_barrier.hpp:15
CK_TILE_DEVICE workgroup_barrier(uint32_t *ptr)
Definition tile/core/arch/workgroup_barrier.hpp:13
uint32_t * base_ptr
Definition tile/core/arch/workgroup_barrier.hpp:62
CK_TILE_DEVICE void wait_lt(uint32_t value, uint32_t offset=0)
Definition tile/core/arch/workgroup_barrier.hpp:29
CK_TILE_DEVICE void wait_eq(uint32_t value, uint32_t offset=0)
Definition tile/core/arch/workgroup_barrier.hpp:20
CK_TILE_DEVICE void wait_set(uint32_t compare, uint32_t value, uint32_t offset=0)
Definition tile/core/arch/workgroup_barrier.hpp:38
CK_TILE_DEVICE void release(uint32_t offset=0)
Definition tile/core/arch/workgroup_barrier.hpp:51
CK_TILE_DEVICE void aquire(uint32_t offset=0)
Definition tile/core/arch/workgroup_barrier.hpp:48