aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/CL/functions/CLElementwiseOperations.cpp
diff options
context:
space:
mode:
authorMichele Di Giorgio <michele.digiorgio@arm.com>2021-01-25 15:44:02 +0000
committerMichele Di Giorgio <michele.digiorgio@arm.com>2021-01-27 10:48:43 +0000
commit237be03ada644232b19005f44742b97efa5dbfc6 (patch)
tree82448d70213cd66deffe332727500c0c977090fb /src/runtime/CL/functions/CLElementwiseOperations.cpp
parent26cf7985b8afb940be6678823e3f4f99c8d8558c (diff)
downloadComputeLibrary-237be03ada644232b19005f44742b97efa5dbfc6.tar.gz
Make Gpu Elementwise Operations kernels and functions state-less
Partially resolves COMPMID-4004 Change-Id: Ie99b6c676af5be4c2a67affc06fec378f3dff8ec Signed-off-by: Michele Di Giorgio <michele.digiorgio@arm.com> Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/4918 Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/runtime/CL/functions/CLElementwiseOperations.cpp')
-rw-r--r--src/runtime/CL/functions/CLElementwiseOperations.cpp175
1 files changed, 34 insertions, 141 deletions
diff --git a/src/runtime/CL/functions/CLElementwiseOperations.cpp b/src/runtime/CL/functions/CLElementwiseOperations.cpp
index 9b809eebc7..60c699cbb8 100644
--- a/src/runtime/CL/functions/CLElementwiseOperations.cpp
+++ b/src/runtime/CL/functions/CLElementwiseOperations.cpp
@@ -23,124 +23,17 @@
*/
#include "arm_compute/runtime/CL/functions/CLElementwiseOperations.h"
+#include "arm_compute/core/CL/CLKernelLibrary.h"
#include "arm_compute/core/CL/ICLTensor.h"
-#include "arm_compute/runtime/CL/CLScheduler.h"
-#include "src/core/gpu/cl/kernels/ClElementwiseKernel.h"
+#include "arm_compute/core/Types.h"
+#include "src/core/CL/ICLKernel.h"
#include "src/runtime/gpu/cl/operators/ClAdd.h"
+#include "src/runtime/gpu/cl/operators/ClElementwiseOperations.h"
#include "src/runtime/gpu/cl/operators/ClSub.h"
-#include <utility>
-
namespace arm_compute
{
-namespace experimental
-{
-CLArithmeticDivision::CLArithmeticDivision()
-{
-}
-
-void CLArithmeticDivision::configure(const CLCompileContext &compile_context, ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, const ActivationLayerInfo &act_info)
-{
- auto k = std::make_unique<arm_compute::opencl::kernels::ClArithmeticKernel>();
- k->configure(compile_context, ArithmeticOperation::DIV, input1, input2, output, act_info);
- _kernel = std::move(k);
-}
-
-Status CLArithmeticDivision::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
-{
- return arm_compute::opencl::kernels::ClArithmeticKernel::validate(ArithmeticOperation::DIV, input1, input2, output, act_info);
-}
-
-void CLArithmeticDivision::run(ITensorPack &tensors)
-{
- ICLOperator::run(tensors);
-}
-
-CLElementwiseMax::CLElementwiseMax()
-{
-}
-
-void CLElementwiseMax::configure(const CLCompileContext &compile_context, ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, const ActivationLayerInfo &act_info)
-{
- auto k = std::make_unique<arm_compute::opencl::kernels::ClArithmeticKernel>();
- k->configure(compile_context, ArithmeticOperation::MAX, input1, input2, output, act_info);
- _kernel = std::move(k);
-}
-
-Status CLElementwiseMax::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
-{
- return arm_compute::opencl::kernels::ClArithmeticKernel::validate(ArithmeticOperation::MAX, input1, input2, output, act_info);
-}
-
-void CLElementwiseMax::run(ITensorPack &tensors)
-{
- ICLOperator::run(tensors);
-}
-
-CLElementwiseMin::CLElementwiseMin()
-{
-}
-
-void CLElementwiseMin::configure(const CLCompileContext &compile_context, ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, const ActivationLayerInfo &act_info)
-{
- auto k = std::make_unique<arm_compute::opencl::kernels::ClArithmeticKernel>();
- k->configure(compile_context, ArithmeticOperation::MIN, input1, input2, output, act_info);
- _kernel = std::move(k);
-}
-
-Status CLElementwiseMin::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
-{
- return arm_compute::opencl::kernels::ClArithmeticKernel::validate(ArithmeticOperation::MIN, input1, input2, output, act_info);
-}
-
-void CLElementwiseMin::run(ITensorPack &tensors)
-{
- ICLOperator::run(tensors);
-}
-
-CLElementwiseSquaredDiff::CLElementwiseSquaredDiff()
-{
-}
-
-void CLElementwiseSquaredDiff::configure(const CLCompileContext &compile_context, ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, const ActivationLayerInfo &act_info)
-{
- auto k = std::make_unique<arm_compute::opencl::kernels::ClArithmeticKernel>();
- k->configure(compile_context, ArithmeticOperation::SQUARED_DIFF, input1, input2, output, act_info);
- _kernel = std::move(k);
-}
-
-Status CLElementwiseSquaredDiff::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
-{
- return arm_compute::opencl::kernels::ClArithmeticKernel::validate(ArithmeticOperation::SQUARED_DIFF, input1, input2, output, act_info);
-}
-
-void CLElementwiseSquaredDiff::run(ITensorPack &tensors)
-{
- ICLOperator::run(tensors);
-}
-
-CLElementwisePower::CLElementwisePower()
-{
-}
-
-void CLElementwisePower::configure(const CLCompileContext &compile_context, ITensorInfo *input1, ITensorInfo *input2, ITensorInfo *output, const ActivationLayerInfo &act_info)
-{
- auto k = std::make_unique<arm_compute::opencl::kernels::ClArithmeticKernel>();
- k->configure(compile_context, ArithmeticOperation::POWER, input1, input2, output, act_info);
- _kernel = std::move(k);
-}
-
-Status CLElementwisePower::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
-{
- return arm_compute::opencl::kernels::ClArithmeticKernel::validate(ArithmeticOperation::POWER, input1, input2, output, act_info);
-}
-
-void CLElementwisePower::run(ITensorPack &tensors)
-{
- ICLOperator::run(tensors);
-}
-} // namespace experimental
struct CLArithmeticAddition::Impl
{
const ICLTensor *src_0{ nullptr };
@@ -235,10 +128,10 @@ void CLArithmeticSubtraction::run()
struct CLArithmeticDivision::Impl
{
- const ICLTensor *src_0{ nullptr };
- const ICLTensor *src_1{ nullptr };
- ICLTensor *dst{ nullptr };
- std::unique_ptr<experimental::CLArithmeticDivision> op{ nullptr };
+ const ICLTensor *src_0{ nullptr };
+ const ICLTensor *src_1{ nullptr };
+ ICLTensor *dst{ nullptr };
+ std::unique_ptr<opencl::ClElementwiseDivision> op{ nullptr };
};
CLArithmeticDivision::CLArithmeticDivision()
@@ -259,13 +152,13 @@ void CLArithmeticDivision::configure(const CLCompileContext &compile_context, co
_impl->src_0 = input1;
_impl->src_1 = input2;
_impl->dst = output;
- _impl->op = std::make_unique<experimental::CLArithmeticDivision>();
+ _impl->op = std::make_unique<opencl::ClElementwiseDivision>();
_impl->op->configure(compile_context, input1->info(), input2->info(), output->info(), act_info);
}
Status CLArithmeticDivision::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
{
- return experimental::CLArithmeticDivision::validate(input1, input2, output, act_info);
+ return opencl::ClElementwiseDivision::validate(input1, input2, output, act_info);
}
void CLArithmeticDivision::run()
@@ -280,10 +173,10 @@ void CLArithmeticDivision::run()
struct CLElementwiseMax::Impl
{
- const ICLTensor *src_0{ nullptr };
- const ICLTensor *src_1{ nullptr };
- ICLTensor *dst{ nullptr };
- std::unique_ptr<experimental::CLElementwiseMax> op{ nullptr };
+ const ICLTensor *src_0{ nullptr };
+ const ICLTensor *src_1{ nullptr };
+ ICLTensor *dst{ nullptr };
+ std::unique_ptr<opencl::ClElementwiseMax> op{ nullptr };
};
CLElementwiseMax::CLElementwiseMax()
@@ -304,13 +197,13 @@ void CLElementwiseMax::configure(const CLCompileContext &compile_context, ICLTen
_impl->src_0 = input1;
_impl->src_1 = input2;
_impl->dst = output;
- _impl->op = std::make_unique<experimental::CLElementwiseMax>();
+ _impl->op = std::make_unique<opencl::ClElementwiseMax>();
_impl->op->configure(compile_context, input1->info(), input2->info(), output->info(), act_info);
}
Status CLElementwiseMax::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
{
- return experimental::CLElementwiseMax::validate(input1, input2, output, act_info);
+ return opencl::ClElementwiseMax::validate(input1, input2, output, act_info);
}
void CLElementwiseMax::run()
@@ -325,10 +218,10 @@ void CLElementwiseMax::run()
struct CLElementwiseMin::Impl
{
- const ICLTensor *src_0{ nullptr };
- const ICLTensor *src_1{ nullptr };
- ICLTensor *dst{ nullptr };
- std::unique_ptr<experimental::CLElementwiseMin> op{ nullptr };
+ const ICLTensor *src_0{ nullptr };
+ const ICLTensor *src_1{ nullptr };
+ ICLTensor *dst{ nullptr };
+ std::unique_ptr<opencl::ClElementwiseMin> op{ nullptr };
};
CLElementwiseMin::CLElementwiseMin()
@@ -349,13 +242,13 @@ void CLElementwiseMin::configure(const CLCompileContext &compile_context, ICLTen
_impl->src_0 = input1;
_impl->src_1 = input2;
_impl->dst = output;
- _impl->op = std::make_unique<experimental::CLElementwiseMin>();
+ _impl->op = std::make_unique<opencl::ClElementwiseMin>();
_impl->op->configure(compile_context, input1->info(), input2->info(), output->info(), act_info);
}
Status CLElementwiseMin::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
{
- return experimental::CLElementwiseMin::validate(input1, input2, output, act_info);
+ return opencl::ClElementwiseMin::validate(input1, input2, output, act_info);
}
void CLElementwiseMin::run()
@@ -370,10 +263,10 @@ void CLElementwiseMin::run()
struct CLElementwiseSquaredDiff::Impl
{
- const ICLTensor *src_0{ nullptr };
- const ICLTensor *src_1{ nullptr };
- ICLTensor *dst{ nullptr };
- std::unique_ptr<experimental::CLElementwiseSquaredDiff> op{ nullptr };
+ const ICLTensor *src_0{ nullptr };
+ const ICLTensor *src_1{ nullptr };
+ ICLTensor *dst{ nullptr };
+ std::unique_ptr<opencl::ClElementwiseSquaredDiff> op{ nullptr };
};
CLElementwiseSquaredDiff::CLElementwiseSquaredDiff()
@@ -394,13 +287,13 @@ void CLElementwiseSquaredDiff::configure(const CLCompileContext &compile_context
_impl->src_0 = input1;
_impl->src_1 = input2;
_impl->dst = output;
- _impl->op = std::make_unique<experimental::CLElementwiseSquaredDiff>();
+ _impl->op = std::make_unique<opencl::ClElementwiseSquaredDiff>();
_impl->op->configure(compile_context, input1->info(), input2->info(), output->info(), act_info);
}
Status CLElementwiseSquaredDiff::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
{
- return experimental::CLElementwiseSquaredDiff::validate(input1, input2, output, act_info);
+ return opencl::ClElementwiseSquaredDiff::validate(input1, input2, output, act_info);
}
void CLElementwiseSquaredDiff::run()
@@ -415,10 +308,10 @@ void CLElementwiseSquaredDiff::run()
struct CLElementwisePower::Impl
{
- const ICLTensor *src_0{ nullptr };
- const ICLTensor *src_1{ nullptr };
- ICLTensor *dst{ nullptr };
- std::unique_ptr<experimental::CLElementwisePower> op{ nullptr };
+ const ICLTensor *src_0{ nullptr };
+ const ICLTensor *src_1{ nullptr };
+ ICLTensor *dst{ nullptr };
+ std::unique_ptr<opencl::ClElementwisePower> op{ nullptr };
};
CLElementwisePower::CLElementwisePower()
@@ -439,13 +332,13 @@ void CLElementwisePower::configure(const CLCompileContext &compile_context, ICLT
_impl->src_0 = input1;
_impl->src_1 = input2;
_impl->dst = output;
- _impl->op = std::make_unique<experimental::CLElementwisePower>();
+ _impl->op = std::make_unique<opencl::ClElementwisePower>();
_impl->op->configure(compile_context, input1->info(), input2->info(), output->info(), act_info);
}
Status CLElementwisePower::validate(const ITensorInfo *input1, const ITensorInfo *input2, const ITensorInfo *output, const ActivationLayerInfo &act_info)
{
- return experimental::CLElementwisePower::validate(input1, input2, output, act_info);
+ return opencl::ClElementwisePower::validate(input1, input2, output, act_info);
}
void CLElementwisePower::run()