aboutsummaryrefslogtreecommitdiff
path: root/compute_kernel_writer/src/cl/helpers/ICLMemoryOpHelper.h
diff options
context:
space:
mode:
authorGunes Bayir <gunes.bayir@arm.com>2023-08-07 16:52:33 +0100
committerGunes Bayir <gunes.bayir@arm.com>2023-08-16 08:30:04 +0000
commitc4117a3a18fb90a968eca9f3cefc8a2df9523021 (patch)
tree1c8d3ad1edc7e50acd59a4c1785d8969d7ee795f /compute_kernel_writer/src/cl/helpers/ICLMemoryOpHelper.h
parentead57c231bc8835506ccd44b9d61baf0897bc9e5 (diff)
downloadComputeLibrary-c4117a3a18fb90a968eca9f3cefc8a2df9523021.tar.gz
Add memory operation helper class for OpenCL buffer type
CLMemoryOpBufferHelper will be used by load/store facility in the CLKernelwriter. Partially Resolves: COMPMID-5791 Signed-off-by: Gunes Bayir <gunes.bayir@arm.com> Change-Id: I3e49b1cdd90f0bf6a43dcd6d88863d4a4496c04b Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/10119 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com> Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'compute_kernel_writer/src/cl/helpers/ICLMemoryOpHelper.h')
-rw-r--r--compute_kernel_writer/src/cl/helpers/ICLMemoryOpHelper.h41
1 files changed, 25 insertions, 16 deletions
diff --git a/compute_kernel_writer/src/cl/helpers/ICLMemoryOpHelper.h b/compute_kernel_writer/src/cl/helpers/ICLMemoryOpHelper.h
index 008d147fa2..7f363431e8 100644
--- a/compute_kernel_writer/src/cl/helpers/ICLMemoryOpHelper.h
+++ b/compute_kernel_writer/src/cl/helpers/ICLMemoryOpHelper.h
@@ -25,7 +25,11 @@
#ifndef CKW_SRC_CL_HELPERS_ICLMEMORYOPHELPER_H
#define CKW_SRC_CL_HELPERS_ICLMEMORYOPHELPER_H
+#include "ckw/TensorSampler.h"
+#include "src/Tensor3dMapper.h"
+
#include <cstdint>
+#include <memory>
#include <string>
namespace ckw
@@ -34,7 +38,8 @@ namespace ckw
// Forward Declarations
class CLTile;
class CLKernelWriter;
-class Tensor3dMapper;
+class ITensor;
+class TensorSampler;
enum class MemoryOperation;
/** Base class OpenCL memory operation helper classes
@@ -45,13 +50,15 @@ class ICLMemoryOpHelper
public:
/** Constructor
*
- * @param[in] x @ref ckw::CLKernelWriter object to write the code
- * @param[in] mapper @ref ckw::Tensor3dMapper object that tells how to map the Nd tensor to 3d
- * @param[in] op The memory operation to be done (e.g. Load/Store)
+ * @param[in] writer @ref ckw::CLKernelWriter object to write the code
+ * @param[in] tensor @ref ckw::ITensor object to perform the memory operation on
+ * @param[in] sampler @ref ckw::TensorSampler object that tells how to sample a tensor
+ * @param[in] op The memory operation to be done (e.g. Load/Store)
*/
- ICLMemoryOpHelper(CLKernelWriter *x, Tensor3dMapper *mapper, MemoryOperation op)
- : _writer(x), _mapper(mapper), _op(op)
+ ICLMemoryOpHelper(CLKernelWriter *writer, ITensor *tensor, TensorSampler *sampler, MemoryOperation op)
+ : _writer(writer), _tensor(tensor), _sampler(sampler), _op(op)
{
+ _mapper = std::make_unique<Tensor3dMapper>(tensor, sampler->format());
}
/** Copy constructor */
@@ -72,7 +79,7 @@ public:
* @param[in] z tile object that describes the z-coordinate of the tensor involved
* @param[in] b tile object that describes the batch offset of the tensor involved
*/
- virtual void initialize(CLTile *dst, CLTile *x, CLTile *z, CLTile *b) = 0;
+ virtual void initialize(const CLTile *dst, const CLTile *x, const CLTile *z, const CLTile *b) = 0;
/** Method that writes the actual code to the writer that performs the mentioned memory
* operation on the tile initialized. It writes the code for a specific row given in the
@@ -81,7 +88,7 @@ public:
* @param[in] row_id row id
* @param[in] coord_y y-coordinate as string
*/
- virtual void write(int32_t row_id, const std::string &coord_y) = 0;
+ virtual void write_row(int32_t row_id, const std::string &coord_y) = 0;
/** Method that finalizes the code in the writer object. This part is usually for taking
* care of finalizing anything that's been initialized inside @ref IMemoryHelper::initialize()
@@ -91,14 +98,16 @@ public:
virtual void finalize() = 0;
protected:
- CLKernelWriter *_writer;
- Tensor3dMapper *_mapper;
- MemoryOperation _op;
- CLTile *_dst{ nullptr };
- int32_t _ls_width_full{ 0 };
- std::string _coord_x{};
- std::string _coord_z{};
- std::string _coord_b{};
+ CLKernelWriter *_writer{ nullptr };
+ ITensor *_tensor{ nullptr };
+ TensorSampler *_sampler{ nullptr };
+ MemoryOperation _op;
+ std::unique_ptr<Tensor3dMapper> _mapper{ nullptr };
+ const CLTile *_dst{ nullptr };
+ int32_t _ls_width_full{ 0 };
+ std::string _coord_x{};
+ std::string _coord_z{};
+ std::string _coord_b{};
};
} // namespace ckw