diff options
Diffstat (limited to 'compute_kernel_writer/prototype/include')
-rw-r--r-- | compute_kernel_writer/prototype/include/ckw/KernelWriter.h | 29 | ||||
-rw-r--r-- | compute_kernel_writer/prototype/include/ckw/TileOperand.h | 25 |
2 files changed, 49 insertions, 5 deletions
diff --git a/compute_kernel_writer/prototype/include/ckw/KernelWriter.h b/compute_kernel_writer/prototype/include/ckw/KernelWriter.h index c116e62650..72f85c78aa 100644 --- a/compute_kernel_writer/prototype/include/ckw/KernelWriter.h +++ b/compute_kernel_writer/prototype/include/ckw/KernelWriter.h @@ -129,11 +129,38 @@ public: /** Load the data from the tensor memory to the tile using the sampling information. * + * @param[out] tile The tile to be loaded. + * @param[in] tensor The tensor to be read. + * @param[in] sampler The tensor sampling information. + * @param[in] dilation_y Dilation in the Y dimension. + */ + void op_load(TileOperand &tile, const TensorOperand &tensor, const TensorTileSampler &sampler, const TileOperand &dilation_y = TileOperand("dil_y", 1)); + + /** Load the data from the tensor memory to the tile using the indirect buffer approach and respective of the sampling information. + * * @param[out] tile The tile to be loaded. * @param[in] tensor The tensor to be read. * @param[in] sampler The tensor sampling information. */ - void op_load(TileOperand &tile, TensorOperand &tensor, const TensorTileSampler &sampler); + void op_load_indirect(TileOperand &tile, const TensorOperand &tensor, const TensorTileSampler &sampler); + + /** Construct an indirection buffer in @p tile containing the precalculated addresses of elements in the source tensor. + * + * @param[out] tile The tile to be loaded. + * @param[in] tensor The tensor the be read. + * @param[in] sampler The tensor sampling information. + * @param[in] x The X coordinate. + * @param[in] y The Y coordinate. + * @param[in] x_off Offset in the X dimension. + * @param[in] y_off Offset in the Y dimension. + */ + void util_get_indirect_buffer(TileOperand &tile, + const TensorOperand &tensor, + const TensorTileSampler &sampler, + const TileOperand &x, + const TileOperand &y, + const TileOperand &x_off, + const TileOperand &y_off); /** Store the tile to the tensor using the specified sampling information. * diff --git a/compute_kernel_writer/prototype/include/ckw/TileOperand.h b/compute_kernel_writer/prototype/include/ckw/TileOperand.h index c071707a45..24ee373a24 100644 --- a/compute_kernel_writer/prototype/include/ckw/TileOperand.h +++ b/compute_kernel_writer/prototype/include/ckw/TileOperand.h @@ -37,6 +37,8 @@ namespace ckw class Kernel; +using TileContainer = std::vector<std::vector<std::string>>; + /** Tile operand which can be either scalar, vector or 2D tile. */ class TileOperand : public OperandBase { @@ -69,6 +71,13 @@ public: */ TileOperand(const ::std::string &name, float value); + /** Initialize a new instance of @ref TileOperand for compile-time constant variable. + * + * @param[in] name The name of the tile. + * @param[in] value The value of the tile. + */ + TileOperand(const ::std::string &name, const ::std::vector<std::vector<std::string>> &value, DataType dt); + /** Prohibit copy of tile operand. */ TileOperand(const TileOperand &) = delete; @@ -96,13 +105,21 @@ public: /** Get the scalar value of the tile. * * The tile must have the shape of 1, 1 (i.e. scalar). + * + * @return Scalar value as a string. + */ + std::string scalar_value() const; + + /** Get the values of the tile. + * + * @return 2D container of values. */ - ScalarValue scalar_value() const; + const TileContainer &value() const; private: - TileInfo _info; - ScalarValue _value{}; - bool _constant; + TileInfo _info; + TileContainer _value{}; + bool _constant; }; } // namespace ckw |