1 // 2 // Copyright © 2019 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #pragma once 7 8 #include "WorkloadFactory.hpp" 9 10 namespace armnn 11 { 12 13 class WorkloadFactoryBase : public IWorkloadFactory 14 { 15 public: SupportsSubTensors() const16 bool SupportsSubTensors() const override 17 { return false; }; 18 CreateSubTensorHandle(ITensorHandle &,TensorShape const &,unsigned int const *) const19 std::unique_ptr<ITensorHandle> CreateSubTensorHandle(ITensorHandle& /*parent*/, 20 TensorShape const& /*subTensorShape*/, 21 unsigned int const */*subTensorOrigin*/) const override 22 { return nullptr; }; 23 CreateInput(const InputQueueDescriptor &,const WorkloadInfo &) const24 std::unique_ptr<IWorkload> CreateInput(const InputQueueDescriptor& /*descriptor*/, 25 const WorkloadInfo& /*info*/) const override 26 { return nullptr; } 27 CreateTensorHandle(const TensorInfo &,const bool) const28 std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& /*tensorInfo*/, 29 const bool /*IsMemoryManaged*/) const override 30 { return nullptr; } 31 CreateTensorHandle(const TensorInfo &,DataLayout,const bool) const32 std::unique_ptr<ITensorHandle> CreateTensorHandle(const TensorInfo& /*tensorInfo*/, 33 DataLayout /*dataLayout*/, 34 const bool /*IsMemoryManaged*/) const override 35 { return nullptr; } 36 CreateAbs(const AbsQueueDescriptor &,const WorkloadInfo &) const37 std::unique_ptr<IWorkload> CreateAbs(const AbsQueueDescriptor& /*descriptor*/, 38 const WorkloadInfo& /*info*/) const override 39 { return nullptr; } 40 CreateActivation(const ActivationQueueDescriptor &,const WorkloadInfo &) const41 std::unique_ptr<IWorkload> CreateActivation(const ActivationQueueDescriptor& /*descriptor*/, 42 const WorkloadInfo& /*info*/) const override 43 { return nullptr; } 44 CreateAddition(const AdditionQueueDescriptor &,const WorkloadInfo &) const45 std::unique_ptr<IWorkload> CreateAddition(const AdditionQueueDescriptor& /*descriptor*/, 46 const WorkloadInfo& /*info*/) const override 47 { return nullptr; } 48 CreateArgMinMax(const ArgMinMaxQueueDescriptor &,const WorkloadInfo &) const49 std::unique_ptr<IWorkload> CreateArgMinMax(const ArgMinMaxQueueDescriptor& /*descriptor*/, 50 const WorkloadInfo& /*info*/) const override 51 { return nullptr; } 52 CreateBatchNormalization(const BatchNormalizationQueueDescriptor &,const WorkloadInfo &) const53 std::unique_ptr<IWorkload> CreateBatchNormalization(const BatchNormalizationQueueDescriptor& /*descriptor*/, 54 const WorkloadInfo& /*info*/) const override 55 { return nullptr; } 56 CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor &,const WorkloadInfo &) const57 std::unique_ptr<IWorkload> CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& /*descriptor*/, 58 const WorkloadInfo& /*info*/) const override 59 { return nullptr; } 60 CreateComparison(const ComparisonQueueDescriptor &,const WorkloadInfo &) const61 std::unique_ptr<IWorkload> CreateComparison(const ComparisonQueueDescriptor& /*descriptor*/, 62 const WorkloadInfo& /*info*/) const override 63 { return nullptr; } 64 CreateConcat(const ConcatQueueDescriptor &,const WorkloadInfo &) const65 std::unique_ptr<IWorkload> CreateConcat(const ConcatQueueDescriptor& /*descriptor*/, 66 const WorkloadInfo& /*info*/) const override 67 { return nullptr; } 68 CreateConstant(const ConstantQueueDescriptor &,const WorkloadInfo &) const69 std::unique_ptr<IWorkload> CreateConstant(const ConstantQueueDescriptor& /*descriptor*/, 70 const WorkloadInfo& /*info*/) const override 71 { return nullptr; } 72 CreateConvertFp16ToFp32(const ConvertFp16ToFp32QueueDescriptor &,const WorkloadInfo &) const73 std::unique_ptr<IWorkload> CreateConvertFp16ToFp32(const ConvertFp16ToFp32QueueDescriptor& /*descriptor*/, 74 const WorkloadInfo& /*info*/) const override 75 { return nullptr; } 76 CreateConvertFp32ToFp16(const ConvertFp32ToFp16QueueDescriptor &,const WorkloadInfo &) const77 std::unique_ptr<IWorkload> CreateConvertFp32ToFp16(const ConvertFp32ToFp16QueueDescriptor& /*descriptor*/, 78 const WorkloadInfo& /*info*/) const override 79 { return nullptr; } 80 CreateConvolution2d(const Convolution2dQueueDescriptor &,const WorkloadInfo &) const81 std::unique_ptr<IWorkload> CreateConvolution2d(const Convolution2dQueueDescriptor& /*descriptor*/, 82 const WorkloadInfo& /*info*/) const override 83 { return nullptr; } 84 CreateDebug(const DebugQueueDescriptor &,const WorkloadInfo &) const85 std::unique_ptr<IWorkload> CreateDebug(const DebugQueueDescriptor& /*descriptor*/, 86 const WorkloadInfo& /*info*/) const override 87 { return nullptr; } 88 CreateDepthToSpace(const DepthToSpaceQueueDescriptor &,const WorkloadInfo &) const89 std::unique_ptr<IWorkload> CreateDepthToSpace(const DepthToSpaceQueueDescriptor& /*descriptor*/, 90 const WorkloadInfo& /*info*/) const override 91 { return nullptr; } 92 CreateDepthwiseConvolution2d(const DepthwiseConvolution2dQueueDescriptor &,const WorkloadInfo &) const93 std::unique_ptr<IWorkload> CreateDepthwiseConvolution2d(const DepthwiseConvolution2dQueueDescriptor& /*descriptor*/, 94 const WorkloadInfo& /*info*/) const override 95 { return nullptr; } 96 CreateDequantize(const DequantizeQueueDescriptor &,const WorkloadInfo &) const97 std::unique_ptr<IWorkload> CreateDequantize(const DequantizeQueueDescriptor& /*descriptor*/, 98 const WorkloadInfo& /*info*/) const override 99 { return nullptr; } 100 CreateDetectionPostProcess(const DetectionPostProcessQueueDescriptor &,const WorkloadInfo &) const101 std::unique_ptr<IWorkload> CreateDetectionPostProcess(const DetectionPostProcessQueueDescriptor& /*descriptor*/, 102 const WorkloadInfo& /*info*/) const override 103 { return nullptr; } 104 CreateDivision(const DivisionQueueDescriptor &,const WorkloadInfo &) const105 std::unique_ptr<IWorkload> CreateDivision(const DivisionQueueDescriptor& /*descriptor*/, 106 const WorkloadInfo& /*info*/) const override 107 { return nullptr; } 108 CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor & descriptor,const WorkloadInfo & info) const109 std::unique_ptr<IWorkload> CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor& descriptor, 110 const WorkloadInfo& info) const override 111 { 112 if (descriptor.m_Parameters.m_Operation == UnaryOperation::Abs) 113 { 114 AbsQueueDescriptor absDescriptor; 115 return CreateAbs(absDescriptor, info); 116 } 117 else if (descriptor.m_Parameters.m_Operation == UnaryOperation::Rsqrt) 118 { 119 RsqrtQueueDescriptor rsqrtDescriptor; 120 return CreateRsqrt(rsqrtDescriptor, info); 121 } 122 else if (descriptor.m_Parameters.m_Operation == UnaryOperation::LogicalNot) 123 { 124 return CreateLogicalUnary(descriptor, info); 125 } 126 return nullptr; 127 } 128 CreateFakeQuantization(const FakeQuantizationQueueDescriptor &,const WorkloadInfo &) const129 std::unique_ptr<IWorkload> CreateFakeQuantization(const FakeQuantizationQueueDescriptor& /*descriptor*/, 130 const WorkloadInfo& /*info*/) const override 131 { return nullptr; } 132 CreateFloor(const FloorQueueDescriptor &,const WorkloadInfo &) const133 std::unique_ptr<IWorkload> CreateFloor(const FloorQueueDescriptor& /*descriptor*/, 134 const WorkloadInfo& /*info*/) const override 135 { return nullptr; } 136 CreateFullyConnected(const FullyConnectedQueueDescriptor &,const WorkloadInfo &) const137 std::unique_ptr<IWorkload> CreateFullyConnected(const FullyConnectedQueueDescriptor& /*descriptor*/, 138 const WorkloadInfo& /*info*/) const override 139 { return nullptr; } 140 CreateGather(const GatherQueueDescriptor &,const WorkloadInfo &) const141 std::unique_ptr<IWorkload> CreateGather(const GatherQueueDescriptor& /*descriptor*/, 142 const WorkloadInfo& /*info*/) const override 143 { return nullptr; } 144 CreateInstanceNormalization(const InstanceNormalizationQueueDescriptor &,const WorkloadInfo &) const145 std::unique_ptr<IWorkload> CreateInstanceNormalization(const InstanceNormalizationQueueDescriptor& /*descriptor*/, 146 const WorkloadInfo& /*info*/) const override 147 { return nullptr; } 148 CreateL2Normalization(const L2NormalizationQueueDescriptor &,const WorkloadInfo &) const149 std::unique_ptr<IWorkload> CreateL2Normalization(const L2NormalizationQueueDescriptor& /*descriptor*/, 150 const WorkloadInfo& /*info*/) const override 151 { return nullptr; } 152 CreateLogSoftmax(const LogSoftmaxQueueDescriptor &,const WorkloadInfo &) const153 std::unique_ptr<IWorkload> CreateLogSoftmax(const LogSoftmaxQueueDescriptor& /*descriptor*/, 154 const WorkloadInfo& /*info*/) const override 155 { return nullptr; } 156 CreateLstm(const LstmQueueDescriptor &,const WorkloadInfo &) const157 std::unique_ptr<IWorkload> CreateLstm(const LstmQueueDescriptor& /*descriptor*/, 158 const WorkloadInfo& /*info*/) const override 159 { return nullptr; } 160 CreateMaximum(const MaximumQueueDescriptor &,const WorkloadInfo &) const161 std::unique_ptr<IWorkload> CreateMaximum(const MaximumQueueDescriptor& /*descriptor*/, 162 const WorkloadInfo& /*info*/) const override 163 { return nullptr; } 164 CreateMean(const MeanQueueDescriptor &,const WorkloadInfo &) const165 std::unique_ptr<IWorkload> CreateMean(const MeanQueueDescriptor& /*descriptor*/, 166 const WorkloadInfo& /*info*/) const override 167 { return nullptr; } 168 CreateMemCopy(const MemCopyQueueDescriptor &,const WorkloadInfo &) const169 std::unique_ptr<IWorkload> CreateMemCopy(const MemCopyQueueDescriptor& /*descriptor*/, 170 const WorkloadInfo& /*info*/) const override 171 { return nullptr; } 172 CreateMemImport(const MemImportQueueDescriptor &,const WorkloadInfo &) const173 std::unique_ptr<IWorkload> CreateMemImport(const MemImportQueueDescriptor& /*descriptor*/, 174 const WorkloadInfo& /*info*/) const override 175 { return nullptr; } 176 CreateMerge(const MergeQueueDescriptor &,const WorkloadInfo &) const177 std::unique_ptr<IWorkload> CreateMerge(const MergeQueueDescriptor& /*descriptor*/, 178 const WorkloadInfo& /*info*/) const override 179 { return nullptr; } 180 CreateMinimum(const MinimumQueueDescriptor &,const WorkloadInfo &) const181 std::unique_ptr<IWorkload> CreateMinimum(const MinimumQueueDescriptor& /*descriptor*/, 182 const WorkloadInfo& /*info*/) const override 183 { return nullptr; } 184 CreateMultiplication(const MultiplicationQueueDescriptor &,const WorkloadInfo &) const185 std::unique_ptr<IWorkload> CreateMultiplication(const MultiplicationQueueDescriptor& /*descriptor*/, 186 const WorkloadInfo& /*info*/) const override 187 { return nullptr; } 188 CreateNormalization(const NormalizationQueueDescriptor &,const WorkloadInfo &) const189 std::unique_ptr<IWorkload> CreateNormalization(const NormalizationQueueDescriptor& /*descriptor*/, 190 const WorkloadInfo& /*info*/) const override 191 { return nullptr; } 192 CreateOutput(const OutputQueueDescriptor &,const WorkloadInfo &) const193 std::unique_ptr<IWorkload> CreateOutput(const OutputQueueDescriptor& /*descriptor*/, 194 const WorkloadInfo& /*info*/) const override 195 { return nullptr; } 196 CreatePad(const PadQueueDescriptor &,const WorkloadInfo &) const197 std::unique_ptr<IWorkload> CreatePad(const PadQueueDescriptor& /*descriptor*/, 198 const WorkloadInfo& /*info*/) const override 199 { return nullptr; } 200 CreatePermute(const PermuteQueueDescriptor &,const WorkloadInfo &) const201 std::unique_ptr<IWorkload> CreatePermute(const PermuteQueueDescriptor& /*descriptor*/, 202 const WorkloadInfo& /*info*/) const override 203 { return nullptr; } 204 CreatePooling2d(const Pooling2dQueueDescriptor &,const WorkloadInfo &) const205 std::unique_ptr<IWorkload> CreatePooling2d(const Pooling2dQueueDescriptor& /*descriptor*/, 206 const WorkloadInfo& /*info*/) const override 207 { return nullptr; } 208 CreatePreCompiled(const PreCompiledQueueDescriptor &,const WorkloadInfo &) const209 std::unique_ptr<IWorkload> CreatePreCompiled(const PreCompiledQueueDescriptor& /*descriptor*/, 210 const WorkloadInfo& /*info*/) const override 211 { return nullptr; } 212 CreatePrelu(const PreluQueueDescriptor &,const WorkloadInfo &) const213 std::unique_ptr<IWorkload> CreatePrelu(const PreluQueueDescriptor& /*descriptor*/, 214 const WorkloadInfo& /*info*/) const override 215 { return nullptr; } 216 CreateQuantize(const QuantizeQueueDescriptor &,const WorkloadInfo &) const217 std::unique_ptr<IWorkload> CreateQuantize(const QuantizeQueueDescriptor& /*descriptor*/, 218 const WorkloadInfo& /*info*/) const override 219 { return nullptr; } 220 CreateQuantizedLstm(const QuantizedLstmQueueDescriptor &,const WorkloadInfo &) const221 std::unique_ptr<IWorkload> CreateQuantizedLstm(const QuantizedLstmQueueDescriptor& /*descriptor*/, 222 const WorkloadInfo& /*info*/) const override 223 { return nullptr; } 224 CreateRank(const RankQueueDescriptor &,const WorkloadInfo &) const225 std::unique_ptr<IWorkload> CreateRank(const RankQueueDescriptor& /*descriptor*/, 226 const WorkloadInfo& /*info*/) const override 227 { return nullptr; } 228 CreateReshape(const ReshapeQueueDescriptor &,const WorkloadInfo &) const229 std::unique_ptr<IWorkload> CreateReshape(const ReshapeQueueDescriptor& /*descriptor*/, 230 const WorkloadInfo& /*info*/) const override 231 { return nullptr; } 232 CreateResize(const ResizeQueueDescriptor &,const WorkloadInfo &) const233 std::unique_ptr<IWorkload> CreateResize(const ResizeQueueDescriptor& /*descriptor*/, 234 const WorkloadInfo& /*info*/) const override 235 { return nullptr; } 236 CreateRsqrt(const RsqrtQueueDescriptor &,const WorkloadInfo &) const237 std::unique_ptr<IWorkload> CreateRsqrt(const RsqrtQueueDescriptor& /*descriptor*/, 238 const WorkloadInfo& /*info*/) const override 239 { return nullptr; } 240 CreateSlice(const SliceQueueDescriptor &,const WorkloadInfo &) const241 std::unique_ptr<IWorkload> CreateSlice(const SliceQueueDescriptor& /*descriptor*/, 242 const WorkloadInfo& /*info*/) const override 243 { return nullptr; } 244 CreateSoftmax(const SoftmaxQueueDescriptor &,const WorkloadInfo &) const245 std::unique_ptr<IWorkload> CreateSoftmax(const SoftmaxQueueDescriptor& /*descriptor*/, 246 const WorkloadInfo& /*info*/) const override 247 { return nullptr; } 248 CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor &,const WorkloadInfo &) const249 std::unique_ptr<IWorkload> CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& /*descriptor*/, 250 const WorkloadInfo& /*info*/) const override 251 { return nullptr; } 252 CreateSpaceToDepth(const SpaceToDepthQueueDescriptor &,const WorkloadInfo &) const253 std::unique_ptr<IWorkload> CreateSpaceToDepth(const SpaceToDepthQueueDescriptor& /*descriptor*/, 254 const WorkloadInfo& /*info*/) const override 255 { return nullptr; } 256 CreateSubtraction(const SubtractionQueueDescriptor &,const WorkloadInfo &) const257 std::unique_ptr<IWorkload> CreateSubtraction(const SubtractionQueueDescriptor& /*descriptor*/, 258 const WorkloadInfo& /*info*/) const override 259 { return nullptr; } 260 CreateSplitter(const SplitterQueueDescriptor &,const WorkloadInfo &) const261 std::unique_ptr<IWorkload> CreateSplitter(const SplitterQueueDescriptor& /*descriptor*/, 262 const WorkloadInfo& /*info*/) const override 263 { return nullptr; } 264 CreateStack(const StackQueueDescriptor &,const WorkloadInfo &) const265 std::unique_ptr<IWorkload> CreateStack(const StackQueueDescriptor& /*descriptor*/, 266 const WorkloadInfo& /*info*/) const override 267 { return nullptr; } 268 CreateStridedSlice(const StridedSliceQueueDescriptor &,const WorkloadInfo &) const269 std::unique_ptr<IWorkload> CreateStridedSlice(const StridedSliceQueueDescriptor& /*descriptor*/, 270 const WorkloadInfo& /*info*/) const override 271 { return nullptr; } 272 CreateSwitch(const SwitchQueueDescriptor &,const WorkloadInfo &) const273 std::unique_ptr<IWorkload> CreateSwitch(const SwitchQueueDescriptor& /*descriptor*/, 274 const WorkloadInfo& /*info*/) const override 275 { return nullptr; } 276 CreateTranspose(const TransposeQueueDescriptor &,const WorkloadInfo &) const277 std::unique_ptr<IWorkload> CreateTranspose(const TransposeQueueDescriptor& /*descriptor*/, 278 const WorkloadInfo& /*info*/) const override 279 { return nullptr; } 280 CreateTransposeConvolution2d(const TransposeConvolution2dQueueDescriptor &,const WorkloadInfo &) const281 std::unique_ptr<IWorkload> CreateTransposeConvolution2d(const TransposeConvolution2dQueueDescriptor& /*descriptor*/, 282 const WorkloadInfo& /*info*/) const override 283 { return nullptr; } 284 }; 285 286 } //namespace armnn