aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorgios Pinitas <georgios.pinitas@arm.com>2021-04-30 03:18:37 +0100
committerGeorgios Pinitas <georgios.pinitas@arm.com>2021-05-04 08:35:42 +0000
commit0dc0d8eda87a01c11f9caabc0d2f2933737ba469 (patch)
treebd0dc48b694f4be70c0fb5ac4fbe95a6c25596f9
parentb699940f5a947f900859c084baa7333dc393e85e (diff)
downloadComputeLibrary-0dc0d8eda87a01c11f9caabc0d2f2933737ba469.tar.gz
Rename PixelwiseMultiplications to Mul for simplicity
Changes the names of the following: - PixelWiseMultiplicationKernel to MulKernel for all backends - PixelWiseMultiplication to Mul for all backends Signed-off-by: Georgios Pinitas <georgios.pinitas@arm.com> Change-Id: I88108c2d22c888fce37ea1028863026160b9da97 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/5534 Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Michele Di Giorgio <michele.digiorgio@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
-rw-r--r--Android.bp8
-rw-r--r--SConscript4
-rw-r--r--arm_compute/runtime/CL/functions/CLPixelWiseMultiplication.h4
-rw-r--r--arm_compute/runtime/NEON/functions/NEPixelWiseMultiplication.h4
-rw-r--r--src/core/cpu/kernels/CpuMulKernel.cpp (renamed from src/core/cpu/kernels/CpuPixelWiseMultiplicationKernel.cpp)24
-rw-r--r--src/core/cpu/kernels/CpuMulKernel.h (renamed from src/core/cpu/kernels/CpuPixelWiseMultiplicationKernel.h)53
-rw-r--r--src/core/gpu/cl/kernels/ClMulKernel.cpp (renamed from src/core/gpu/cl/kernels/ClPixelWiseMultiplicationKernel.cpp)18
-rw-r--r--src/core/gpu/cl/kernels/ClMulKernel.h (renamed from src/core/gpu/cl/kernels/ClPixelWiseMultiplicationKernel.h)50
-rw-r--r--src/runtime/CL/functions/CLPixelWiseMultiplication.cpp26
-rw-r--r--src/runtime/NEON/functions/NEPixelWiseMultiplication.cpp26
-rw-r--r--src/runtime/cpu/operators/CpuMul.cpp (renamed from src/runtime/cpu/operators/CpuPixelWiseMultiplication.cpp)32
-rw-r--r--src/runtime/cpu/operators/CpuMul.h109
-rw-r--r--src/runtime/cpu/operators/CpuPixelWiseMultiplication.h133
-rw-r--r--src/runtime/gpu/cl/operators/ClMul.cpp (renamed from src/runtime/gpu/cl/operators/ClPixelWiseMultiplication.cpp)24
-rw-r--r--src/runtime/gpu/cl/operators/ClMul.h (renamed from src/runtime/gpu/cl/operators/ClPixelWiseMultiplication.h)55
15 files changed, 236 insertions, 334 deletions
diff --git a/Android.bp b/Android.bp
index 78ac7f130f..046b1c08a5 100644
--- a/Android.bp
+++ b/Android.bp
@@ -306,8 +306,8 @@ cc_library_static {
"src/core/cpu/kernels/CpuElementwiseUnaryKernel.cpp",
"src/core/cpu/kernels/CpuFillKernel.cpp",
"src/core/cpu/kernels/CpuFloorKernel.cpp",
+ "src/core/cpu/kernels/CpuMulKernel.cpp",
"src/core/cpu/kernels/CpuPermuteKernel.cpp",
- "src/core/cpu/kernels/CpuPixelWiseMultiplicationKernel.cpp",
"src/core/cpu/kernels/CpuPoolingAssemblyWrapperKernel.cpp",
"src/core/cpu/kernels/CpuPoolingKernel.cpp",
"src/core/cpu/kernels/CpuQuantizationKernel.cpp",
@@ -367,8 +367,8 @@ cc_library_static {
"src/core/gpu/cl/kernels/ClFillKernel.cpp",
"src/core/gpu/cl/kernels/ClFloorKernel.cpp",
"src/core/gpu/cl/kernels/ClHeightConcatenateKernel.cpp",
+ "src/core/gpu/cl/kernels/ClMulKernel.cpp",
"src/core/gpu/cl/kernels/ClPermuteKernel.cpp",
- "src/core/gpu/cl/kernels/ClPixelWiseMultiplicationKernel.cpp",
"src/core/gpu/cl/kernels/ClPoolingKernel.cpp",
"src/core/gpu/cl/kernels/ClQuantizationKernel.cpp",
"src/core/gpu/cl/kernels/ClReshapeKernel.cpp",
@@ -640,8 +640,8 @@ cc_library_static {
"src/runtime/cpu/operators/CpuElementwiseUnary.cpp",
"src/runtime/cpu/operators/CpuFill.cpp",
"src/runtime/cpu/operators/CpuFloor.cpp",
+ "src/runtime/cpu/operators/CpuMul.cpp",
"src/runtime/cpu/operators/CpuPermute.cpp",
- "src/runtime/cpu/operators/CpuPixelWiseMultiplication.cpp",
"src/runtime/cpu/operators/CpuPooling.cpp",
"src/runtime/cpu/operators/CpuPoolingAssemblyDispatch.cpp",
"src/runtime/cpu/operators/CpuQuantization.cpp",
@@ -663,9 +663,9 @@ cc_library_static {
"src/runtime/gpu/cl/operators/ClFill.cpp",
"src/runtime/gpu/cl/operators/ClFloor.cpp",
"src/runtime/gpu/cl/operators/ClLogicalNot.cpp",
+ "src/runtime/gpu/cl/operators/ClMul.cpp",
"src/runtime/gpu/cl/operators/ClPRelu.cpp",
"src/runtime/gpu/cl/operators/ClPermute.cpp",
- "src/runtime/gpu/cl/operators/ClPixelWiseMultiplication.cpp",
"src/runtime/gpu/cl/operators/ClPooling.cpp",
"src/runtime/gpu/cl/operators/ClQuantization.cpp",
"src/runtime/gpu/cl/operators/ClReshape.cpp",
diff --git a/SConscript b/SConscript
index 63c2a483dc..da92409867 100644
--- a/SConscript
+++ b/SConscript
@@ -312,7 +312,7 @@ if env['neon']:
'src/core/cpu/kernels/CpuElementwiseUnaryKernel.cpp',
'src/core/cpu/kernels/CpuFillKernel.cpp',
'src/core/cpu/kernels/CpuFloorKernel.cpp',
- 'src/core/cpu/kernels/CpuPixelWiseMultiplicationKernel.cpp',
+ 'src/core/cpu/kernels/CpuMulKernel.cpp',
'src/core/cpu/kernels/CpuQuantizationKernel.cpp',
'src/core/cpu/kernels/CpuScaleKernel.cpp',
'src/core/cpu/kernels/CpuSoftmaxKernel.cpp',
@@ -359,7 +359,7 @@ if env['neon']:
'src/runtime/cpu/operators/CpuElementwiseUnary.cpp',
'src/runtime/cpu/operators/CpuFill.cpp',
'src/runtime/cpu/operators/CpuFloor.cpp',
- 'src/runtime/cpu/operators/CpuPixelWiseMultiplication.cpp',
+ 'src/runtime/cpu/operators/CpuMul.cpp',
'src/runtime/cpu/operators/CpuQuantization.cpp',
'src/runtime/cpu/operators/CpuReshape.cpp',
'src/runtime/cpu/operators/CpuScale.cpp',
diff --git a/arm_compute/runtime/CL/functions/CLPixelWiseMultiplication.h b/arm_compute/runtime/CL/functions/CLPixelWiseMultiplication.h
index 14422383ad..029b924512 100644
--- a/arm_compute/runtime/CL/functions/CLPixelWiseMultiplication.h
+++ b/arm_compute/runtime/CL/functions/CLPixelWiseMultiplication.h
@@ -34,7 +34,7 @@ class CLCompileContext;
class ICLTensor;
class ITensorInfo;
-/** Basic function to run @ref opencl::ClPixelWiseMultiplication. */
+/** Basic function to run @ref opencl::ClMul. */
class CLPixelWiseMultiplication : public IFunction
{
public:
@@ -123,7 +123,7 @@ private:
std::unique_ptr<Impl> _impl;
};
-/** Basic function to run @ref opencl::ClComplexPixelWiseMultiplication. */
+/** Basic function to run @ref opencl::ClComplexMul. */
class CLComplexPixelWiseMultiplication : public IFunction
{
public:
diff --git a/arm_compute/runtime/NEON/functions/NEPixelWiseMultiplication.h b/arm_compute/runtime/NEON/functions/NEPixelWiseMultiplication.h
index f8074e791a..4684c2d4b8 100644
--- a/arm_compute/runtime/NEON/functions/NEPixelWiseMultiplication.h
+++ b/arm_compute/runtime/NEON/functions/NEPixelWiseMultiplication.h
@@ -34,7 +34,7 @@ namespace arm_compute
class ITensor;
class ITensorInfo;
-/** Basic function to run @ref cpu::CpuPixelWiseMultiplication */
+/** Basic function to run @ref cpu::CpuMul */
class NEPixelWiseMultiplication : public IFunction
{
public:
@@ -131,7 +131,7 @@ private:
std::unique_ptr<Impl> _impl;
};
-/** Basic function to run @ref cpu::CpuComplexPixelWiseMultiplication. */
+/** Basic function to run @ref cpu::CpuComplexMul. */
class NEComplexPixelWiseMultiplication : public IFunction
{
public:
diff --git a/src/core/cpu/kernels/CpuPixelWiseMultiplicationKernel.cpp b/src/core/cpu/kernels/CpuMulKernel.cpp
index 91b7552ecf..dabf656e6e 100644
--- a/src/core/cpu/kernels/CpuPixelWiseMultiplicationKernel.cpp
+++ b/src/core/cpu/kernels/CpuMulKernel.cpp
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#include "src/core/cpu/kernels/CpuPixelWiseMultiplicationKernel.h"
+#include "src/core/cpu/kernels/CpuMulKernel.h"
#include "arm_compute/core/ITensor.h"
#include "arm_compute/core/TensorInfo.h"
@@ -1475,7 +1475,7 @@ void mul_U8_S16_S16(const ITensor *src1, const ITensor *src2, ITensor *out, cons
}
} // namespace
-void CpuPixelWiseMultiplicationKernel::configure(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy)
+void CpuMulKernel::configure(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy)
{
ARM_COMPUTE_UNUSED(rounding_policy);
ARM_COMPUTE_ERROR_ON_NULLPTR(src1, src2, dst);
@@ -1623,8 +1623,8 @@ void CpuPixelWiseMultiplicationKernel::configure(ITensorInfo *src1, ITensorInfo
ICpuKernel::configure(win);
}
-Status CpuPixelWiseMultiplicationKernel::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, float scale, ConvertPolicy overflow_policy,
- RoundingPolicy rounding_policy)
+Status CpuMulKernel::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, float scale, ConvertPolicy overflow_policy,
+ RoundingPolicy rounding_policy)
{
ARM_COMPUTE_ERROR_ON_NULLPTR(src1, src2, dst);
ARM_COMPUTE_RETURN_ON_ERROR(validate_arguments(src1, src2, dst, scale, overflow_policy, rounding_policy));
@@ -1632,7 +1632,7 @@ Status CpuPixelWiseMultiplicationKernel::validate(const ITensorInfo *src1, const
return Status{};
}
-void CpuPixelWiseMultiplicationKernel::run_op(ITensorPack &tensors, const Window &window, const ThreadInfo &info)
+void CpuMulKernel::run_op(ITensorPack &tensors, const Window &window, const ThreadInfo &info)
{
ARM_COMPUTE_UNUSED(info);
ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this);
@@ -1656,9 +1656,9 @@ void CpuPixelWiseMultiplicationKernel::run_op(ITensorPack &tensors, const Window
(*_func_float)(src1, src2, dst, window, _scale);
}
}
-const char *CpuPixelWiseMultiplicationKernel::name() const
+const char *CpuMulKernel::name() const
{
- return "CpuPixelWiseMultiplicationKernel";
+ return "CpuMulKernel";
}
namespace
{
@@ -1682,7 +1682,7 @@ Status validate_arguments_complex(const ITensorInfo *src1, const ITensorInfo *sr
}
} // namespace
-void CpuComplexPixelWiseMultiplicationKernel::configure(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst)
+void CpuComplexMulKernel::configure(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst)
{
ARM_COMPUTE_ERROR_ON_NULLPTR(src1, src2, dst);
ARM_COMPUTE_ERROR_THROW_ON(validate_arguments_complex(src1, src2, dst));
@@ -1699,7 +1699,7 @@ void CpuComplexPixelWiseMultiplicationKernel::configure(ITensorInfo *src1, ITens
ICpuKernel::configure(win);
}
-Status CpuComplexPixelWiseMultiplicationKernel::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst)
+Status CpuComplexMulKernel::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst)
{
ARM_COMPUTE_ERROR_ON_NULLPTR(src1, src2, dst);
ARM_COMPUTE_RETURN_ON_ERROR(validate_arguments_complex(src1, src2, dst));
@@ -1707,7 +1707,7 @@ Status CpuComplexPixelWiseMultiplicationKernel::validate(const ITensorInfo *src1
return Status{};
}
-void CpuComplexPixelWiseMultiplicationKernel::run_op(ITensorPack &tensors, const Window &window, const ThreadInfo &info)
+void CpuComplexMulKernel::run_op(ITensorPack &tensors, const Window &window, const ThreadInfo &info)
{
ARM_COMPUTE_UNUSED(info);
ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this);
@@ -1720,9 +1720,9 @@ void CpuComplexPixelWiseMultiplicationKernel::run_op(ITensorPack &tensors, const
c_mul_F32_F32_F32_n(src1, src2, dst, window);
}
-const char *CpuComplexPixelWiseMultiplicationKernel::name() const
+const char *CpuComplexMulKernel::name() const
{
- return "CpuComplexPixelWiseMultiplicationKernel";
+ return "CpuComplexMulKernel";
}
} // namespace kernels
} // namespace cpu
diff --git a/src/core/cpu/kernels/CpuPixelWiseMultiplicationKernel.h b/src/core/cpu/kernels/CpuMulKernel.h
index 567f08d06e..3e667bc4be 100644
--- a/src/core/cpu/kernels/CpuPixelWiseMultiplicationKernel.h
+++ b/src/core/cpu/kernels/CpuMulKernel.h
@@ -21,8 +21,8 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#ifndef ARM_COMPUTE_CPU_PIXELWISE_MULTIPLICATION_KERNEL_H
-#define ARM_COMPUTE_CPU_PIXELWISE_MULTIPLICATION_KERNEL_H
+#ifndef ARM_COMPUTE_CPU_MUL_KERNEL_H
+#define ARM_COMPUTE_CPU_MUL_KERNEL_H
#include "src/core/common/Macros.h"
#include "src/core/cpu/ICpuKernel.h"
@@ -33,13 +33,13 @@ namespace cpu
{
namespace kernels
{
-/** Interface for the kernel to perform addition between two tensors */
-class CpuPixelWiseMultiplicationKernel : public ICpuKernel
+/** Interface for the kernel to perform multiplication between two tensors */
+class CpuMulKernel : public ICpuKernel
{
public:
/** Default constructor */
- CpuPixelWiseMultiplicationKernel() = default;
- ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(CpuPixelWiseMultiplicationKernel);
+ CpuMulKernel() = default;
+ ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(CpuMulKernel);
/** Initialise the kernel's input, dst and border mode.
*
* Valid configurations (Src1,Src2) -> Dst :
@@ -69,32 +69,9 @@ public:
* @param[in] rounding_policy Rounding policy.
*/
void configure(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy);
- /** Static function to check if given info will lead to a valid configuration of @ref CpuPixelWiseMultiplicationKernel
+ /** Static function to check if given info will lead to a valid configuration
*
- * Valid configurations (Src1,Src2) -> Dst :
- * Support: Broadcast? Scale=1/255?
- * - (U8,U8) -> U8, S16 N Y
- * - (U8,S16) -> S16 N Y
- * - (S16,U8) -> S16 N Y
- * - (S16,S16) -> S16 N Y
- * - (S32,S32) -> S32 Y N
- * - (F16,F16) -> F16 N Y
- * - (F32,F32) -> F32 Y Y
- * - (QASYMM8,QASYMM8) -> QASYMM8 Y Y
- * - (QASYMM8_SIGNED,QASYMM8_SIGNED) -> QASYMM8_SIGNED Y Y
- * - (QSYMM16,QSYMM16) -> QSYMM16, S32 N Y
- *
- * @note For @p scale equal to 1/255 only round to nearest even (implemented as round half up) is supported.
- * For all other scale values only round to zero (implemented as round towards minus infinity) is supported.
- *
- * @param[in] src1 First src tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/S32/QSYMM16/F16/F32
- * @param[in] src2 Second src tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/S32/QSYMM16/F16/F32
- * @param[in] dst Dst tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/S32/QSYMM16/F16/F32
- * @param[in] scale Scale to apply after multiplication.
- * Scale must be positive and its value must be either 1/255 or 1/2^n where n is between 0 and 15.
- * If both @p src1, @p src2 and @p dst are of datatype S32, scale cannot be 1/255
- * @param[in] overflow_policy Overflow policy. ConvertPolicy cannot be WRAP if any of the srcs is of quantized datatype
- * @param[in] rounding_policy Rounding policy.
+ * Similar to @ref CpuMulKernel::configure()
*
* @return a status
*/
@@ -142,12 +119,12 @@ private:
};
/** Interface for the complex pixelwise multiplication kernel. */
-class CpuComplexPixelWiseMultiplicationKernel : public ICpuKernel
+class CpuComplexMulKernel : public ICpuKernel
{
public:
/** Default constructor */
- CpuComplexPixelWiseMultiplicationKernel() = default;
- ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(CpuComplexPixelWiseMultiplicationKernel);
+ CpuComplexMulKernel() = default;
+ ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(CpuComplexMulKernel);
/** Initialise the kernel's src, dst and border mode.
*
* @param[in] src1 An src tensor. Data types supported: F32. Number of channels supported: 2 (complex tensor).
@@ -155,11 +132,9 @@ public:
* @param[out] dst The dst tensor, Data types supported: same as @p src1. Number of channels supported: same as @p src1.
*/
void configure(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst);
- /** Static function to check if given info will lead to a valid configuration of @ref CpuComplexPixelWiseMultiplicationKernel
+ /** Static function to check if given info will lead to a valid configuration
*
- * @param[in] src1 An src tensor info. Data types supported: F32. Number of channels supported: 2 (complex tensor).
- * @param[in] src2 An src tensor info. Data types supported: same as @p src1. Number of channels supported: same as @p src1.
- * @param[in] dst The dst tensor info. Data types supported: same as @p src1. Number of channels supported: same as @p src1.
+ * Similar to @ref CpuComplexMulKernel::configure()
*
* @return a status
*/
@@ -172,4 +147,4 @@ public:
} // namespace kernels
} // namespace cpu
} // namespace arm_compute
-#endif /*ARM_COMPUTE_CPU_PIXELWISE_MULTIPLICATION_KERNEL_H */
+#endif /* ARM_COMPUTE_CPU_MUL_KERNEL_H */
diff --git a/src/core/gpu/cl/kernels/ClPixelWiseMultiplicationKernel.cpp b/src/core/gpu/cl/kernels/ClMulKernel.cpp
index 5aed824d2c..837324ede2 100644
--- a/src/core/gpu/cl/kernels/ClPixelWiseMultiplicationKernel.cpp
+++ b/src/core/gpu/cl/kernels/ClMulKernel.cpp
@@ -21,7 +21,7 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#include "src/core/gpu/cl/kernels/ClPixelWiseMultiplicationKernel.h"
+#include "src/core/gpu/cl/kernels/ClMulKernel.h"
#include "arm_compute/core/CL/CLHelpers.h"
#include "arm_compute/core/CL/CLKernelLibrary.h"
@@ -92,8 +92,8 @@ Status validate_arguments(const ITensorInfo *src1, const ITensorInfo *src2, cons
}
} // namespace
-void ClPixelWiseMultiplicationKernel::configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale,
- ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info)
+void ClMulKernel::configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale,
+ ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info)
{
ARM_COMPUTE_ERROR_ON_NULLPTR(src1, src2, dst);
ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(src1, src2, dst,
@@ -228,8 +228,8 @@ void ClPixelWiseMultiplicationKernel::configure(const CLCompileContext &compile_
_config_id += support::cpp11::to_string(dst->dimension(2));
}
-Status ClPixelWiseMultiplicationKernel::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, float scale,
- ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info)
+Status ClMulKernel::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, float scale,
+ ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info)
{
ARM_COMPUTE_ERROR_ON_NULLPTR(src1, src2, dst);
ARM_COMPUTE_RETURN_ON_ERROR(validate_arguments(src1, src2, dst, scale, overflow_policy, rounding_policy, act_info));
@@ -237,7 +237,7 @@ Status ClPixelWiseMultiplicationKernel::validate(const ITensorInfo *src1, const
return Status{};
}
-void ClPixelWiseMultiplicationKernel::run_op(ITensorPack &tensors, const Window &window, cl::CommandQueue &queue)
+void ClMulKernel::run_op(ITensorPack &tensors, const Window &window, cl::CommandQueue &queue)
{
ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this);
ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW(ICLKernel::window(), window);
@@ -311,7 +311,7 @@ Status validate_arguments_complex(const ITensorInfo *src1, const ITensorInfo *sr
}
} // namespace
-void ClComplexPixelWiseMultiplicationKernel::configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info)
+void ClComplexMulKernel::configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info)
{
ARM_COMPUTE_ERROR_ON_NULLPTR(src1, src2, dst);
ARM_COMPUTE_ERROR_THROW_ON(validate_arguments_complex(src1, src2, dst, act_info));
@@ -339,7 +339,7 @@ void ClComplexPixelWiseMultiplicationKernel::configure(const CLCompileContext &c
ARM_COMPUTE_ERROR_ON(has_padding_changed(padding_info));
}
-Status ClComplexPixelWiseMultiplicationKernel::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, const ActivationLayerInfo &act_info)
+Status ClComplexMulKernel::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, const ActivationLayerInfo &act_info)
{
ARM_COMPUTE_ERROR_ON_NULLPTR(src1, src2, dst);
ARM_COMPUTE_RETURN_ON_ERROR(validate_arguments_complex(src1, src2, dst, act_info));
@@ -347,7 +347,7 @@ Status ClComplexPixelWiseMultiplicationKernel::validate(const ITensorInfo *src1,
return Status{};
}
-void ClComplexPixelWiseMultiplicationKernel::run_op(ITensorPack &tensors, const Window &window, cl::CommandQueue &queue)
+void ClComplexMulKernel::run_op(ITensorPack &tensors, const Window &window, cl::CommandQueue &queue)
{
ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this);
ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW(ICLKernel::window(), window);
diff --git a/src/core/gpu/cl/kernels/ClPixelWiseMultiplicationKernel.h b/src/core/gpu/cl/kernels/ClMulKernel.h
index 5b827262a1..e2e54a836e 100644
--- a/src/core/gpu/cl/kernels/ClPixelWiseMultiplicationKernel.h
+++ b/src/core/gpu/cl/kernels/ClMulKernel.h
@@ -21,8 +21,8 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#ifndef ARM_COMPUTE_CLPIXELWISEMULTIPLICATIONKERNEL_H
-#define ARM_COMPUTE_CLPIXELWISEMULTIPLICATIONKERNEL_H
+#ifndef ARM_COMPUTE_CL_MUL_KERNEL_H
+#define ARM_COMPUTE_CL_MUL_KERNEL_H
#include "src/core/common/Macros.h"
#include "src/core/gpu/cl/ClCompileContext.h"
@@ -35,12 +35,12 @@ namespace opencl
namespace kernels
{
/** Interface for the pixelwise multiplication kernel. */
-class ClPixelWiseMultiplicationKernel : public IClKernel
+class ClMulKernel : public IClKernel
{
public:
/** Default constructor */
- ClPixelWiseMultiplicationKernel() = default;
- ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClPixelWiseMultiplicationKernel);
+ ClMulKernel() = default;
+ ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClMulKernel);
/** Initialise the kernel's src and dst.
*
* Valid configurations (Input1,Input2) -> Output :
@@ -69,30 +69,9 @@ public:
*/
void configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale,
ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info = ActivationLayerInfo());
- /** Static function to check if given info will lead to a valid configuration of @ref ClPixelWiseMultiplicationKernel
+ /** Static function to check if given info will lead to a valid configuration
*
- * Valid configurations (Input1,Input2) -> Output :
- *
- * - (U8,U8) -> U8
- * - (U8,U8) -> S16
- * - (U8,S16) -> S16
- * - (S16,U8) -> S16
- * - (S16,S16) -> S16
- * - (F16,F16) -> F16
- * - (F32,F32) -> F32
- * - (QASYMM8,QASYMM8) -> QASYMM8
- * - (QASYMM8_SIGNED,QASYMM8_SIGNED) -> QASYMM8_SIGNED
- * - (QSYMM16,QSYMM16) -> QSYMM16
- * - (QSYMM16,QSYMM16) -> S32
- *
- * @param[in] src1 An src tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/F32.
- * @param[in] src2 An src tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/F32.
- * @param[in] dst The dst tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/F32.
- * @param[in] scale Scale to apply after multiplication.
- * Scale must be positive and its value must be either 1/255 or 1/2^n where n is between 0 and 15.
- * @param[in] overflow_policy Overflow policy. Supported overflow policies: Wrap, Saturate
- * @param[in] rounding_policy Rounding policy. Supported rounding modes: to zero, to nearest even.
- * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+ * Similar to @ref ClMulKernel::configure()
*
* @return a status
*/
@@ -104,12 +83,12 @@ public:
};
/** Interface for the complex pixelwise multiplication kernel. */
-class ClComplexPixelWiseMultiplicationKernel : public ICLKernel
+class ClComplexMulKernel : public ICLKernel
{
public:
/** Default constructor */
- ClComplexPixelWiseMultiplicationKernel() = default;
- ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClComplexPixelWiseMultiplicationKernel);
+ ClComplexMulKernel() = default;
+ ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(ClComplexMulKernel);
/** Initialise the kernel's src and dst.
*
* @param[in] compile_context The compile context to be used.
@@ -119,12 +98,9 @@ public:
* @param[in] act_info (Optional) Activation layer information in case of a fused activation.
*/
void configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
- /** Static function to check if given info will lead to a valid configuration of @ref ClComplexPixelWiseMultiplicationKernel
+ /** Static function to check if given info will lead to a valid configuration
*
- * @param[in] src1 An src tensor info. Data types supported: F32. Number of channels supported: 2.
- * @param[in] src2 An src tensor info. Data types supported: same as @p src1. Number of channels supported: same as @p src1.
- * @param[in] dst The dst tensor info. Data types supported: same as @p src1. Number of channels supported: same as @p src1.
- * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+ * Similar to @ref ClComplexMulKernel::configure()
*
* @return a status
*/
@@ -136,4 +112,4 @@ public:
} // namespace kernels
} // namespace opencl
} // namespace arm_compute
-#endif /*ARM_COMPUTE_CLPIXELWISEMULTIPLICATIONKERNEL_H */
+#endif /* ARM_COMPUTE_CL_MUL_KERNEL_H */
diff --git a/src/runtime/CL/functions/CLPixelWiseMultiplication.cpp b/src/runtime/CL/functions/CLPixelWiseMultiplication.cpp
index efebf2b84c..932659268d 100644
--- a/src/runtime/CL/functions/CLPixelWiseMultiplication.cpp
+++ b/src/runtime/CL/functions/CLPixelWiseMultiplication.cpp
@@ -26,7 +26,7 @@
#include "arm_compute/core/CL/ICLTensor.h"
#include "arm_compute/runtime/CL/CLScheduler.h"
#include "src/core/CL/ICLKernel.h"
-#include "src/runtime/gpu/cl/operators/ClPixelWiseMultiplication.h"
+#include "src/runtime/gpu/cl/operators/ClMul.h"
#include <utility>
@@ -34,10 +34,10 @@ namespace arm_compute
{
struct CLPixelWiseMultiplication::Impl
{
- const ICLTensor *src_0{ nullptr };
- const ICLTensor *src_1{ nullptr };
- ICLTensor *dst{ nullptr };
- std::unique_ptr<opencl::ClPixelWiseMultiplication> op{ nullptr };
+ const ICLTensor *src_0{ nullptr };
+ const ICLTensor *src_1{ nullptr };
+ ICLTensor *dst{ nullptr };
+ std::unique_ptr<opencl::ClMul> op{ nullptr };
};
CLPixelWiseMultiplication::CLPixelWiseMultiplication()
@@ -60,14 +60,14 @@ void CLPixelWiseMultiplication::configure(const CLCompileContext &compile_contex
_impl->src_0 = input1;
_impl->src_1 = input2;
_impl->dst = output;
- _impl->op = std::make_unique<opencl::ClPixelWiseMultiplication>();
+ _impl->op = std::make_unique<opencl::ClMul>();
_impl->op->configure(compile_context, input1->info(), input2->info(), output->info(), scale, overflow_policy, rounding_policy, act_info);
}
Status CLPixelWiseMultiplication::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, float scale,
ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info)
{
- return opencl::ClPixelWiseMultiplication::validate(input1, input2, output, scale, overflow_policy, rounding_policy, act_info);
+ return opencl::ClMul::validate(input1, input2, output, scale, overflow_policy, rounding_policy, act_info);
}
void CLPixelWiseMultiplication::run()
@@ -82,10 +82,10 @@ void CLPixelWiseMultiplication::run()
struct CLComplexPixelWiseMultiplication::Impl
{
- const ICLTensor *src_0{ nullptr };
- const ICLTensor *src_1{ nullptr };
- ICLTensor *dst{ nullptr };
- std::unique_ptr<opencl::ClComplexPixelWiseMultiplication> op{ nullptr };
+ const ICLTensor *src_0{ nullptr };
+ const ICLTensor *src_1{ nullptr };
+ ICLTensor *dst{ nullptr };
+ std::unique_ptr<opencl::ClComplexMul> op{ nullptr };
};
CLComplexPixelWiseMultiplication::CLComplexPixelWiseMultiplication()
@@ -106,13 +106,13 @@ void CLComplexPixelWiseMultiplication::configure(const CLCompileContext &compile
_impl->src_0 = input1;
_impl->src_1 = input2;
_impl->dst = output;
- _impl->op = std::make_unique<opencl::ClComplexPixelWiseMultiplication>();
+ _impl->op = std::make_unique<opencl::ClComplexMul>();
_impl->op->configure(compile_context, input1->info(), input2->info(), output->info(), act_info);
}
Status CLComplexPixelWiseMultiplication::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
{
- return opencl::ClComplexPixelWiseMultiplication::validate(input1, input2, output, act_info);
+ return opencl::ClComplexMul::validate(input1, input2, output, act_info);
}
void CLComplexPixelWiseMultiplication::run()
diff --git a/src/runtime/NEON/functions/NEPixelWiseMultiplication.cpp b/src/runtime/NEON/functions/NEPixelWiseMultiplication.cpp
index 4d7fef89ed..3a2f1984b4 100644
--- a/src/runtime/NEON/functions/NEPixelWiseMultiplication.cpp
+++ b/src/runtime/NEON/functions/NEPixelWiseMultiplication.cpp
@@ -24,7 +24,7 @@
#include "arm_compute/runtime/NEON/functions/NEPixelWiseMultiplication.h"
#include "arm_compute/core/ITensor.h"
-#include "src/runtime/cpu/operators/CpuPixelWiseMultiplication.h"
+#include "src/runtime/cpu/operators/CpuMul.h"
#include <utility>
@@ -32,10 +32,10 @@ namespace arm_compute
{
struct NEPixelWiseMultiplication::Impl
{
- const ITensor *src_0{ nullptr };
- const ITensor *src_1{ nullptr };
- ITensor *dst{ nullptr };
- std::unique_ptr<cpu::CpuPixelWiseMultiplication> op{ nullptr };
+ const ITensor *src_0{ nullptr };
+ const ITensor *src_1{ nullptr };
+ ITensor *dst{ nullptr };
+ std::unique_ptr<cpu::CpuMul> op{ nullptr };
};
NEPixelWiseMultiplication::NEPixelWiseMultiplication()
@@ -47,7 +47,7 @@ NEPixelWiseMultiplication::~NEPixelWiseMultiplication() = default;
Status NEPixelWiseMultiplication::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy,
const ActivationLayerInfo &act_info)
{
- return cpu::CpuPixelWiseMultiplication::validate(input1, input2, output, scale, overflow_policy, rounding_policy, act_info);
+ return cpu::CpuMul::validate(input1, input2, output, scale, overflow_policy, rounding_policy, act_info);
}
void NEPixelWiseMultiplication::configure(const ITensor *input1, const ITensor *input2, ITensor *output, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy,
@@ -56,7 +56,7 @@ void NEPixelWiseMultiplication::configure(const ITensor *input1, const ITensor *
_impl->src_0 = input1;
_impl->src_1 = input2;
_impl->dst = output;
- _impl->op = std::make_unique<cpu::CpuPixelWiseMultiplication>();
+ _impl->op = std::make_unique<cpu::CpuMul>();
_impl->op->configure(input1->info(), input2->info(), output->info(), scale, overflow_policy, rounding_policy, act_info);
}
@@ -71,10 +71,10 @@ void NEPixelWiseMultiplication::run()
struct NEComplexPixelWiseMultiplication::Impl
{
- ITensor *src_0{ nullptr };
- ITensor *src_1{ nullptr };
- ITensor *dst{ nullptr };
- std::unique_ptr<cpu::CpuComplexPixelWiseMultiplication> op{ nullptr };
+ ITensor *src_0{ nullptr };
+ ITensor *src_1{ nullptr };
+ ITensor *dst{ nullptr };
+ std::unique_ptr<cpu::CpuComplexMul> op{ nullptr };
};
NEComplexPixelWiseMultiplication::NEComplexPixelWiseMultiplication()
@@ -85,7 +85,7 @@ NEComplexPixelWiseMultiplication::~NEComplexPixelWiseMultiplication() = default;
Status NEComplexPixelWiseMultiplication::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
{
- return cpu::CpuComplexPixelWiseMultiplication::validate(input1, input2, output, act_info);
+ return cpu::CpuComplexMul::validate(input1, input2, output, act_info);
}
void NEComplexPixelWiseMultiplication::configure(ITensor *input1, ITensor *input2, ITensor *output, const ActivationLayerInfo &act_info)
@@ -93,7 +93,7 @@ void NEComplexPixelWiseMultiplication::configure(ITensor *input1, ITensor *input
_impl->src_0 = input1;
_impl->src_1 = input2;
_impl->dst = output;
- _impl->op = std::make_unique<cpu::CpuComplexPixelWiseMultiplication>();
+ _impl->op = std::make_unique<cpu::CpuComplexMul>();
_impl->op->configure(input1->info(), input2->info(), output->info(), act_info);
}
diff --git a/src/runtime/cpu/operators/CpuPixelWiseMultiplication.cpp b/src/runtime/cpu/operators/CpuMul.cpp
index 2e560d7490..2f3d442a70 100644
--- a/src/runtime/cpu/operators/CpuPixelWiseMultiplication.cpp
+++ b/src/runtime/cpu/operators/CpuMul.cpp
@@ -21,54 +21,54 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#include "src/runtime/cpu/operators/CpuPixelWiseMultiplication.h"
+#include "src/runtime/cpu/operators/CpuMul.h"
#include "arm_compute/core/TensorInfo.h"
#include "arm_compute/core/Validate.h"
#include "arm_compute/runtime/NEON/NEScheduler.h"
-#include "src/core/cpu/kernels/CpuPixelWiseMultiplicationKernel.h"
+#include "src/core/cpu/kernels/CpuMulKernel.h"
namespace arm_compute
{
namespace cpu
{
-Status CpuPixelWiseMultiplication::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy,
- const ActivationLayerInfo &act_info)
+Status CpuMul::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy,
+ const ActivationLayerInfo &act_info)
{
ARM_COMPUTE_RETURN_ERROR_ON(act_info.enabled());
- return kernels::CpuPixelWiseMultiplicationKernel::validate(input1, input2, output, scale, overflow_policy, rounding_policy);
+ return kernels::CpuMulKernel::validate(src1, src2, dst, scale, overflow_policy, rounding_policy);
}
-void CpuPixelWiseMultiplication::configure(ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy,
- const ActivationLayerInfo &act_info)
+void CpuMul::configure(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy,
+ const ActivationLayerInfo &act_info)
{
ARM_COMPUTE_UNUSED(act_info);
- auto k = std::make_unique<kernels::CpuPixelWiseMultiplicationKernel>();
- k->configure(input1, input2, output, scale, overflow_policy, rounding_policy);
+ auto k = std::make_unique<kernels::CpuMulKernel>();
+ k->configure(src1, src2, dst, scale, overflow_policy, rounding_policy);
_kernel = std::move(k);
}
-void CpuPixelWiseMultiplication::run(ITensorPack &tensors)
+void CpuMul::run(ITensorPack &tensors)
{
ARM_COMPUTE_ERROR_ON_MSG(tensors.empty(), "No inputs provided");
NEScheduler::get().schedule_op(_kernel.get(), Window::DimY, _kernel->window(), tensors);
}
-Status CpuComplexPixelWiseMultiplication::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
+Status CpuComplexMul::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, const ActivationLayerInfo &act_info)
{
ARM_COMPUTE_RETURN_ERROR_ON(act_info.enabled());
- return kernels::CpuComplexPixelWiseMultiplicationKernel::validate(input1, input2, output);
+ return kernels::CpuComplexMulKernel::validate(src1, src2, dst);
}
-void CpuComplexPixelWiseMultiplication::configure(ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, const ActivationLayerInfo &act_info)
+void CpuComplexMul::configure(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info)
{
ARM_COMPUTE_UNUSED(act_info);
- auto k = std::make_unique<kernels::CpuComplexPixelWiseMultiplicationKernel>();
- k->configure(input1, input2, output);
+ auto k = std::make_unique<kernels::CpuComplexMulKernel>();
+ k->configure(src1, src2, dst);
_kernel = std::move(k);
}
-void CpuComplexPixelWiseMultiplication::run(ITensorPack &tensors)
+void CpuComplexMul::run(ITensorPack &tensors)
{
ARM_COMPUTE_ERROR_ON_MSG(tensors.empty(), "No inputs provided");
NEScheduler::get().schedule_op(_kernel.get(), Window::DimY, _kernel->window(), tensors);
diff --git a/src/runtime/cpu/operators/CpuMul.h b/src/runtime/cpu/operators/CpuMul.h
new file mode 100644
index 0000000000..6e717188a4
--- /dev/null
+++ b/src/runtime/cpu/operators/CpuMul.h
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2016-2021 Arm Limited.
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#ifndef ARM_COMPUTE_CPU_MUL_H
+#define ARM_COMPUTE_CPU_MUL_H
+
+#include "arm_compute/core/ITensorInfo.h"
+#include "src/runtime/cpu/ICpuOperator.h"
+
+namespace arm_compute
+{
+namespace cpu
+{
+/** Basic function to run @ref kernels::CpuMulKernel */
+class CpuMul : public ICpuOperator
+{
+public:
+ /** Default Constructor */
+ CpuMul() = default;
+ /** Initialise the kernel's inputs, dst and convertion policy.
+ *
+ * @note For @p scale equal to 1/255 only round to nearest even (implemented as round half up) is supported.
+ * For all other scale values only round to zero (implemented as round towards minus infinity) is supported.
+ *
+ * @param[in, out] src1 First input tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/S32/QSYMM16/F16/F32
+ * This input tensor is [in, out] because its TensorInfo might be modified inside the kernel in case of broadcasting of dimension 0.
+ * @param[in, out] src2 Second input tensor info. Data types supported: U8, QASYMM8 (only if @p src1 is QASYMM8), QASYMM8_SIGNED (only if @p src1 is QASYMM8_SIGNED), S16, S32, QSYMM16 (only if @p src1 is QSYMM16), F16 (only if @p src1 is F16), F32 (only if @p src1 is F32).
+ * This input tensor is [in, out] because its TensorInfo might be modified inside the kernel in case of broadcasting of dimension 0.
+ * @param[out] dst dst tensor info. Data types supported:
+ * - U8, only if both inputs are U8.
+ * - QASYMM8, only if both inputs are QASYMM8.
+ * - QASYMM8_SIGNED, only if @p src1 is QASYMM8_SIGNED.
+ * - S16.
+ * - QSYMM16, only if both inputs are QSYMM16.
+ * - S32, only if both inputs are S32 or both are QSYMM16.
+ * - F16, only if @p src1 is F16.
+ * - F32, only if both inputs are F32.
+ * @param[in] scale Scale to apply after multiplication.
+ * Scale must be positive and its value must be either 1/255 or 1/2^n where n is between 0 and 15.
+ * If both @p src1, @p src2 and @p dst are of datatype S32, scale cannot be 1/255
+ * @param[in] overflow_policy Overflow policy. ConvertPolicy cannot be WRAP if any of the inputs is of quantized datatype
+ * @param[in] rounding_policy Rounding policy.
+ * @param[in] act_info (Optional) Activation layer information in case of a fused activation. Currently not supported.
+ */
+ void configure(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy,
+ const ActivationLayerInfo &act_info = ActivationLayerInfo());
+ /** Static function to check if given info will lead to a valid configuration
+ *
+ * Similar to @ref CpuMul::configure()
+ *
+ * @return a status
+ */
+ static Status validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy,
+ const ActivationLayerInfo &act_info = ActivationLayerInfo());
+
+ // Inherited methods overridden:
+ void run(ITensorPack &tensors) override;
+};
+
+/** Basic function to run @ref kernels::CpuComplexMulKernel */
+class CpuComplexMul : public ICpuOperator
+{
+public:
+ /** Default Constructor */
+ CpuComplexMul() = default;
+ /** Initialise the kernel's inputs, dst.
+ *
+ * @param[in, out] src1 First input tensor. Data types supported: F32. Number of channels supported: 2 (complex tensor).
+ * The input tensor is [in, out] because its TensorInfo might be modified inside the kernel in case of broadcasting of dimension 0.
+ * @param[in, out] src2 Second input tensor. Data types supported: same as @p src1. Number of channels supported: same as @p src1.
+ * The input tensor is [in, out] because its TensorInfo might be modified inside the kernel in case of broadcasting of dimension 0.
+ * @param[out] dst The dst tensor. Data types supported: same as @p src1. Number of channels: same as @p src1.
+ * @param[in] act_info (Optional) Activation layer information in case of a fused activation. Currently not supported.
+ */
+ void configure(ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
+ /** Static function to check if given info will lead to a valid configuration
+ *
+ * Similar to @ref CpuComplexMul::configure()
+ *
+ * @return a status
+ */
+ static Status validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
+
+ // Inherited methods overridden:
+ void run(ITensorPack &tensors) override;
+};
+} // namespace cpu
+} // namespace arm_compute
+#endif /* ARM_COMPUTE_CPU_MUL_H */ \ No newline at end of file
diff --git a/src/runtime/cpu/operators/CpuPixelWiseMultiplication.h b/src/runtime/cpu/operators/CpuPixelWiseMultiplication.h
deleted file mode 100644
index b2cd7d529b..0000000000
--- a/src/runtime/cpu/operators/CpuPixelWiseMultiplication.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Arm Limited.
- *
- * SPDX-License-Identifier: MIT
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-#ifndef ARM_COMPUTE_CPU_PIXELWISEMULTIPLICATION_H
-#define ARM_COMPUTE_CPU_PIXELWISEMULTIPLICATION_H
-
-#include "arm_compute/core/ITensorInfo.h"
-#include "arm_compute/core/experimental/Types.h"
-#include "src/core/cpu/ICpuKernel.h"
-#include "src/runtime/cpu/ICpuOperator.h"
-
-#include <memory>
-
-namespace arm_compute
-{
-namespace cpu
-{
-/** Basic function to run @ref kernels::CpuPixelWiseMultiplicationKernel */
-class CpuPixelWiseMultiplication : public ICpuOperator
-{
-public:
- /** Default Constructor */
- CpuPixelWiseMultiplication() = default;
- /** Initialise the kernel's inputs, output and convertion policy.
- *
- * @note For @p scale equal to 1/255 only round to nearest even (implemented as round half up) is supported.
- * For all other scale values only round to zero (implemented as round towards minus infinity) is supported.
- *
- * @param[in, out] input1 First input tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/S32/QSYMM16/F16/F32
- * This input tensor is [in, out] because its TensorInfo might be modified inside the kernel in case of broadcasting of dimension 0.
- * @param[in, out] input2 Second input tensor info. Data types supported: U8, QASYMM8 (only if @p input1 is QASYMM8), QASYMM8_SIGNED (only if @p input1 is QASYMM8_SIGNED), S16, S32, QSYMM16 (only if @p input1 is QSYMM16), F16 (only if @p input1 is F16), F32 (only if @p input1 is F32).
- * This input tensor is [in, out] because its TensorInfo might be modified inside the kernel in case of broadcasting of dimension 0.
- * @param[out] output Output tensor info. Data types supported:
- * - U8, only if both inputs are U8.
- * - QASYMM8, only if both inputs are QASYMM8.
- * - QASYMM8_SIGNED, only if @p input1 is QASYMM8_SIGNED.
- * - S16.
- * - QSYMM16, only if both inputs are QSYMM16.
- * - S32, only if both inputs are S32 or both are QSYMM16.
- * - F16, only if @p input1 is F16.
- * - F32, only if both inputs are F32.
- * @param[in] scale Scale to apply after multiplication.
- * Scale must be positive and its value must be either 1/255 or 1/2^n where n is between 0 and 15.
- * If both @p input1, @p input2 and @p output are of datatype S32, scale cannot be 1/255
- * @param[in] overflow_policy Overflow policy. ConvertPolicy cannot be WRAP if any of the inputs is of quantized datatype
- * @param[in] rounding_policy Rounding policy.
- * @param[in] act_info (Optional) Activation layer information in case of a fused activation. Currently not supported.
- */
- void configure(ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy,
- const ActivationLayerInfo &act_info = ActivationLayerInfo());
- /** Static function to check if given info will lead to a valid configuration of @ref CpuPixelWiseMultiplication
- *
- * @note For @p scale equal to 1/255 only round to nearest even (implemented as round half up) is supported.
- * For all other scale values only round to zero (implemented as round towards minus infinity) is supported.
- *
- * @param[in] input1 First input tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/S32/QSYMM16/F16/F32
- * @param[in] input2 Second input tensor info. Data types supported: U8, QASYMM8 (only if @p input1 is QASYMM8), QASYMM8_SIGNED (only if @p input1 is QASYMM8_SIGNED), S16, S32, QSYMM16 (only if both inputs are QSYMM16), F16 (only if @p input1 is F16), F32 (only if @p input1 is F32).
- * @param[in] output Output tensor info. Data types supported:
- * - U8, only if both inputs are U8.
- * - QASYMM8, only if both inputs are QASYMM8.
- * - QASYMM8_SIGNED, only if @p input1 is QASYMM8_SIGNED.
- * - S16.
- * - QSYMM16, only if both inputs are QSYMM16.
- * - S32, only if both inputs are S32 or both are QSYMM16.
- * - F16, only if @p input1 is F16.
- * - F32, only if both inputs are F32.
- * @param[in] scale Scale to apply after multiplication.
- * Scale must be positive and its value must be either 1/255 or 1/2^n where n is between 0 and 15.
- * If both @p input1, @p input2 and @p output are of datatype S32, scale cannot be 1/255
- * @param[in] overflow_policy Overflow policy. ConvertPolicy cannot be WRAP if any of the inputs is of quantized datatype
- * @param[in] rounding_policy Rounding policy.
- * @param[in] act_info (Optional) Activation layer information in case of a fused activation. Currently not supported.
- *
- * @return a status
- */
- static Status validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, float scale, ConvertPolicy overflow_policy, RoundingPolicy rounding_policy,
- const ActivationLayerInfo &act_info = ActivationLayerInfo());
-
- // Inherited methods overridden:
- void run(ITensorPack &tensors) override;
-};
-
-/** Basic function to run @ref kernels::CpuComplexPixelWiseMultiplicationKernel. */
-class CpuComplexPixelWiseMultiplication : public ICpuOperator
-{
-public:
- /** Default Constructor */
- CpuComplexPixelWiseMultiplication() = default;
- /** Initialise the kernel's inputs, output.
- *
- * @param[in, out] input1 First input tensor. Data types supported: F32. Number of channels supported: 2 (complex tensor).
- * The input tensor is [in, out] because its TensorInfo might be modified inside the kernel in case of broadcasting of dimension 0.
- * @param[in, out] input2 Second input tensor. Data types supported: same as @p input1. Number of channels supported: same as @p input1.
- * The input tensor is [in, out] because its TensorInfo might be modified inside the kernel in case of broadcasting of dimension 0.
- * @param[out] output The output tensor. Data types supported: same as @p input1. Number of channels: same as @p input1.
- * @param[in] act_info (Optional) Activation layer information in case of a fused activation. Currently not supported.
- */
- void configure(ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, const ActivationLayerInfo &act_info = ActivationLayerInfo());
- /** Static function to check if given info will lead to a valid configuration of @ref CpuComplexPixelWiseMultiplication
- *
- * @param[in] input1 First input tensor info. Data types supported: F32. Number of channels supported: 2 (complex tensor).
- * @param[in] input2 Second input tensor info. Data types supported: same as @p input1. Number of channels supported: same as @p input1.
- * @param[in] output The output tensor info. Data types supported: same as @p input1. Number of channels supported: same as @p input1.
- * @param[in] act_info (Optional) Activation layer information in case of a fused activation. Currently not supported.
- */
- static Status validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info = ActivationLayerInfo());
-
- // Inherited methods overridden:
- void run(ITensorPack &tensors) override;
-};
-} // namespace cpu
-} // namespace arm_compute
-#endif /* ARM_COMPUTE_CPU_PIXELWISEMULTIPLICATION_H */ \ No newline at end of file
diff --git a/src/runtime/gpu/cl/operators/ClPixelWiseMultiplication.cpp b/src/runtime/gpu/cl/operators/ClMul.cpp
index 137a0de6a7..d1e2bc806f 100644
--- a/src/runtime/gpu/cl/operators/ClPixelWiseMultiplication.cpp
+++ b/src/runtime/gpu/cl/operators/ClMul.cpp
@@ -21,40 +21,40 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#include "src/runtime/gpu/cl/operators/ClPixelWiseMultiplication.h"
+#include "src/runtime/gpu/cl/operators/ClMul.h"
#include "arm_compute/runtime/CL/CLScheduler.h"
#include "src/core/gpu/cl/ClCompileContext.h"
-#include "src/core/gpu/cl/kernels/ClPixelWiseMultiplicationKernel.h"
+#include "src/core/gpu/cl/kernels/ClMulKernel.h"
namespace arm_compute
{
namespace opencl
{
-void ClPixelWiseMultiplication::configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale,
- ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info)
+void ClMul::configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale,
+ ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info)
{
- auto k = std::make_unique<kernels::ClPixelWiseMultiplicationKernel>();
+ auto k = std::make_unique<kernels::ClMulKernel>();
k->configure(compile_context, src1, src2, dst, scale, overflow_policy, rounding_policy, act_info);
_kernel = std::move(k);
}
-Status ClPixelWiseMultiplication::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, float scale,
- ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info)
+Status ClMul::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, float scale,
+ ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info)
{
- return kernels::ClPixelWiseMultiplicationKernel::validate(src1, src2, dst, scale, overflow_policy, rounding_policy, act_info);
+ return kernels::ClMulKernel::validate(src1, src2, dst, scale, overflow_policy, rounding_policy, act_info);
}
-void ClComplexPixelWiseMultiplication::configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info)
+void ClComplexMul::configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info)
{
- auto k = std::make_unique<kernels::ClComplexPixelWiseMultiplicationKernel>();
+ auto k = std::make_unique<kernels::ClComplexMulKernel>();
k->configure(compile_context, src1, src2, dst, act_info);
_kernel = std::move(k);
}
-Status ClComplexPixelWiseMultiplication::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, const ActivationLayerInfo &act_info)
+Status ClComplexMul::validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, const ActivationLayerInfo &act_info)
{
- return kernels::ClComplexPixelWiseMultiplicationKernel::validate(src1, src2, dst, act_info);
+ return kernels::ClComplexMulKernel::validate(src1, src2, dst, act_info);
}
} // namespace opencl
} // namespace arm_compute \ No newline at end of file
diff --git a/src/runtime/gpu/cl/operators/ClPixelWiseMultiplication.h b/src/runtime/gpu/cl/operators/ClMul.h
index e1598cb870..4a662b3276 100644
--- a/src/runtime/gpu/cl/operators/ClPixelWiseMultiplication.h
+++ b/src/runtime/gpu/cl/operators/ClMul.h
@@ -21,24 +21,22 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#ifndef ARM_COMPUTE_CL_PIXELWISE_MULTIPLICATION_H
-#define ARM_COMPUTE_CL_PIXELWISE_MULTIPLICATION_H
+#ifndef ARM_COMPUTE_CL_MUL_H
+#define ARM_COMPUTE_CL_MUL_H
#include "src/core/gpu/cl/ClCompileContext.h"
#include "src/runtime/gpu/cl/IClOperator.h"
-#include <memory>
-
namespace arm_compute
{
namespace opencl
{
-/** Basic function to run @ref opencl::ClPixelWiseMultiplication. */
-class ClPixelWiseMultiplication : public IClOperator
+/** Basic function to run @ref opencl::kernels::ClMulKernel */
+class ClMul : public IClOperator
{
public:
/** Default Constructor */
- ClPixelWiseMultiplication() = default;
+ ClMul() = default;
/** Initialise the kernel's sources, dst and convertion policy.
*
* Valid configurations (src1,src2) -> Output :
@@ -69,31 +67,9 @@ public:
*/
void configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, float scale,
ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info = ActivationLayerInfo());
- /** Static function to check if given info will lead to a valid configuration of @ref ClPixelWiseMultiplication
- *
- * Valid configurations (src1,src2) -> Output :
- *
- * - (U8,U8) -> U8
- * - (U8,U8) -> S16
- * - (U8,S16) -> S16
- * - (S16,U8) -> S16
- * - (S16,S16) -> S16
- * - (F16,F16) -> F16
- * - (F32,F32) -> F32
- * - (QASYMM8,QASYMM8) -> QASYMM8
- * - (QASYMM8_SIGNED,QASYMM8_SIGNED) -> QASYMM8_SIGNED
- * - (QSYMM16,QSYMM16) -> QSYMM16
- * - (QSYMM16,QSYMM16) -> S32
- *
+ /** Static function to check if given info will lead to a valid configuration
*
- * @param[in] src1 An src tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/F32.
- * @param[in] src2 An src tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/F32.
- * @param[in] dst The dst tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/F32.
- * @param[in] scale Scale to apply after multiplication.
- * Scale must be positive and its value must be either 1/255 or 1/2^n where n is between 0 and 15.
- * @param[in] overflow_policy Overflow policy. Supported overflow policies: Wrap, Saturate
- * @param[in] rounding_policy Rounding policy. Supported rounding modes: to zero, to nearest even.
- * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+ * Similar to @ref ClMul::configure()
*
* @return a status
*/
@@ -101,12 +77,12 @@ public:
ConvertPolicy overflow_policy, RoundingPolicy rounding_policy, const ActivationLayerInfo &act_info = ActivationLayerInfo());
};
-/** Basic function to run @ref opencl::ClComplexPixelWiseMultiplication. */
-class ClComplexPixelWiseMultiplication : public IClOperator
+/** Basic function to run @ref opencl::kernels::ClComplexMulKernel */
+class ClComplexMul : public IClOperator
{
public:
/** Default Constructor */
- ClComplexPixelWiseMultiplication() = default;
+ ClComplexMul() = default;
/** Initialise the kernel's sources, dst.
*
* @param[in] compile_context The compile context to be used.
@@ -118,15 +94,14 @@ public:
* @param[in] act_info (Optional) Activation layer information in case of a fused activation.
*/
void configure(const CLCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
- /** Static function to check if given info will lead to a valid configuration of @ref ClComplexPixelWiseMultiplication
+ /** Static function to check if given info will lead to a valid configuration
*
- * @param[in] src1 An src tensor info. Data types supported: F16/F32. Number of channels supported: 2.
- * @param[in] src2 An src tensor info. Data types supported: same as @p src1. Number of channels supported: same as @p src1.
- * @param[in] dst The dst tensor info, Data types supported: same as @p src1. Number of channels supported: same as @p src1.
- * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+ * Similar to @ref ClComplexMul::configure()
+ *
+ * @return a status
*/
static Status validate(const ITensorInfo *src1, const ITensorInfo *src2, const ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
};
} // namespace opencl
} // namespace arm_compute
-#endif /* ARM_COMPUTE_CL_PIXELWISE_MULTIPLICATION_H */ \ No newline at end of file
+#endif /* ARM_COMPUTE_CL_MUL_H */ \ No newline at end of file