// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "RefBatchNormalizationWorkload.hpp" #include "BatchNormImpl.hpp" #include "RefWorkloadUtils.hpp" #include "Profiling.hpp" namespace armnn { RefBatchNormalizationWorkload::RefBatchNormalizationWorkload(const BatchNormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) : BaseWorkload(descriptor, info) , m_Mean (std::make_unique(*(descriptor.m_Mean))) , m_Variance(std::make_unique(*(descriptor.m_Variance))) , m_Beta (std::make_unique(*(descriptor.m_Beta))) , m_Gamma (std::make_unique(*(descriptor.m_Gamma))) {} void RefBatchNormalizationWorkload::Execute() const { Execute(m_Data.m_Inputs, m_Data.m_Outputs); } void RefBatchNormalizationWorkload::ExecuteAsync(WorkingMemDescriptor &workingMemDescriptor) { Execute(workingMemDescriptor.m_Inputs, workingMemDescriptor.m_Outputs); } void RefBatchNormalizationWorkload::Execute(std::vector inputs, std::vector outputs) const { ARMNN_SCOPED_PROFILING_EVENT(Compute::CpuRef, "RefBatchNormalizationWorkload_Execute"); std::unique_ptr> meanDecoder = MakeDecoder(m_Mean->GetTensorInfo(), m_Mean->Map(true)); std::unique_ptr> varianceDecoder = MakeDecoder(m_Variance->GetTensorInfo(), m_Variance->Map(true)); std::unique_ptr> gammaDecoder = MakeDecoder(m_Gamma->GetTensorInfo(), m_Gamma->Map(true)); std::unique_ptr> betaDecoder = MakeDecoder(m_Beta->GetTensorInfo(), m_Beta->Map(true)); std::unique_ptr> inputDecoder = MakeDecoder(GetTensorInfo(inputs[0]), inputs[0]->Map()); std::unique_ptr> outputEncoder = MakeEncoder(GetTensorInfo(outputs[0]), outputs[0]->Map()); BatchNormImpl(m_Data, *meanDecoder, *varianceDecoder, *betaDecoder, *gammaDecoder, *inputDecoder, *outputEncoder); } } // namespace armnn