From bcd2352d7fd99a2f6aab220fa0c3b3f3119a1a4c Mon Sep 17 00:00:00 2001 From: Michalis Spyrou Date: Thu, 21 May 2020 15:02:36 +0100 Subject: COMPMID-3391: Implement Async interfaces Change-Id: I8168cea5056ff48a0253ebb8c88ea549a3ea69a2 Signed-off-by: Michalis Spyrou Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/3335 Tested-by: Arm Jenkins Comments-Addressed: Arm Jenkins Reviewed-by: Georgios Pinitas --- arm_compute/core/CPP/ICPPKernel.h | 24 +++++++- .../core/NEON/kernels/NEReshapeLayerKernel.h | 16 ++--- arm_compute/core/experimental/Types.h | 71 ++++++++++++++++++++++ 3 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 arm_compute/core/experimental/Types.h (limited to 'arm_compute/core') diff --git a/arm_compute/core/CPP/ICPPKernel.h b/arm_compute/core/CPP/ICPPKernel.h index ec05af20bd..21f6ab714a 100644 --- a/arm_compute/core/CPP/ICPPKernel.h +++ b/arm_compute/core/CPP/ICPPKernel.h @@ -26,10 +26,13 @@ #include "arm_compute/core/CPP/CPPTypes.h" #include "arm_compute/core/IKernel.h" +#include "arm_compute/core/Types.h" +#include "arm_compute/core/experimental/Types.h" namespace arm_compute { class Window; +class ITensor; /** Common interface for all kernels implemented in C++ */ class ICPPKernel : public IKernel @@ -51,8 +54,7 @@ public: */ virtual void run(const Window &window, const ThreadInfo &info) { - ARM_COMPUTE_UNUSED(window); - ARM_COMPUTE_UNUSED(info); + ARM_COMPUTE_UNUSED(window, info); ARM_COMPUTE_ERROR("default implementation of legacy run() virtual member function invoked"); } @@ -69,6 +71,24 @@ public: run(window, info); } + /** Execute the kernel on the passed window + * + * @warning If is_parallelisable() returns false then the passed window must be equal to window() + * + * @note The window has to be a region within the window returned by the window() method + * + * @note The width of the window has to be a multiple of num_elems_processed_per_iteration(). + * + * @param[in] inputs A vector containing the input tensors. + * @param[in] outputs A vector containing the output tensors. + * @param[in] window Region on which to execute the kernel. (Must be a region of the window returned by window()) + * @param[in] info Info about executing thread and CPU. + */ + virtual void run_op(const std::vector &inputs, std::vector &outputs, const Window &window, const ThreadInfo &info) + { + ARM_COMPUTE_UNUSED(inputs, outputs, window, info); + } + /** Name of the kernel * * @return Kernel name diff --git a/arm_compute/core/NEON/kernels/NEReshapeLayerKernel.h b/arm_compute/core/NEON/kernels/NEReshapeLayerKernel.h index fccf2685a8..6f888e0914 100644 --- a/arm_compute/core/NEON/kernels/NEReshapeLayerKernel.h +++ b/arm_compute/core/NEON/kernels/NEReshapeLayerKernel.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019 ARM Limited. + * Copyright (c) 2017-2020 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -24,6 +24,7 @@ #ifndef ARM_COMPUTE_NERESHAPELAYERKERNEL_H #define ARM_COMPUTE_NERESHAPELAYERKERNEL_H +#include "arm_compute/core/NEON/INEKernel.h" #include "arm_compute/core/NEON/INESimpleKernel.h" namespace arm_compute @@ -32,19 +33,19 @@ namespace arm_compute class ITensor; /** Interface for the kernel to perform tensor reshaping */ -class NEReshapeLayerKernel : public INESimpleKernel +class NEReshapeLayerKernel : public INEKernel { public: const char *name() const override { return "NEReshapeLayerKernel"; } - /** Set the input and output of the kernel + /** Set the input and output info of the kernel * - * @param[in] input Source tensor. Data type supported: All - * @param[out] output Destination tensor. Data type supported: Same as @p input + * @param[in] input Source tensor info. Data type supported: All + * @param[out] output Destination tensor info. Data type supported: Same as @p input */ - void configure(const ITensor *input, ITensor *output); + void configure(const ITensorInfo *input, ITensorInfo *output); /** Static function to check if given info will lead to a valid configuration of @ref NEReshapeLayerKernel * @@ -56,7 +57,8 @@ public: static Status validate(const ITensorInfo *input, const ITensorInfo *output); // Inherited methods overridden: - void run(const Window &window, const ThreadInfo &info) override; + void run_op(const std::vector &inputs, std::vector &outputs, const Window &window, const ThreadInfo &info) override; }; + } // namespace arm_compute #endif /*ARM_COMPUTE_NERESHAPELAYERKERNEL_H */ diff --git a/arm_compute/core/experimental/Types.h b/arm_compute/core/experimental/Types.h new file mode 100644 index 0000000000..6043db9ff4 --- /dev/null +++ b/arm_compute/core/experimental/Types.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2020 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_TYPES_H +#define ARM_COMPUTE_EXPERIMENTAL_TYPES_H + +#include "arm_compute/core/TensorShape.h" + +#include +#include + +namespace arm_compute +{ +class ITensor; + +/** Memory type */ +enum class TensorType +{ + ACL_SRC = 0, + ACL_SRC_0 = 0, + ACL_SRC_1 = 1, + ACL_SRC_2 = 2, + ACL_DST = 30, + ACL_DST_0 = 30, + ACL_DST_1 = 31, + ACL_INT = 50, + ACL_INT_0 = 50, + ACL_INT_1 = 51, + ACL_INT_2 = 52 +}; +using InputOperatorTensors = std::pair; +using OutputOperatorTensors = std::pair; +using OperatorTensors = OutputOperatorTensors; + +namespace experimental +{ +struct MemoryInfo +{ + MemoryInfo(TensorType type, size_t size, size_t alignment) + : type(type), size(size), alignment(alignment) + { + } + TensorType type; + size_t size; + size_t alignment; +}; + +using MemoryRequirements = std::vector; +} // namespace experimental +} // namespace arm_compute +#endif /* ARM_COMPUTE_EXPERIMENTAL_TYPES_H */ -- cgit v1.2.1