123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- //==============================================================================
- //
- // 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<SNPE> 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
|