Skip to content

Commit 16140ff

Browse files
authored
[mlir][ROCDL] Add synchronization primitives (#80888)
This PR adds two LLVM intrinsics to MLIR: - llvm.amdgcn.s.setprio which sets the priority of a wave for the GPU scheduler - llvm.amdgcn.sched.barrier which sets a software barrier so that the scheduler cannot move instructions around
1 parent 63198e0 commit 16140ff

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,22 @@ def ROCDL_BarrierOp : ROCDL_Op<"barrier"> {
192192
let assemblyFormat = "attr-dict";
193193
}
194194

195+
def ROCDL_SetPrioOp : ROCDL_IntrOp<"s.setprio", [], [], [], 0>,
196+
Arguments<(ins I16Attr:$priority)> {
197+
let results = (outs);
198+
let assemblyFormat = "$priority attr-dict";
199+
string llvmBuilder =
200+
"createIntrinsicCall(builder, llvm::Intrinsic::amdgcn_s_setprio,builder.getInt16(op.getPriority()));";
201+
}
202+
203+
def ROCDL_SchedBarrier : ROCDL_IntrOp<"sched.barrier", [], [], [], 0>,
204+
Arguments<(ins I32Attr:$mask)> {
205+
let results = (outs);
206+
let assemblyFormat = "$mask attr-dict";
207+
string llvmBuilder =
208+
"createIntrinsicCall(builder, llvm::Intrinsic::amdgcn_sched_barrier,builder.getInt32(op.getMask()));";
209+
}
210+
195211

196212
//===---------------------------------------------------------------------===//
197213
// Xdlops intrinsics

mlir/test/Dialect/LLVMIR/rocdl.mlir

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ func.func @rocdl.barrier() {
3535
llvm.return
3636
}
3737

38+
func.func @rocdl.sched_barrier() {
39+
// CHECK: rocdl.sched.barrier
40+
rocdl.sched.barrier 0
41+
llvm.return
42+
}
43+
44+
func.func @rocdl.setprio() {
45+
// CHECK: rocdl.s.setprio
46+
rocdl.s.setprio 0
47+
llvm.return
48+
}
49+
3850
func.func @rocdl.xdlops(%arg0 : f32, %arg1 : f32,
3951
%arg2 : vector<32xf32>, %arg3 : i32,
4052
%arg4 : vector<16xf32>, %arg5 : vector<4xf32>,

mlir/test/Target/LLVMIR/rocdl.mlir

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,22 @@ llvm.func @rocdl.barrier() {
9090
llvm.return
9191
}
9292

93+
llvm.func @rocdl.setprio() {
94+
// CHECK: call void @llvm.amdgcn.s.setprio(i16 0)
95+
rocdl.s.setprio 0
96+
// CHECK-NEXT: call void @llvm.amdgcn.s.setprio(i16 1)
97+
rocdl.s.setprio 1
98+
llvm.return
99+
}
100+
101+
llvm.func @rocdl.schedbarrier() {
102+
// CHECK: call void @llvm.amdgcn.sched.barrier(i32 0)
103+
rocdl.sched.barrier 0
104+
// CHECK-NEXT: call void @llvm.amdgcn.sched.barrier(i32 1)
105+
rocdl.sched.barrier 1
106+
llvm.return
107+
}
108+
93109
llvm.func @rocdl.xdlops(%arg0 : f32, %arg1 : f32,
94110
%arg2 : vector<32 x f32>, %arg3: i32,
95111
%arg4 : vector<16 x f32>, %arg5 : vector<4xf32>,

0 commit comments

Comments
 (0)