From e9444751017fe108ce80fd5c270d04fffeb14e1e Mon Sep 17 00:00:00 2001 From: Sadik Armagan Date: Wed, 2 Dec 2020 11:28:58 +0000 Subject: IVGCVSW-5482 'Add a ClCompileContext parameter to each ClWorkload Constructor' * Injected CLCompileContext object to each CL workload. Signed-off-by: Sadik Armagan Change-Id: I4837dbd3d5b56cf743b3b89c944e3cdf8b11a42a --- src/backends/cl/ClWorkloadFactory.cpp | 130 +++++++++++++++++++--------------- 1 file changed, 71 insertions(+), 59 deletions(-) (limited to 'src/backends/cl/ClWorkloadFactory.cpp') diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp index 41b779f64a..35186f286a 100644 --- a/src/backends/cl/ClWorkloadFactory.cpp +++ b/src/backends/cl/ClWorkloadFactory.cpp @@ -107,9 +107,8 @@ std::unique_ptr ClWorkloadFactory::MakeWorkload(const QueueDescriptor void ClWorkloadFactory::InitializeCLCompileContext() { // Initialize our m_CLCompileContext using default device and context - cl::Device device = cl::Device::getDefault(); - cl::Context context = cl::Context(device); - + auto context = arm_compute::CLKernelLibrary::get().context(); + auto device = arm_compute::CLKernelLibrary::get().get_device(); m_CLCompileContext = arm_compute::CLCompileContext(context, device); if (m_ModelContextPtr) @@ -200,64 +199,64 @@ std::unique_ptr ClWorkloadFactory::CreateAbs(const AbsQueueDescriptor std::unique_ptr ClWorkloadFactory::CreateActivation(const ActivationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateAddition(const AdditionQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateArgMinMax(const ArgMinMaxQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return std::make_unique(descriptor, info); + return std::make_unique(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateBatchNormalization( const BatchNormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateComparison(const ComparisonQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateConcat(const ConcatQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateConstant(const ConstantQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateConvertFp16ToFp32( const ConvertFp16ToFp32QueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateConvertFp32ToFp16( const ConvertFp32ToFp16QueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateConvolution2d(const Convolution2dQueueDescriptor& descriptor, @@ -278,45 +277,46 @@ std::unique_ptr ClWorkloadFactory::CreateConvolution2d(const Convolut return MakeWorkload(descriptor, info, m_MemoryManager->GetIntraLayerManager(), + m_CLCompileContext, isFastMathEnabled); } std::unique_ptr ClWorkloadFactory::CreateDebug(const DebugQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateDepthToSpace(const DepthToSpaceQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateDepthwiseConvolution2d( const DepthwiseConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateDequantize(const DequantizeQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateDetectionPostProcess( const DetectionPostProcessQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateDivision(const DivisionQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateElementwiseUnary(const ElementwiseUnaryQueueDescriptor& descriptor, @@ -330,22 +330,22 @@ std::unique_ptr ClWorkloadFactory::CreateElementwiseUnary(const Eleme absQueueDescriptor.m_Inputs = descriptor.m_Inputs; absQueueDescriptor.m_Outputs = descriptor.m_Outputs; - return std::make_unique(absQueueDescriptor, info); + return std::make_unique(absQueueDescriptor, info, m_CLCompileContext); } case UnaryOperation::Exp: - return std::make_unique(descriptor, info); + return std::make_unique(descriptor, info, m_CLCompileContext); case UnaryOperation::Neg: - return std::make_unique(descriptor, info); + return std::make_unique(descriptor, info, m_CLCompileContext); case UnaryOperation::Rsqrt: { RsqrtQueueDescriptor rsqrtQueueDescriptor; rsqrtQueueDescriptor.m_Inputs = descriptor.m_Inputs; rsqrtQueueDescriptor.m_Outputs = descriptor.m_Outputs; - return std::make_unique(rsqrtQueueDescriptor, info); + return std::make_unique(rsqrtQueueDescriptor, info, m_CLCompileContext); } case UnaryOperation::LogicalNot: - return std::make_unique(descriptor, info); + return std::make_unique(descriptor, info, m_CLCompileContext); default: return nullptr; } @@ -365,25 +365,28 @@ std::unique_ptr ClWorkloadFactory::CreateEqual(const EqualQueueDescri std::unique_ptr ClWorkloadFactory::CreateFill(const FillQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return std::make_unique(descriptor, info); + return std::make_unique(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateFloor(const FloorQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateFullyConnected(const FullyConnectedQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info, m_MemoryManager->GetIntraLayerManager()); + return MakeWorkload(descriptor, + info, + m_MemoryManager->GetIntraLayerManager(), + m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateGather(const GatherQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateGreater(const GreaterQueueDescriptor& descriptor, @@ -407,13 +410,13 @@ std::unique_ptr ClWorkloadFactory::CreateInstanceNormalization( const InstanceNormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateL2Normalization(const L2NormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateLogicalBinary(const LogicalBinaryQueueDescriptor& descriptor, @@ -422,9 +425,9 @@ std::unique_ptr ClWorkloadFactory::CreateLogicalBinary(const LogicalB switch(descriptor.m_Parameters.m_Operation) { case LogicalBinaryOperation::LogicalAnd: - return std::make_unique(descriptor, info); + return std::make_unique(descriptor, info, m_CLCompileContext); case LogicalBinaryOperation::LogicalOr: - return std::make_unique(descriptor, info); + return std::make_unique(descriptor, info, m_CLCompileContext); default: return nullptr; } @@ -433,25 +436,28 @@ std::unique_ptr ClWorkloadFactory::CreateLogicalBinary(const LogicalB std::unique_ptr ClWorkloadFactory::CreateLogSoftmax(const LogSoftmaxQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info, m_MemoryManager->GetIntraLayerManager()); + return MakeWorkload(descriptor, + info, + m_MemoryManager->GetIntraLayerManager(), + m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateLstm(const LstmQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateMaximum(const MaximumQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateMean(const MeanQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateMemCopy(const MemCopyQueueDescriptor& descriptor, @@ -485,19 +491,19 @@ std::unique_ptr ClWorkloadFactory::CreateMerger(const MergerQueueDesc std::unique_ptr ClWorkloadFactory::CreateMinimum(const MinimumQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateMultiplication(const MultiplicationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateNormalization(const NormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateOutput(const OutputQueueDescriptor& descriptor, @@ -509,61 +515,61 @@ std::unique_ptr ClWorkloadFactory::CreateOutput(const OutputQueueDesc std::unique_ptr ClWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreatePermute(const PermuteQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreatePooling2d(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreatePreCompiled(const PreCompiledQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreatePrelu(const PreluQueueDescriptor &descriptor, const WorkloadInfo &info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateQLstm(const QLstmQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return std::make_unique(descriptor, info); + return std::make_unique(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateQuantize(const QuantizeQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateQuantizedLstm(const QuantizedLstmQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateReshape(const ReshapeQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateResize(const ResizeQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateResizeBilinear(const ResizeBilinearQueueDescriptor& descriptor, @@ -595,62 +601,68 @@ std::unique_ptr ClWorkloadFactory::CreateRsqrt(const RsqrtQueueDescri std::unique_ptr ClWorkloadFactory::CreateSlice(const SliceQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateSoftmax(const SoftmaxQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return std::make_unique(descriptor, info, m_MemoryManager->GetIntraLayerManager()); + return std::make_unique(descriptor, + info, + m_MemoryManager->GetIntraLayerManager(), + m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateSpaceToDepth(const SpaceToDepthQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateSplitter(const SplitterQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateStack(const StackQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateStridedSlice(const StridedSliceQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateSubtraction(const SubtractionQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateTranspose(const TransposeQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info); + return MakeWorkload(descriptor, info, m_CLCompileContext); } std::unique_ptr ClWorkloadFactory::CreateTransposeConvolution2d( const TransposeConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const { - return MakeWorkload(descriptor, info, m_MemoryManager->GetIntraLayerManager()); + return MakeWorkload(descriptor, + info, + m_MemoryManager->GetIntraLayerManager(), + m_CLCompileContext); } } // namespace armnn -- cgit v1.2.1