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