[Mlir-commits] [mlir] [mlir][gpu] Introduce `gpu.dynamic.shared.memory` Op (PR #71516)
Nicolas Vasilache
llvmlistbot at llvm.org
Tue Nov 7 03:38:33 PST 2023
================
@@ -433,6 +433,74 @@ def GPU_GPUFuncOp : GPU_Op<"func", [
let hasVerifier = 1;
}
+def GPU_DynamicSharedMemoryOp : GPU_Op<"dynamic.shared.memory",
+ [MemoryEffects<[MemWrite]>] > {
+ let summary = "Get the memref for dynamic shared memory";
+
+ let description = [{
+ This operation returns shared memory, also referred to as workgroup memory,
+ using given offsets.
+
+ It is possible to use both constants and SSA values as offsets.
+
+ If this operation is used within a `gpu.launch`, the verifier will make an
+ attempt to verify that the offsets fall within bounds by utilizing the
+ `dynamic_shared_memory_size` argument of `gpu.launch` when the values are
+ compile-time constants. Otherwise, the verifier does not perform offset
+ checks.
+
+ Examples:
+ ```mlir
+ // Constant value, offset = 32 * 64 * sizeof(f32) * 1
+ %0 = gpu.dynamic.shared.memory [1] : memref<32x64xf32, #gpu.address_space<workgroup>>
+
+ // Multi-dimensional constant values, offset = (32 * 64 * 1 + 8) * sizeof(f32)
+ %0 = gpu.dynamic.shared.memory [1, 0, 8] : memref<32x64xf32, #gpu.address_space<workgroup>>
----------------
nicolasvasilache wrote:
I find these semantics extremely confusing, see my comment in https://discourse.llvm.org/t/rfc-simplifying-dynamic-shared-memory-access-in-gpu/
Let's get a converged design in the RFC first.
https://github.com/llvm/llvm-project/pull/71516
More information about the Mlir-commits
mailing list