aboutsummaryrefslogtreecommitdiff
path: root/arm_compute/core/experimental/PostOps.h
diff options
context:
space:
mode:
authorSiCongLi <sicong.li@arm.com>2021-11-12 17:33:45 +0000
committerGunes Bayir <gunes.bayir@arm.com>2021-11-12 21:51:31 +0000
commitd5694c94c4eab2a774d34705959a6d73edad6e2e (patch)
tree5073a4878406db21577851e45dfadbc11d02447f /arm_compute/core/experimental/PostOps.h
parentc92fc4f5ed3756fb4f0abef4c944794e4b706b45 (diff)
downloadComputeLibrary-d5694c94c4eab2a774d34705959a6d73edad6e2e.tar.gz
In general src headers should not be included in any public header of other modules. Since there are modules (graph, tests) that rely on specific PostOp definitions in the previous src/core/experimental/PostOp.h, export it to the public arm_compute header Resolves COMPMID-4974 Signed-off-by: SiCongLi <sicong.li@arm.com> Change-Id: I0fa4da5108a34fe6bfff1e9d57839da4e51dc314 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/6673 Reviewed-by: Gunes Bayir <gunes.bayir@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'arm_compute/core/experimental/PostOps.h')
-rw-r--r--arm_compute/core/experimental/PostOps.h162
1 files changed, 162 insertions, 0 deletions
diff --git a/arm_compute/core/experimental/PostOps.h b/arm_compute/core/experimental/PostOps.h
new file mode 100644
index 0000000000..4ea90fc348
--- /dev/null
+++ b/arm_compute/core/experimental/PostOps.h
@@ -0,0 +1,162 @@
+/*
+ * Copyright (c) 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_EXPERIMENTAL_POSTOPS
+#define ARM_COMPUTE_EXPERIMENTAL_POSTOPS
+
+#include "arm_compute/core/experimental/IPostOp.h"
+
+#include "arm_compute/core/Types.h"
+
+#include <vector>
+
+namespace arm_compute
+{
+namespace experimental
+{
+/** (EXPERIMENTAL_POST_OPS)
+ * Implementation of specific IPostOps
+*/
+
+template <typename TensorRelatedT>
+struct PostOpAct : public IPostOp<TensorRelatedT>
+{
+public:
+ PostOpAct(const ActivationLayerInfo &act_info)
+ : _act_info{ act_info }
+ {
+ }
+ // NOTE: PostOps do not own any resources pointed to by TensorRelatedT if it's a pointer type, thus allow shallow copy
+ ~PostOpAct() override = default;
+ PostOpAct(const PostOpAct &) = default;
+ PostOpAct &operator=(const PostOpAct &) = default;
+ PostOpAct(PostOpAct &&) = default;
+ PostOpAct &operator=(PostOpAct &&) = default;
+
+ int prev_dst_pos() const override
+ {
+ return 0;
+ }
+ PostOpType type() const override
+ {
+ return PostOpType::Activation;
+ }
+ std::vector<TensorRelatedT *> arguments() override
+ {
+ return {};
+ }
+ std::vector<const TensorRelatedT *> arguments() const override
+ {
+ return {};
+ }
+ std::unique_ptr<IPostOp<TensorRelatedT>> clone() const override
+ {
+ return std::make_unique<PostOpAct<TensorRelatedT>>(*this);
+ }
+ ActivationLayerInfo _act_info;
+};
+
+template <typename TensorRelatedT>
+struct PostOpEltwiseAdd : public IPostOp<TensorRelatedT>
+{
+public:
+ PostOpEltwiseAdd(TensorRelatedT addend, int prev_dst_pos, ConvertPolicy policy)
+ : _addend{ addend },
+ _prev_dst_pos{ prev_dst_pos },
+ _policy{ policy }
+ {
+ }
+ // NOTE: PostOps do not own any resources pointed to by TensorRelatedT if it's a pointer type, thus allow shallow copy
+ ~PostOpEltwiseAdd() override = default;
+ PostOpEltwiseAdd(const PostOpEltwiseAdd &) = default;
+ PostOpEltwiseAdd &operator=(const PostOpEltwiseAdd &) = default;
+ PostOpEltwiseAdd(PostOpEltwiseAdd &&) = default;
+ PostOpEltwiseAdd &operator=(PostOpEltwiseAdd &&) = default;
+ int prev_dst_pos() const override
+ {
+ return _prev_dst_pos;
+ }
+ PostOpType type() const override
+ {
+ return PostOpType::Eltwise_Add;
+ }
+ std::vector<TensorRelatedT *> arguments() override
+ {
+ return { &_addend };
+ }
+ std::vector<const TensorRelatedT *> arguments() const override
+ {
+ return { &_addend };
+ }
+ std::unique_ptr<IPostOp<TensorRelatedT>> clone() const override
+ {
+ return std::make_unique<PostOpEltwiseAdd<TensorRelatedT>>(*this);
+ }
+ TensorRelatedT _addend;
+ int _prev_dst_pos;
+ ConvertPolicy _policy;
+};
+
+template <typename TensorRelatedT>
+struct PostOpEltwisePRelu : public IPostOp<TensorRelatedT>
+{
+public:
+ PostOpEltwisePRelu(TensorRelatedT alpha_param, int prev_dst_pos, ConvertPolicy policy)
+ : _alpha_param{ alpha_param },
+ _prev_dst_pos{ prev_dst_pos },
+ _policy{ policy }
+ {
+ }
+ // NOTE: PostOps do not own any resources pointed to by TensorRelatedT if it's a pointer type, thus allow shallow copy
+ ~PostOpEltwisePRelu() override = default;
+ PostOpEltwisePRelu(const PostOpEltwisePRelu &) = default;
+ PostOpEltwisePRelu &operator=(const PostOpEltwisePRelu &) = default;
+ PostOpEltwisePRelu(PostOpEltwisePRelu &&) = default;
+ PostOpEltwisePRelu &operator=(PostOpEltwisePRelu &&) = default;
+ int prev_dst_pos() const override
+ {
+ return _prev_dst_pos;
+ }
+ PostOpType type() const override
+ {
+ return PostOpType::Eltwise_PRelu;
+ }
+ std::vector<TensorRelatedT *> arguments() override
+ {
+ return { &_alpha_param };
+ }
+ std::vector<const TensorRelatedT *> arguments() const override
+ {
+ return { &_alpha_param };
+ }
+ std::unique_ptr<IPostOp<TensorRelatedT>> clone() const override
+ {
+ return std::make_unique<PostOpEltwisePRelu<TensorRelatedT>>(*this);
+ }
+ TensorRelatedT _alpha_param;
+ int _prev_dst_pos;
+ ConvertPolicy _policy;
+};
+} // namespace experimental
+} // namespace arm_compute
+#endif //ARM_COMPUTE_EXPERIMENTAL_POSTOPS \ No newline at end of file