You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
306 lines
10 KiB
306 lines
10 KiB
//==============================================================================
|
|
//
|
|
// 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
|
|
|