/* * Copyright (c) 2018-2021, 2023 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 ACL_ARM_COMPUTE_GRAPH_TYPES_H #define ACL_ARM_COMPUTE_GRAPH_TYPES_H #include "arm_compute/core/Error.h" #include "arm_compute/core/PixelValue.h" #include "arm_compute/core/Types.h" #include "arm_compute/function_info/ActivationLayerInfo.h" #include "arm_compute/function_info/ConvolutionInfo.h" #include "arm_compute/function_info/FullyConnectedLayerInfo.h" #include "arm_compute/function_info/GEMMInfo.h" #include "arm_compute/runtime/CL/CLTunerTypes.h" #include "arm_compute/runtime/CL/CLTypes.h" #include #include namespace arm_compute { namespace graph { using arm_compute::CLBackendType; using arm_compute::CLTunerMode; using arm_compute::Status; using arm_compute::Coordinates; using arm_compute::DataLayout; using arm_compute::DataLayoutDimension; using arm_compute::DataType; using arm_compute::PermutationVector; using arm_compute::PixelValue; using arm_compute::Size2D; using arm_compute::TensorShape; using arm_compute::ActivationLayerInfo; using arm_compute::DetectionOutputLayerInfo; using arm_compute::DetectionPostProcessLayerInfo; using arm_compute::DimensionRoundingType; using arm_compute::FullyConnectedLayerInfo; using arm_compute::InterpolationPolicy; using arm_compute::NormalizationLayerInfo; using arm_compute::NormType; using arm_compute::PadStrideInfo; using arm_compute::PoolingLayerInfo; using arm_compute::PoolingType; using arm_compute::PriorBoxLayerInfo; using GraphID = unsigned int; using TensorID = unsigned int; using NodeID = unsigned int; using EdgeID = unsigned int; using Activation = arm_compute::ActivationLayerInfo::ActivationFunction; /**< Constant TensorID specifying an equivalent of null tensor */ constexpr TensorID NullTensorID = std::numeric_limits::max(); /**< Constant NodeID specifying an equivalent of null node */ constexpr NodeID EmptyNodeID = std::numeric_limits::max(); /**< Constant EdgeID specifying an equivalent of null edge */ constexpr EdgeID EmptyEdgeID = std::numeric_limits::max(); // Forward declarations struct TensorDescriptor; /** Graph configuration structure */ struct GraphConfig { bool use_function_memory_manager{true}; /**< Use a memory manager to manage per-function auxilary memory */ bool use_function_weights_manager{true}; /**< Use a weights manager to manage transformed weights */ bool use_transition_memory_manager{true}; /**< Use a memory manager to manager transition buffer memory */ bool use_tuner{false}; /**< Use a tuner in tunable backends */ bool use_synthetic_type{false}; /**< Convert graph to a synthetic graph for a data type */ DataType synthetic_type{DataType::QASYMM8}; /**< The data type of the synthetic graph */ CLTunerMode tuner_mode{CLTunerMode::EXHAUSTIVE}; /**< Tuner mode to be used by the CL tuner */ 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. */ std::string tuner_file{"acl_tuner.csv"}; /**< File to load/store tuning values from */ std::string mlgo_file{"heuristics.mlgo"}; /**< Filename to load MLGO heuristics from */ CLBackendType backend_type{CLBackendType::Native}; /**< CL backend type to use */ }; /**< Device target types */ enum class Target { UNSPECIFIED, /**< Unspecified Target */ NEON, /**< Arm® Neon™ capable target device */ CL, /**< OpenCL capable target device */ CLVK, /**< CLVK capable target device */ }; /** Supported Element-wise operations */ enum class EltwiseOperation { Add, /**< Arithmetic addition */ Sub, /**< Arithmetic subtraction */ Mul, /**< Arithmetic multiplication */ Max, /**< Arithmetic maximum */ Div, /**< Arithmetic division */ Min, /**< Arithmetic minimum */ }; /** Supported Unary Element-wise operations */ enum class UnaryEltwiseOperation { Exp /**< Exp */ }; /** Supported Convolution layer methods */ enum class ConvolutionMethod { Default, /**< Default approach using internal heuristics */ GEMM, /**< GEMM based convolution */ Direct, /**< Deep direct convolution */ Winograd /**< Winograd based convolution */ }; /** Supported Depthwise Convolution layer methods */ enum class DepthwiseConvolutionMethod { Default, /**< Default approach using internal heuristics */ GEMV, /**< Generic GEMV based depthwise convolution */ Optimized3x3, /**< Optimized 3x3 direct depthwise convolution */ }; /** Enable or disable fast math for Convolution layer */ enum class FastMathHint { Enabled, /**< Fast math enabled for Convolution layer */ Disabled, /**< Fast math disabled for Convolution layer */ }; /** Supported nodes */ enum class NodeType { ActivationLayer, ArgMinMaxLayer, BatchNormalizationLayer, BoundingBoxTransformLayer, ChannelShuffleLayer, ConcatenateLayer, ConvolutionLayer, DeconvolutionLayer, DepthToSpaceLayer, DepthwiseConvolutionLayer, DequantizationLayer, DetectionOutputLayer, DetectionPostProcessLayer, EltwiseLayer, FlattenLayer, FullyConnectedLayer, FusedConvolutionBatchNormalizationLayer, FusedDepthwiseConvolutionBatchNormalizationLayer, GenerateProposalsLayer, L2NormalizeLayer, NormalizationLayer, NormalizePlanarYUVLayer, PadLayer, PermuteLayer, PoolingLayer, PReluLayer, PrintLayer, PriorBoxLayer, QuantizationLayer, ReductionOperationLayer, ReorgLayer, ReshapeLayer, ResizeLayer, ROIAlignLayer, SoftmaxLayer, SliceLayer, SplitLayer, StackLayer, StridedSliceLayer, UpsampleLayer, UnaryEltwiseLayer, Input, Output, Const, Dummy }; /** Backend Memory Manager affinity **/ enum class MemoryManagerAffinity { Buffer, /**< Affinity at buffer level */ Offset /**< Affinity at offset level */ }; /** NodeID-index struct * * Used to describe connections */ struct NodeIdxPair { NodeID node_id; /**< Node ID */ size_t index; /**< Index */ }; /** Common node parameters */ struct NodeParams { std::string name; /**< Node name */ Target target; /**< Node target */ }; } // namespace graph } // namespace arm_compute #endif // ACL_ARM_COMPUTE_GRAPH_TYPES_H