parent
e50a8bd19c
commit
8819b722ca
|
@ -3,7 +3,7 @@
|
|||
[TOC]
|
||||
|
||||
This document presents an introduction to using and interfacing with MLIR's
|
||||
diagnostics infrastucture.
|
||||
diagnostics infrastructure.
|
||||
|
||||
See [MLIR specification](LangRef.md) for more information about MLIR, the
|
||||
structure of the IR, operations, etc.
|
||||
|
|
|
@ -123,7 +123,7 @@ to have that information by construction.
|
|||
Launch a kernel given as a function on the specified grid of thread blocks.
|
||||
`gpu.launch` operations are lowered to `gpu.launch_func` operations by outlining
|
||||
the kernel body into a function, which is closer to the NVVM model. The
|
||||
`gpu.launch_func` operation has a function attribute namend `kernel` to specify
|
||||
`gpu.launch_func` operation has a function attribute named `kernel` to specify
|
||||
the kernel function to launch. The kernel function itself has a `nvvm.kernel`
|
||||
attribute.
|
||||
|
||||
|
|
|
@ -94,8 +94,8 @@ each `mlir::Value` is a `linalg.range`.
|
|||
|
||||
### Simplifying assumption
|
||||
|
||||
The `linalg.range` type is generally unrestricted beyond havind elements of
|
||||
`index` type. however it is used to build loop nests using the `affine.for`
|
||||
The `linalg.range` type is generally unrestricted beyond having elements of
|
||||
`index` type. However it is used to build loop nests using the `affine.for`
|
||||
[operation](../../Dialects/Affine.md) whose restrictions it inherits, at the
|
||||
point where `affine.for` operations are materialized. This is a tradeoff to
|
||||
reuse existing MLIR operations that are already known to lower to LLVM. As a
|
||||
|
|
|
@ -88,7 +88,7 @@ elements.
|
|||
|
||||
A View will contain as many strides as it has dimensions. For rank-reducing
|
||||
strides, this allows one to simply remove the stride of the dimension that is
|
||||
not included in the view. For example, taking a view that projets away the
|
||||
not included in the view. For example, taking a view that projects away the
|
||||
middle dimension from a `2x6x4` array will give one strides `24` and `1` over
|
||||
the original buffer.
|
||||
|
||||
|
@ -113,7 +113,7 @@ strides to this offset will let one access the other elements in the view. Since
|
|||
addresses are linearized anyway, and since we cannot have a rank-expanding view
|
||||
by construction, it is sufficient to store a single linearized offset.
|
||||
|
||||
For the sake of simplicitly, we will store the offset separate from the buffer
|
||||
For the sake of simplicity, we will store the offset separate from the buffer
|
||||
pointer. Combining the two can save the space required for storing the data but
|
||||
make functionality like alias analysis more complex. Implementing such a
|
||||
combination is left as an exercise to the reader.
|
||||
|
@ -289,7 +289,7 @@ recursive definition, although it is not stored in the descriptor.
|
|||
|
||||
The full conversion function is
|
||||
[available](https://github.com/tensorflow/mlir/blob/master/examples/Linalg1/lib/ConvertToLLVMDialect.cpp)
|
||||
and accounts for all these details and minimzes the number of instructions it
|
||||
and accounts for all these details and minimizes the number of instructions it
|
||||
produces. Let us consider some parts of this functions to understand how it
|
||||
operates.
|
||||
|
||||
|
|
Loading…
Reference in a new issue