21.02
|
OpenCL kernel to multiply matrices with QASYMM8 data type when only the input matrix RHS (input1) has been reshaped. More...
#include <CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel.h>
Public Member Functions | |
CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel () | |
Default Constructor. More... | |
CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel (const CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel &)=delete | |
Prevent instances of this class from being copied (As this class contains pointers) More... | |
CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel & | operator= (const CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel &)=delete |
Prevent instances of this class from being copied (As this class contains pointers) More... | |
CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel (CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel &&)=default | |
Allow instances of this class to be moved. More... | |
CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel & | operator= (CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel &&)=default |
Allow instances of this class to be moved. More... | |
void | configure (const ICLTensor *input0, const ICLTensor *input1, ICLTensor *output, const GEMMKernelInfo &gemm_info, const ICLTensor *vector_sum_col=nullptr, const ICLTensor *vector_sum_row=nullptr, const ICLTensor *bias=nullptr, const ICLTensor *output_multipliers=nullptr, const ICLTensor *output_shifts=nullptr) |
Initialise the kernel's input and output. More... | |
void | configure (const CLCompileContext &compile_context, const ICLTensor *input0, const ICLTensor *input1, ICLTensor *output, const GEMMKernelInfo &gemm_info, const ICLTensor *vector_sum_col=nullptr, const ICLTensor *vector_sum_row=nullptr, const ICLTensor *bias=nullptr, const ICLTensor *output_multipliers=nullptr, const ICLTensor *output_shifts=nullptr) |
Initialise the kernel's input and output. More... | |
void | run (const Window &window, cl::CommandQueue &queue) override |
Enqueue the OpenCL kernel to process the given window on the passed OpenCL command queue. More... | |
Public Member Functions inherited from ICLKernel | |
ICLKernel () | |
Constructor. More... | |
cl::Kernel & | kernel () |
Returns a reference to the OpenCL kernel of this object. 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... | |
virtual void | run_op (ITensorPack &tensors, const Window &window, cl::CommandQueue &queue) |
Enqueue the OpenCL kernel to process the given window on the passed OpenCL command queue. 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... | |
Public Member Functions inherited from IKernel | |
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... | |
Static Public Member Functions | |
static Status | validate (const ITensorInfo *input0, const ITensorInfo *input1, const ITensorInfo *output, const GEMMKernelInfo &gemm_info, const ITensorInfo *vector_sum_col=nullptr, const ITensorInfo *vector_sum_row=nullptr, const ITensorInfo *bias=nullptr, const ITensorInfo *output_multipliers=nullptr, const ITensorInfo *output_shifts=nullptr) |
Static function to check if given info will lead to a valid configuration of CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel. More... | |
Static Public Member Functions inherited from ICLKernel | |
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 multiply matrices with QASYMM8 data type when only the input matrix RHS (input1) has been reshaped.
Definition at line 39 of file CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel.h.
Default Constructor.
Definition at line 278 of file CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel.cpp.
|
delete |
Prevent instances of this class from being copied (As this class contains pointers)
|
default |
Allow instances of this class to be moved.
void configure | ( | const ICLTensor * | input0, |
const ICLTensor * | input1, | ||
ICLTensor * | output, | ||
const GEMMKernelInfo & | gemm_info, | ||
const ICLTensor * | vector_sum_col = nullptr , |
||
const ICLTensor * | vector_sum_row = nullptr , |
||
const ICLTensor * | bias = nullptr , |
||
const ICLTensor * | output_multipliers = nullptr , |
||
const ICLTensor * | output_shifts = nullptr |
||
) |
Initialise the kernel's input and output.
[in] | input0 | Input tensor containing the LHS matrix. Data type supported: QASYMM8/QASYMM8_SIGNED |
[in] | input1 | Input tensor containing the RHS reshaped matrix. Data type supported: QASYMM8/QASYMM8_SIGNED/QSYMM8/QSYMM8_PER_CHANNEL |
[out] | output | Output tensor. Data type supported: QASYMM8/QASYMM8_SIGNED/S32. |
[in] | gemm_info | GEMM information used to retrieve the original dimensions of the input matrices, output stage information and RHS/LHS info. Only the following values are supported for LHS info: lhs_info.m0: 2,3,4,5,6,7,8 lhs_info.k0: 2,3,4,8,16 Only the following values are supported for RHS info: rhs_info.n0: 2,3,4,8,16 rhs_info.k0: same as lhs_info.k0 rhs_info.transpose: true |
[in] | vector_sum_col | (Optional) Input row-vector of sums of all the entries in each column of matrix B. Note: vector_sum_col can be a nullptr in case a_offset = 0. Data type supported: S32 |
[in] | vector_sum_row | (Optional) Input row-vector of sums of all the entries in each row of matrix A. Note: vector_sum_row can be a nullptr in case b_offset = 0. Data type supported: S32 |
[in] | bias | (Optional) Biases tensor. Only shared biases supported and it can be a nullptr if the addition of biases is not required. Biases are 1D tensor with dimensions [OFM]. Data type supported: S32. |
[in] | output_multipliers | (Optional) Output multipliers tensor. In case of per-channel quantization, the number of multipliers must be equal to the number of filters (OFM). Supported data types: S32. |
[in] | output_shifts | (Optional) Output shifts tensor. In case of per-channel quantization, the number of multipliers must be equal to the number of filters (OFM). Supported data types: S32. |
Definition at line 296 of file CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel.cpp.
References CLKernelLibrary::get().
void configure | ( | const CLCompileContext & | compile_context, |
const ICLTensor * | input0, | ||
const ICLTensor * | input1, | ||
ICLTensor * | output, | ||
const GEMMKernelInfo & | gemm_info, | ||
const ICLTensor * | vector_sum_col = nullptr , |
||
const ICLTensor * | vector_sum_row = nullptr , |
||
const ICLTensor * | bias = nullptr , |
||
const ICLTensor * | output_multipliers = nullptr , |
||
const ICLTensor * | output_shifts = nullptr |
||
) |
Initialise the kernel's input and output.
[in] | compile_context | The compile context to be used. |
[in] | input0 | Input tensor containing the LHS matrix. Data type supported: QASYMM8/QASYMM8_SIGNED |
[in] | input1 | Input tensor containing the RHS reshaped matrix. Data type supported: same as input0 |
[out] | output | Output tensor. Data type supported: QASYMM8/QASYMM8_SIGNED/S32. |
[in] | gemm_info | GEMM information used to retrieve the original dimensions of the input matrices, output stage information and RHS/LHS info. Only the following values are supported for LHS info: lhs_info.m0: 2,3,4,5,6,7,8 lhs_info.k0: 2,3,4,8,16 Only the following values are supported for RHS info: rhs_info.n0: 2,3,4,8,16 rhs_info.k0: same as lhs_info.k0 rhs_info.transpose: true |
[in] | vector_sum_col | (Optional) Input row-vector of sums of all the entries in each column of matrix B. Note: vector_sum_col can be a nullptr in case a_offset = 0. Data type supported: S32 |
[in] | vector_sum_row | (Optional) Input row-vector of sums of all the entries in each row of matrix A. Note: vector_sum_row can be a nullptr in case b_offset = 0. Data type supported: S32 |
[in] | bias | (Optional) Biases tensor. Only shared biases supported and it can be a nullptr if the addition of biases is not required. Biases are 1D tensor with dimensions [OFM]. Data type supported: S32. |
[in] | output_multipliers | (Optional) Output multipliers tensor. In case of per-channel quantization, the number of multipliers must be equal to the number of filters (OFM). Supported data types: S32. |
[in] | output_shifts | (Optional) Output shifts tensor. In case of per-channel quantization, the number of multipliers must be equal to the number of filters (OFM). Supported data types: S32. |
Definition at line 303 of file CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel.cpp.
References GEMMKernelInfo::a_offset, CLBuildOptions::add_option(), CLBuildOptions::add_option_if(), ARM_COMPUTE_ERROR_ON, ARM_COMPUTE_ERROR_ON_NULLPTR, ARM_COMPUTE_ERROR_THROW_ON, GEMMKernelInfo::b_offset, arm_compute::create_kernel(), ITensorInfo::data_type(), GEMMKernelInfo::depth_output_gemm3d, ITensorInfo::dimension(), arm_compute::dot8_supported(), GEMMLowpOutputStageInfo::gemmlowp_max_bound, GEMMLowpOutputStageInfo::gemmlowp_min_bound, GEMMLowpOutputStageInfo::gemmlowp_multipliers, GEMMLowpOutputStageInfo::gemmlowp_offset, GEMMLowpOutputStageInfo::gemmlowp_shifts, CLKernelLibrary::get(), arm_compute::get_cl_dot8_acc_type_from_data_type(), arm_compute::get_cl_type_from_data_type(), arm_compute::get_min_max(), arm_compute::get_padding_info(), arm_compute::has_padding_changed(), ITensor::info(), GEMMLowpOutputStageInfo::is_quantized_per_channel, GEMMKernelInfo::k, kernel_name, GEMMKernelInfo::lhs_info, GEMMKernelInfo::m, GEMMLHSMatrixInfo::m0, GEMMKernelInfo::n, Dimensions< T >::num_dimensions(), ITensorInfo::num_dimensions(), CLBuildOptions::options(), GEMMKernelInfo::output_stage, arm_compute::preferred_dummy_work_items_support(), arm_compute::QUANTIZE_DOWN_FIXEDPOINT, GEMMKernelInfo::reinterpret_input_as_3d, GEMMKernelInfo::rhs_info, ITensorInfo::tensor_shape(), arm_compute::support::cpp11::to_string(), GEMMLowpOutputStageInfo::type, and arm_compute::validate_arguments().
|
delete |
Prevent instances of this class from being copied (As this class contains pointers)
|
default |
Allow instances of this class to be moved.
|
overridevirtual |
Enqueue the OpenCL kernel to process the given window on the passed OpenCL command queue.
[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 484 of file CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel.cpp.
References ICLKernel::add_1D_tensor_argument_if(), ICLKernel::add_2D_tensor_argument(), ICLKernel::add_2D_tensor_argument_if(), ARM_COMPUTE_ERROR_ON, ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW, ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL, BorderSize::bottom, Window::DimX, Window::DimY, Window::DimZ, arm_compute::enqueue(), Window::first_slice_window_3D(), ITensor::info(), ICLKernel::lws_hint(), ICLKernel::num_arguments_per_2D_tensor(), ITensorInfo::num_dimensions(), ITensorInfo::padding(), Window::set(), arm_compute::test::validation::reference::slice(), Window::slide_window_slice_3D(), ITensorInfo::strides_in_bytes(), BorderSize::top, and IKernel::window().
|
static |
Static function to check if given info will lead to a valid configuration of CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel.
[in] | input0 | Input tensor info for the LHS matrix. Data type supported: QASYMM8/QASYMM8_SIGNED |
[in] | input1 | Input tensor info for the RHS reshaped matrix. Data type supported: QASYMM8/QASYMM8_SIGNED/QSYMM8/QSYMM8_PER_CHANNEL |
[in] | output | Output tensor info. Data type supported: QASYMM8/QASYMM8_SIGNED/S32. |
[in] | gemm_info | GEMM information used to retrieve the original dimensions of the input matrices, output stage information and RHS/LHS info. Only the following values are supported for LHS info: lhs_info.m0: 2,3,4,5,6,7,8 lhs_info.k0: 2,3,4,8,16 Only the following values are supported for RHS info: rhs_info.n0: 2,3,4,8,16 rhs_info.k0: same as lhs_info.k0 rhs_info.transpose: true |
[in] | vector_sum_col | (Optional) Input row-vector info of sums of all the entries in each column of matrix B. Note: vector_sum_col can be a nullptr in case a_offset = 0. Data type supported: S32 |
[in] | vector_sum_row | (Optional) Input row-vector info of sums of all the entries in each row of matrix A. Note: vector_sum_row can be a nullptr in case b_offset = 0. Data type supported: S32 |
[in] | bias | (Optional) Biases tensor info. Only shared biases supported and it can be a nullptr if the addition of biases is not required. Biases are 1D tensor with dimensions [OFM]. Data type supported: S32. |
[in] | output_multipliers | (Optional) Output multipliers tensor info. In case of per-channel quantization, the number of multipliers must be equal to the number of filters (OFM). Supported data types: S32. |
[in] | output_shifts | (Optional) Output shifts tensor info. In case of per-channel quantization, the number of multipliers must be equal to the number of filters (OFM). Supported data types: S32. |
Definition at line 463 of file CLGEMMLowpMatrixMultiplyReshapedOnlyRHSKernel.cpp.
References ARM_COMPUTE_RETURN_ON_ERROR, ICloneable< T >::clone(), and arm_compute::validate_arguments().
Referenced by CLGEMMLowpMatrixMultiplyCore::validate().