22.05
|
OpenCL kernel to reshape the LHS matrix when performing the matrix multiplication. More...
#include <ClGemmReshapeLhsMatrixKernel.h>
Public Member Functions | |
ClGemmReshapeLhsMatrixKernel () | |
ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE (ClGemmReshapeLhsMatrixKernel) | |
void | configure (const ClCompileContext &compile_context, ITensorInfo *src, ITensorInfo *dst, const GEMMLHSMatrixInfo &lhs_info, bool reinterpret_src_as_3d=false) |
Initialise the kernel's input and output. More... | |
void | run_op (ITensorPack &tensors, const Window &window, cl::CommandQueue &queue) override |
Enqueue the OpenCL kernel to process the given window on the passed OpenCL command queue. More... | |
![]() | |
ICLKernel () | |
Constructor. More... | |
cl::Kernel & | kernel () |
Returns a reference to the OpenCL kernel of this object. More... | |
CLKernelType | type () const |
Returns the CL kernel type. More... | |
template<typename T > | |
void | add_1D_array_argument (unsigned int &idx, const ICLArray< T > *array, const Strides &strides, unsigned int num_dimensions, const Window &window) |
Add the passed 1D array's parameters to the object's kernel's arguments starting from the index idx. More... | |
void | add_1D_tensor_argument (unsigned int &idx, const ICLTensor *tensor, const Window &window) |
Add the passed 1D tensor's parameters to the object's kernel's arguments starting from the index idx. More... | |
void | add_1D_tensor_argument_if (bool cond, unsigned int &idx, const ICLTensor *tensor, const Window &window) |
Add the passed 1D tensor's parameters to the object's kernel's arguments starting from the index idx if the condition is true. More... | |
void | add_2D_tensor_argument (unsigned int &idx, const ICLTensor *tensor, const Window &window) |
Add the passed 2D tensor's parameters to the object's kernel's arguments starting from the index idx. More... | |
void | add_2D_tensor_argument_if (bool cond, unsigned int &idx, const ICLTensor *tensor, const Window &window) |
Add the passed 2D tensor's parameters to the object's kernel's arguments starting from the index idx if the condition is true. More... | |
void | add_3D_tensor_argument (unsigned int &idx, const ICLTensor *tensor, const Window &window) |
Add the passed 3D tensor's parameters to the object's kernel's arguments starting from the index idx. More... | |
void | add_4D_tensor_argument (unsigned int &idx, const ICLTensor *tensor, const Window &window) |
Add the passed 4D tensor's parameters to the object's kernel's arguments starting from the index idx. More... | |
void | add_5D_tensor_argument (unsigned int &idx, const ICLTensor *tensor, const Window &window) |
Add the passed 5D tensor's parameters to the object's kernel's arguments starting from the index idx. More... | |
void | add_3d_tensor_nhw_argument (unsigned int &idx, const ICLTensor *tensor) |
Add the passed NHW 3D tensor's parameters to the object's kernel's arguments by passing strides, dimensions and the offset to the first valid element in bytes. More... | |
void | add_4d_tensor_nhwc_argument (unsigned int &idx, const ICLTensor *tensor) |
Add the passed NHWC 4D tensor's parameters to the object's kernel's arguments by passing strides, dimensions and the offset to the first valid element in bytes. More... | |
virtual void | run (const Window &window, cl::CommandQueue &queue) |
Enqueue the OpenCL kernel to process the given window on the passed OpenCL command queue. More... | |
virtual void | run_composite_op (ITensorPack &tensors, const Window &window, cl::CommandQueue &queue, const experimental::dynamic_fusion::ClExecutionDescriptor &exec_desc) |
The execution is carried out through run_op method. But the run_op method needs to be extended to include ClExecutionDescriptor as now LWS GWS tuning will be separated from the IKernel. More... | |
template<typename T > | |
void | add_argument (unsigned int &idx, T value) |
Add the passed parameters to the object's kernel's arguments starting from the index idx. More... | |
void | set_lws_hint (const cl::NDRange &lws_hint) |
Set the Local-Workgroup-Size hint. More... | |
cl::NDRange | lws_hint () const |
Return the Local-Workgroup-Size hint. More... | |
void | set_wbsm_hint (const cl_int &wbsm_hint) |
Set the workgroup batch size modifier hint. More... | |
cl_int | wbsm_hint () const |
Return the workgroup batch size modifier hint. More... | |
const std::string & | config_id () const |
Get the configuration ID. More... | |
void | set_target (GPUTarget target) |
Set the targeted GPU architecture. More... | |
void | set_target (cl::Device &device) |
Set the targeted GPU architecture according to the CL device. More... | |
GPUTarget | get_target () const |
Get the targeted GPU architecture. More... | |
size_t | get_max_workgroup_size () |
Get the maximum workgroup size for the device the CLKernelLibrary uses. More... | |
template<unsigned int dimension_size> | |
void | add_tensor_argument (unsigned &idx, const ICLTensor *tensor, const Window &window) |
template<typename T , unsigned int dimension_size> | |
void | add_array_argument (unsigned &idx, const ICLArray< T > *array, const Strides &strides, unsigned int num_dimensions, const Window &window) |
Add the passed array's parameters to the object's kernel's arguments starting from the index idx. More... | |
![]() | |
IKernel () | |
Constructor. More... | |
virtual | ~IKernel ()=default |
Destructor. More... | |
virtual bool | is_parallelisable () const |
Indicates whether or not the kernel is parallelisable. More... | |
virtual BorderSize | border_size () const |
The size of the border for that kernel. More... | |
const Window & | window () const |
The maximum window the kernel can be executed on. More... | |
bool | is_window_configured () const |
Function to check if the embedded window of this kernel has been configured. More... | |
Static Public Member Functions | |
static Status | validate (const ITensorInfo *src, const ITensorInfo *dst, const GEMMLHSMatrixInfo &lhs_info, bool reinterpret_src_as_3d) |
Static function to check if given info will lead to a valid configuration. More... | |
![]() | |
static constexpr unsigned int | num_arguments_per_3d_tensor_nhw () |
Returns the number of arguments enqueued per NHW 3D Tensor object. More... | |
static constexpr unsigned int | num_arguments_per_4d_tensor_nhwc () |
Returns the number of arguments enqueued per NHWC 4D Tensor object. More... | |
static constexpr unsigned int | num_arguments_per_1D_array () |
Returns the number of arguments enqueued per 1D array object. More... | |
static constexpr unsigned int | num_arguments_per_1D_tensor () |
Returns the number of arguments enqueued per 1D tensor object. More... | |
static constexpr unsigned int | num_arguments_per_2D_tensor () |
Returns the number of arguments enqueued per 2D tensor object. More... | |
static constexpr unsigned int | num_arguments_per_3D_tensor () |
Returns the number of arguments enqueued per 3D tensor object. More... | |
static constexpr unsigned int | num_arguments_per_4D_tensor () |
Returns the number of arguments enqueued per 4D tensor object. More... | |
static cl::NDRange | gws_from_window (const Window &window) |
Get the global work size given an execution window. More... | |
OpenCL kernel to reshape the LHS matrix when performing the matrix multiplication.
In particular, this function splits the src matrix in blocks of size M0xK0 (defined through GEMMLHSInfo) and stores each one in the dst matrix unrolling the values
Definition at line 41 of file ClGemmReshapeLhsMatrixKernel.h.
Definition at line 104 of file ClGemmReshapeLhsMatrixKernel.cpp.
References arm_compute::ELEMENTWISE.
ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE | ( | ClGemmReshapeLhsMatrixKernel | ) |
void configure | ( | const ClCompileContext & | compile_context, |
ITensorInfo * | src, | ||
ITensorInfo * | dst, | ||
const GEMMLHSMatrixInfo & | lhs_info, | ||
bool | reinterpret_src_as_3d = false |
||
) |
Initialise the kernel's input and output.
[in] | compile_context | The compile context to be used. |
[in] | src | Input tensor. Data types supported: All |
[out] | dst | Output tensor. Data type supported: same as src |
[in] | lhs_info | LHS matrix information to be used for reshaping. This object contains all the necessary information to reshape the src tensor. Only the following values are supported: lhs_info.m0: 2,3,4,5,6,7,8 lhs_info.k0: 2,3,4,8,16 lhs_info.v0: greater than 0 lhs_info.transpose: true, false lhs_info.interleave: true, false |
[in] | reinterpret_src_as_3d | (Optional) True if the src has to be reinterpreted as 3D tensor |
Definition at line 109 of file ClGemmReshapeLhsMatrixKernel.cpp.
References CLBuildOptions::add_option(), CLBuildOptions::add_option_if(), CLBuildOptions::add_option_if_else(), ARM_COMPUTE_ERROR_ON, ARM_COMPUTE_ERROR_ON_NULLPTR, ARM_COMPUTE_ERROR_THROW_ON, arm_compute::create_kernel(), ITensorInfo::data_type(), ITensorInfo::dimension(), ITensorInfo::element_size(), arm_compute::get_cl_unsigned_type_from_element_size(), arm_compute::get_padding_info(), arm_compute::has_padding_changed(), GEMMLHSMatrixInfo::interleave, GEMMLHSMatrixInfo::k0, kernel_name, arm_compute::lower_string(), arm_compute::test::validation::m, GEMMLHSMatrixInfo::m0, ICLKernel::num_arguments_per_3d_tensor_nhw(), CLBuildOptions::options(), arm_compute::string_from_data_type(), arm_compute::support::cpp11::to_string(), GEMMLHSMatrixInfo::transpose, GEMMLHSMatrixInfo::v0, and arm_compute::cpu::kernels::validate_arguments().
|
overridevirtual |
Enqueue the OpenCL kernel to process the given window on the passed OpenCL command queue.
[in] | tensors | A vector containing the tensors to operato on. |
[in] | window | Region on which to execute the kernel. (Must be a valid region of the window returned by window()). |
[in,out] | queue | Command queue on which to enqueue the kernel. |
Reimplemented from ICLKernel.
Definition at line 177 of file ClGemmReshapeLhsMatrixKernel.cpp.
References arm_compute::ACL_DST, arm_compute::ACL_SRC, ICLKernel::add_3d_tensor_nhw_argument(), ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW, ARM_COMPUTE_ERROR_ON_NULLPTR, ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL, arm_compute::enqueue(), Window::first_slice_window_3D(), ITensorPack::get_const_tensor(), ITensorPack::get_tensor(), ICLKernel::lws_hint(), arm_compute::test::validation::reference::slice(), Window::slide_window_slice_3D(), and IKernel::window().
|
static |
Static function to check if given info will lead to a valid configuration.
Similar to ClGemmReshapeLhsMatrixKernel::configure()
Definition at line 171 of file ClGemmReshapeLhsMatrixKernel.cpp.
References ARM_COMPUTE_RETURN_ON_ERROR, and arm_compute::cpu::kernels::validate_arguments().