blob: c5b7fb1c51d9f4c45f675a40b646d2071e708222 [file] [log] [blame]
Anthony Barbier2a07e182017-08-04 18:20:27 +01001/*
Georgios Pinitasd9eb2752018-04-03 13:44:29 +01002 * Copyright (c) 2018 ARM Limited.
Anthony Barbier2a07e182017-08-04 18:20:27 +01003 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24#ifndef __ARM_COMPUTE_GRAPH_TYPES_H__
25#define __ARM_COMPUTE_GRAPH_TYPES_H__
26
Georgios Pinitasd9eb2752018-04-03 13:44:29 +010027#include "arm_compute/core/Error.h"
28#include "arm_compute/core/Types.h"
29#include "arm_compute/core/utils/strong_type/StrongType.h"
30#include "arm_compute/core/utils/strong_type/StrongTypeAttributes.h"
Georgios Pinitas7d3d1b92017-10-12 17:34:20 +010031
Georgios Pinitasd9eb2752018-04-03 13:44:29 +010032#include <limits>
33#include <string>
Anthony Barbier2a07e182017-08-04 18:20:27 +010034
35namespace arm_compute
36{
37namespace graph
38{
Georgios Pinitasd9eb2752018-04-03 13:44:29 +010039using arm_compute::Status;
40
Georgios Pinitase2c82fe2017-10-02 18:51:47 +010041using arm_compute::Coordinates;
42using arm_compute::DataType;
Georgios Pinitascac13b12018-04-27 19:07:19 +010043using arm_compute::DataLayout;
44using arm_compute::DataLayoutDimension;
Georgios Pinitasd9eb2752018-04-03 13:44:29 +010045using arm_compute::TensorShape;
46using arm_compute::Size2D;
47
48using arm_compute::ActivationLayerInfo;
Georgios Pinitas6f669f02017-09-26 12:32:57 +010049using arm_compute::NormType;
50using arm_compute::NormalizationLayerInfo;
Georgios Pinitase2c82fe2017-10-02 18:51:47 +010051using arm_compute::PadStrideInfo;
Anthony Barbier2a07e182017-08-04 18:20:27 +010052using arm_compute::PoolingLayerInfo;
53using arm_compute::PoolingType;
Georgios Pinitasd9eb2752018-04-03 13:44:29 +010054using arm_compute::DimensionRoundingType;
Georgios Pinitas087eaf62018-05-16 15:52:35 +010055using arm_compute::InterpolationPolicy;
Anthony Barbier2a07e182017-08-04 18:20:27 +010056
Georgios Pinitasd9eb2752018-04-03 13:44:29 +010057/** TODO (geopin01): Make ids strongly typed */
58using TensorID = unsigned int;
59using NodeID = unsigned int;
60using EdgeID = unsigned int;
61using Activation = arm_compute::ActivationLayerInfo::ActivationFunction;
Georgios Pinitas7d3d1b92017-10-12 17:34:20 +010062
Georgios Pinitasd9eb2752018-04-03 13:44:29 +010063/**< GraphID strong type */
64using GraphID = strong_type::StrongType<unsigned int, struct graph_id_t, strong_type::Comparable>;
65/* TODO (geopin01): Strong types for NodeID */
66
67/**< Constant TensorID specifying an equivalent of null tensor */
68constexpr TensorID NullTensorID = std::numeric_limits<TensorID>::max();
69/**< Constant NodeID specifying an equivalent of null node */
70constexpr NodeID EmptyNodeID = std::numeric_limits<NodeID>::max();
71/**< Constant EdgeID specifying an equivalent of null edge */
72constexpr EdgeID EmptyEdgeID = std::numeric_limits<EdgeID>::max();
73
74// Forward declarations
75class TensorDescriptor;
76
77/** Graph configuration structure */
78struct GraphConfig
Anthony Barbier2a07e182017-08-04 18:20:27 +010079{
Anthony Barbier7b607dc2018-07-13 15:55:24 +010080 bool use_function_memory_manager{ true }; /**< Use a memory manager to manage per-funcion auxilary memory */
81 bool use_transition_memory_manager{ true }; /**< Use a memory manager to manager transition buffer memory */
82 bool use_tuner{ false }; /**< Use a tuner in tunable backends */
83 int num_threads{ -1 }; /**< Number of threads to use (thread capable backends), if 0 the backend will auto-initialize, if -1 the backend will stay as it is. */
84 std::string tuner_file{ "acl_tuner.csv" }; /**< File to load/store tuning values from */
Anthony Barbier2a07e182017-08-04 18:20:27 +010085};
86
Georgios Pinitasd9eb2752018-04-03 13:44:29 +010087/**< Device target types */
88enum class Target
89{
90 UNSPECIFIED, /**< Unspecified Target */
91 NEON, /**< NEON capable target device */
92 CL, /**< OpenCL capable target device */
93 GC, /**< GLES compute capable target device */
94};
95
96/** Supported Element-wise operations */
97enum class EltwiseOperation
98{
99 ADD, /**< Arithmetic addition */
100 SUB, /**< Arithmetic subtraction */
101 MUL /**< Arithmetic multiplication */
102};
103
104/** Supported Convolution layer methods */
105enum class ConvolutionMethod
106{
107 DEFAULT, /**< Default approach using internal heuristics */
108 GEMM, /**< GEMM based convolution */
109 DIRECT, /**< Deep direct convolution */
110 WINOGRAD /**< Winograd based convolution */
111};
112
113/** Supported Depthwise Convolution layer methods */
114enum class DepthwiseConvolutionMethod
115{
116 DEFAULT, /**< Default approach using internal heuristics */
117 GEMV, /**< Generic GEMV based depthwise convolution */
118 OPTIMIZED_3x3, /**< Optimized 3x3 direct depthwise convolution */
119};
120
Giorgio Arena59631a12018-05-02 13:59:04 +0100121/** Enable or disable fast math for Convolution layer */
122enum class FastMathHint
123{
124 ENABLED, /**< Fast math enabled for Convolution layer */
125 DISABLED, /**< Fast math disabled for Convolution layer */
126};
127
Georgios Pinitasd9eb2752018-04-03 13:44:29 +0100128/** Supported nodes */
129enum class NodeType
Georgios Pinitas407c3e62017-10-25 18:26:46 +0100130{
131 ActivationLayer,
132 BatchNormalizationLayer,
Georgios Pinitas087eaf62018-05-16 15:52:35 +0100133 ChannelShuffleLayer,
Georgios Pinitas407c3e62017-10-25 18:26:46 +0100134 ConvolutionLayer,
Georgios Pinitas087eaf62018-05-16 15:52:35 +0100135 DeconvolutionLayer,
Georgios Pinitasd9eb2752018-04-03 13:44:29 +0100136 DepthConcatenateLayer,
Michalis Spyrou7bfe4c52017-11-24 09:54:20 +0000137 DepthwiseConvolutionLayer,
Georgios Pinitasd9eb2752018-04-03 13:44:29 +0100138 EltwiseLayer,
Michalis Spyrou27c9efb2017-10-09 15:46:30 +0100139 FlattenLayer,
Georgios Pinitas407c3e62017-10-25 18:26:46 +0100140 FullyConnectedLayer,
Georgios Pinitas407c3e62017-10-25 18:26:46 +0100141 NormalizationLayer,
142 PoolingLayer,
Michalis Spyrou27c9efb2017-10-09 15:46:30 +0100143 ReshapeLayer,
Georgios Pinitas087eaf62018-05-16 15:52:35 +0100144 ResizeLayer,
Georgios Pinitasd9eb2752018-04-03 13:44:29 +0100145 SoftmaxLayer,
146 SplitLayer,
147
148 Input,
149 Output,
150 Const,
Georgios Pinitas087eaf62018-05-16 15:52:35 +0100151
152 Dummy
Georgios Pinitas407c3e62017-10-25 18:26:46 +0100153};
154
Georgios Pinitasd9eb2752018-04-03 13:44:29 +0100155/** Backend Memory Manager affinity **/
156enum class MemoryManagerAffinity
Georgios Pinitase2c82fe2017-10-02 18:51:47 +0100157{
Georgios Pinitasd9eb2752018-04-03 13:44:29 +0100158 Buffer, /**< Affinity at buffer level */
159 Offset /**< Affinity at offset level */
160};
161
162/** NodeID-index struct
163 *
164 * Used to describe connections
165 */
166struct NodeIdxPair
167{
168 NodeID node_id; /**< Node ID */
169 size_t index; /**< Index */
170};
171
172/** Common node parameters */
173struct NodeParams
174{
175 std::string name; /**< Node name */
176 Target target; /**< Node target */
Georgios Pinitase2c82fe2017-10-02 18:51:47 +0100177};
Anthony Barbier2a07e182017-08-04 18:20:27 +0100178} // namespace graph
179} // namespace arm_compute
Georgios Pinitasd9eb2752018-04-03 13:44:29 +0100180#endif /* __ARM_COMPUTE_GRAPH_TYPES_H__ */