//============================================================================== // // Copyright (c) 2017-2021 Qualcomm Technologies, Inc. // All Rights Reserved. // Confidential and Proprietary - Qualcomm Technologies, Inc. // //============================================================================== #ifndef _SNPE_BUILDER_HPP_ #define _SNPE_BUILDER_HPP_ #include "SNPE/SNPE.hpp" #include "DlSystem/DlEnums.hpp" #include "DlSystem/UDLFunc.hpp" #include "DlSystem/DlOptional.hpp" #include "DlSystem/TensorShapeMap.hpp" #include "DlSystem/PlatformConfig.hpp" #include "DlSystem/IOBufferDataTypeMap.hpp" #include "DlSystem/RuntimeList.hpp" namespace zdl { namespace DlContainer { class IDlContainer; } } struct SNPEBuilderImpl; namespace zdl { namespace SNPE { /** @addtogroup c_plus_plus_apis C++ @{ */ /** * The builder class for creating SNPE objects. * Not meant to be extended. */ class ZDL_EXPORT SNPEBuilder final { private: std::unique_ptr<::SNPEBuilderImpl> m_Impl; public: /** * @brief Constructor of NeuralNetwork Builder with a supplied model. * * @param[in] container A container holding the model. * * @return A new instance of a SNPEBuilder object * that can be used to configure and build * an instance of SNPE. * */ explicit SNPEBuilder( zdl::DlContainer::IDlContainer* container); ~SNPEBuilder(); /** * NOTE: DEPRECATED, MAY BE REMOVED IN THE FUTURE. Please use * setRuntimeProcessorOrder() * * @brief Sets the runtime processor. * * @param[in] targetRuntimeProcessor The target runtime. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setRuntimeProcessor( zdl::DlSystem::Runtime_t targetRuntimeProcessor); /** * @brief Requests a performance profile. * * @param[in] targetRuntimeProfile The target performance profile. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setPerformanceProfile( zdl::DlSystem::PerformanceProfile_t performanceProfile); /** * @brief Sets the profiling level. Default profiling level for * SNPEBuilder is off. Off and basic only applies to DSP runtime. * * @param[in] profilingLevel The target profiling level. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setProfilingLevel( zdl::DlSystem::ProfilingLevel_t profilingLevel); /** * @brief Sets a preference for execution priority. * * This allows the caller to give coarse hint to SNPE runtime * about the priority of the network. SNPE runtime is free to use * this information to co-ordinate between different workloads * that may or may not extend beyond SNPE. * * @param[in] ExecutionPriorityHint_t The target performance profile. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setExecutionPriorityHint( zdl::DlSystem::ExecutionPriorityHint_t priority); /** * @brief Sets the layers that will generate output. * * @param[in] outputLayerNames List of layer names to * output. An empty list will * result in only the final * layer of the model being * the output layer. The list * will be copied. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setOutputLayers( const zdl::DlSystem::StringList& outputLayerNames); /** * @brief Sets the output tensor names. * * @param[in] outputTensorNames List of tensor names to * output. An empty list will * result in producing output for the final * output tensor of the model. * The list will be copied. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setOutputTensors( const zdl::DlSystem::StringList& outputTensorNames); /** * @brief Passes in a User-defined layer. * * @param udlBundle Bundle of udl factory function and a cookie * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setUdlBundle( zdl::DlSystem::UDLBundle udlBundle); /** * @brief Sets whether this neural network will perform inference with * input from user-supplied buffers, and write output to user-supplied * buffers. Default behaviour is to use tensors created by * ITensorFactory. * * @param[in] bufferMode Whether to use user-supplied buffer or not. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setUseUserSuppliedBuffers( bool bufferMode); /** * @brief Sets the debug mode of the runtime. * * @param[in] debugMode This enables debug mode for the runtime. It * does two things. For an empty * outputLayerNames list, all layers will be * output. It might also disable some internal * runtime optimizations (e.g., some networks * might be optimized by combining layers, * etc.). * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setDebugMode( bool debugMode); /** * NOTE: DEPRECATED, MAY BE REMOVED IN THE FUTURE. Please use * setRuntimeProcessorOrder() * * @brief Sets the mode of CPU fallback functionality. * * @param[in] mode This flag enables/disables the functionality * of CPU fallback. When the CPU fallback * functionality is enabled, layers in model that * violates runtime constraints will run on CPU * while the rest of non-violating layers will * run on the chosen runtime processor. In * disabled mode, models with layers violating * runtime constraints will NOT run on the chosen * runtime processor and will result in runtime * exception. By default, the functionality is * enabled. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setCPUFallbackMode( bool mode); /** * @brief Sets network's input dimensions to enable resizing of * the spatial dimensions of each layer for fully convolutional networks, * and the batch dimension for all networks. * * @param[in] tensorShapeMap The map of input names and their new dimensions. * The new dimensions overwrite the input dimensions * embedded in the model and then resize each layer * of the model. If the model contains * layers whose dimensions cannot be resized e.g FullyConnected, * exception will be thrown when SNPE instance is actually built. * In general the batch dimension is always resizable. * After resizing of layers' dimensions in model based * on new input dimensions, the new model is revalidated * against all runtime constraints, whose failures may * result in cpu fallback situation. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setInputDimensions(const zdl::DlSystem::TensorShapeMap& inputDimensionsMap); /** * @brief Sets the mode of init caching functionality. * * @param[in] mode This flag enables/disables the functionality of init caching. * When init caching functionality is enabled, a set of init caches * will be created during network building/initialization process * and will be added to DLC container. If such DLC container is saved * by the user, in subsequent network building/initialization processes * these init caches will be loaded from the DLC so as to reduce initialization time. * In disable mode, no init caches will be added to DLC container. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setInitCacheMode( bool cacheMode); /** * @brief Returns an instance of SNPE based on the current parameters. * * @return A new instance of a SNPE object that can be used * to execute models or null if any errors occur. */ std::unique_ptr build() noexcept; /** * @brief Sets the platform configuration. * * @param[in] platformConfig The platform configuration. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setPlatformConfig(const zdl::DlSystem::PlatformConfig& platformConfig); /** * @brief Sets network's runtime order of precedence. Example: * CPU_FLOAT32, GPU_FLOAT16, AIP_FIXED8_TF * Note:- setRuntimeProcessor() or setCPUFallbackMode() will be silently ignored when * setRuntimeProcessorOrder() is invoked * * @param[in] runtimeList The list of runtime in order of precedence * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setRuntimeProcessorOrder(const zdl::DlSystem::RuntimeList& runtimeList); /** * @brief Sets the unconsumed tensors as output * * @param[in] setOutput This enables unconsumed tensors (i.e) * outputs which are not inputs to any * layer (basically dead ends) to be marked * for output * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setUnconsumedTensorsAsOutputs( bool setOutput); /** * @brief Execution terminated when exceeding time limit. * Only valid for dsp runtime currently. * * @param[in] timeout Time limit value * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setTimeOut( uint64_t timeout); /** * @brief Sets the datatype of the buffer. * Only valid for dsp runtime currently. * * @param[in] Map of the buffer names and the datatype that needs to be set. * * @return The current instance of SNPEBuilder. */ SNPEBuilder& setBufferDataType(const zdl::DlSystem::IOBufferDataTypeMap& dataTypeMap); }; /** @} */ /* end_addtogroup c_plus_plus_apis C++ */ }} #endif