main
py 47 lines 1.28 KB
Raw
1 # SPDX-License-Identifier: Apache-2.0
2 # SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3
4 from cutlass import Int32
5 from cutlass._mlir.dialects import nvvm
6 from cutlass.cutlass_dsl import dsl_user_op
7
8 _SPACE_MAP = {
9 "cta": nvvm.MBarrierSpaceKind.CTA,
10 "cluster": nvvm.MBarrierSpaceKind.CLUSTER,
11 }
12
13 _MEMORY_ORDER_MAP = {
14 "weak": nvvm.MemOrderKind.WEAK,
15 "relaxed": nvvm.MemOrderKind.RELAXED,
16 "acquire": nvvm.MemOrderKind.ACQUIRE,
17 "release": nvvm.MemOrderKind.RELEASE,
18 "acq_rel": nvvm.MemOrderKind.ACQ_REL,
19 }
20
21
22 @dsl_user_op
23 def arrive(mbar, space: str = "cta", order: str = "relaxed", *, loc=None, ip=None):
24 nvvm.mbarrier_txn(
25 mbar.to_llvm_ptr(loc=loc, ip=ip),
26 Int32(1).ir_value(loc=loc, ip=ip),
27 kind=nvvm.MBarrierTxnKind.ARRIVE,
28 space=_SPACE_MAP[space],
29 order=_MEMORY_ORDER_MAP[order],
30 loc=loc,
31 ip=ip,
32 )
33
34
35 @dsl_user_op
36 def arrive_expect_tx(
37 mbar, size, space: str = "cta", order: str = "relaxed", *, loc=None, ip=None
38 ):
39 nvvm.mbarrier_txn(
40 mbar.to_llvm_ptr(loc=loc, ip=ip),
41 Int32(size).ir_value(loc=loc, ip=ip),
42 kind=nvvm.MBarrierTxnKind.ARRIVE_EXPECT_TX,
43 space=_SPACE_MAP[space],
44 order=_MEMORY_ORDER_MAP[order],
45 loc=loc,
46 ip=ip,
47 )