Skip to content

Commit

Permalink
[AMDGPU] Add documentation for scheduler intrinsics (#69854)
Browse files Browse the repository at this point in the history
Adding sched_barrier, sched_group_barrier, and iglp_opt.
  • Loading branch information
bcahoon committed Nov 2, 2023
1 parent 94202e7 commit f4b54f7
Showing 1 changed file with 53 additions and 0 deletions.
53 changes: 53 additions & 0 deletions llvm/docs/AMDGPUUsage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1098,6 +1098,59 @@ The AMDGPU backend implements the following LLVM IR intrinsics.
with the fifth i32 operand. The i1 sixth operand is used to clamp
the output. The i1s preceding the vector operands decide the signedness.

llvm.amdgcn.sched_barrier Controls the types of instructions that may be allowed to cross the intrinsic
during instruction scheduling. The parameter is a mask for the instruction types
that can cross the intrinsic.

- 0x0000: No instructions may be scheduled across sched_barrier.
- 0x0001: All, non-memory, non-side-effect producing instructions may be
scheduled across sched_barrier, *i.e.* allow ALU instructions to pass.
- 0x0002: VALU instructions may be scheduled across sched_barrier.
- 0x0004: SALU instructions may be scheduled across sched_barrier.
- 0x0008: MFMA/WMMA instructions may be scheduled across sched_barrier.
- 0x0010: All VMEM instructions may be scheduled across sched_barrier.
- 0x0020: VMEM read instructions may be scheduled across sched_barrier.
- 0x0040: VMEM write instructions may be scheduled across sched_barrier.
- 0x0080: All DS instructions may be scheduled across sched_barrier.
- 0x0100: All DS read instructions may be scheduled accoss sched_barrier.
- 0x0200: All DS write instructions may be scheduled across sched_barrier.

llvm.amdgcn.sched_group_barrier Creates schedule groups with specific properties to create custom scheduling
pipelines. The ordering between groups is enforced by the instruction scheduler.
The intrinsic applies to the code that preceeds the intrinsic. The intrinsic
takes three values that control the behavior of the schedule groups.

- Mask : Classify instruction groups using the llvm.amdgcn.sched_barrier mask values.
- Size : The number of instructions that are in the group.
- SyncID : Order is enforced between groups with matching values.

The mask can include multiple instruction types. It is undefined behavior to set
values beyond the range of valid masks.

Combining multiple sched_group_barrier intrinsics enables an ordering of specific
instruction types during instruction scheduling. For example, the following enforces
a sequence of 1 VMEM read, followed by 1 VALU instruction, followed by 5 MFMA
instructions.

| ``// 1 VMEM read``
| ``__builtin_amdgcn_sched_group_barrier(32, 1, 0)``
| ``// 1 VALU``
| ``__builtin_amdgcn_sched_group_barrier(2, 1, 0)``
| ``// 5 MFMA``
| ``__builtin_amdgcn_sched_group_barrier(8, 5, 0)``

llvm.amdgcn.iglp_opt An **experimental** intrinsic for instruction group level parallelism. The intrinsic
implements predefined intruction scheduling orderings. The intrinsic applies to the
surrounding scheduling region. The intrinsic takes a value that specifies the
strategy. The compiler implements two strategies.

0. Interleave DS and MFMA instructions for small GEMM kernels.
1. Interleave DS and MFMA instructions for single wave small GEMM kernels.

Only one iglp_opt intrinsic may be used in a scheduling region. The iglp_opt intrinsic
cannot be combined with sched_barrier or sched_group_barrier.

The iglp_opt strategy implementations are subject to change.

============================================== ==========================================================

Expand Down

0 comments on commit f4b54f7

Please sign in to comment.