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.
258 lines
8.4 KiB
258 lines
8.4 KiB
//==============================================================================
|
|
//
|
|
// Copyright (c) 2015-2021 Qualcomm Technologies, Inc.
|
|
// All Rights Reserved.
|
|
// Confidential and Proprietary - Qualcomm Technologies, Inc.
|
|
//
|
|
//==============================================================================
|
|
|
|
#ifndef _SNPE_SNPE_HPP_
|
|
#define _SNPE_SNPE_HPP_
|
|
|
|
#include "DlSystem/DlOptional.hpp"
|
|
#include "DlSystem/DlVersion.hpp"
|
|
#include "DlSystem/IBufferAttributes.hpp"
|
|
#include "DlSystem/ITensor.hpp"
|
|
#include "DlSystem/TensorShape.hpp"
|
|
#include "DlSystem/TensorMap.hpp"
|
|
#include "DlSystem/String.hpp"
|
|
#include "DlSystem/StringList.hpp"
|
|
#include "DlSystem/IUserBuffer.hpp"
|
|
#include "DlSystem/UserBufferMap.hpp"
|
|
#include "DlSystem/UserMemoryMap.hpp"
|
|
#include "DlSystem/ZdlExportDefine.hpp"
|
|
|
|
namespace zdl {
|
|
namespace SNPE
|
|
{
|
|
class SnpeRuntime;
|
|
}
|
|
}
|
|
namespace zdl {
|
|
namespace DiagLog
|
|
{
|
|
class IDiagLog;
|
|
}
|
|
}
|
|
|
|
namespace zdl { namespace SNPE {
|
|
/** @addtogroup c_plus_plus_apis C++
|
|
@{ */
|
|
|
|
/**
|
|
* @brief .
|
|
*
|
|
* The SNPE interface class definition
|
|
*/
|
|
class ZDL_EXPORT SNPE final
|
|
{
|
|
public:
|
|
|
|
// keep this undocumented to be hidden in doxygen using HIDE_UNDOC_MEMBERS
|
|
explicit SNPE(std::unique_ptr<zdl::SNPE::SnpeRuntime>&& runtime) noexcept;
|
|
~SNPE();
|
|
|
|
/**
|
|
* @brief Gets the names of input tensors to the network
|
|
*
|
|
* To support multiple input scenarios, where multiple tensors are
|
|
* passed through execute() in a TensorMap, each tensor needs to
|
|
* be uniquely named. The names of tensors can be retrieved
|
|
* through this function.
|
|
*
|
|
* In the case of a single input, one name will be returned.
|
|
*
|
|
* @note Note that because the returned value is an Optional list,
|
|
* the list must be verified as boolean true value before being
|
|
* dereferenced.
|
|
*
|
|
* @return An Optional List of input tensor names.
|
|
*
|
|
* @see zdl::DlSystem::Optional
|
|
*/
|
|
zdl::DlSystem::Optional<zdl::DlSystem::StringList>
|
|
getInputTensorNames() const noexcept;
|
|
|
|
/**
|
|
* @brief Gets the names of output tensors to the network
|
|
*
|
|
* @return List of output tensor names.
|
|
*/
|
|
zdl::DlSystem::Optional<zdl::DlSystem::StringList>
|
|
getOutputTensorNames() const noexcept;
|
|
|
|
/**
|
|
* @brief Gets the name of output tensor from the input layer name
|
|
*
|
|
* @return Output tensor name.
|
|
*/
|
|
zdl::DlSystem::StringList
|
|
getOutputTensorNamesByLayerName(const char *name) const noexcept;
|
|
|
|
/**
|
|
* @brief Processes the input data and returns the output
|
|
*
|
|
* @param[in] A map of tensors that contains the input data for
|
|
* each input. The names of tensors needs to be
|
|
* matched with names retrieved through
|
|
* getInputTensorNames()
|
|
*
|
|
* @param[in,out] An empty map of tensors that will contain the output
|
|
* data of potentially multiple layers (the key
|
|
* in the map is the layer name) upon return
|
|
*
|
|
* @note output tensormap has to be empty. To forward propagate
|
|
* and get results in user-supplied tensors, use
|
|
* executeWithSuppliedOutputTensors.
|
|
*/
|
|
bool execute(const zdl::DlSystem::TensorMap &input,
|
|
zdl::DlSystem::TensorMap &output) noexcept;
|
|
|
|
/**
|
|
* @brief Processes the input data and returns the output
|
|
*
|
|
* @param[in] A single tensor contains the input data.
|
|
*
|
|
* @param[in,out] An empty map of tensors that will contain the output
|
|
* data of potentially multiple layers (the key
|
|
* in the map is the layer name) upon return
|
|
*
|
|
* @note output tensormap has to be empty.
|
|
*/
|
|
bool execute(const zdl::DlSystem::ITensor *input,
|
|
zdl::DlSystem::TensorMap &output) noexcept;
|
|
|
|
/**
|
|
* @brief Processes the input data and returns the output, using
|
|
* user-supplied buffers
|
|
*
|
|
* @param[in] A map of UserBuffers that contains the input data for
|
|
* each input. The names of UserBuffers needs to be
|
|
* matched with names retrieved through
|
|
* getInputTensorNames()
|
|
*
|
|
* @param[in,out] A map of UserBuffers that will hold the output
|
|
* data of potentially multiple layers (the key
|
|
* in the map is the UserBuffer name)
|
|
*
|
|
* @note input and output UserBuffer maps must be fully pre-populated. with
|
|
* dimensions matching what the network expects.
|
|
* For example, if there are 5 output UserBuffers they all have to be
|
|
* present in map.
|
|
*
|
|
* Caller must guarantee that for the duration of execute(), the buffer
|
|
* stored in UserBuffer would remain valid. For more detail on buffer
|
|
* ownership and lifetime requirements, please refer to zdl::DlSystem::UserBuffer
|
|
* documentation.
|
|
*/
|
|
bool execute(const zdl::DlSystem::UserBufferMap &input,
|
|
const zdl::DlSystem::UserBufferMap &output) noexcept;
|
|
|
|
|
|
/**
|
|
* @brief Regiter Client ION Buffers
|
|
* @param[in] A UserMemoryMap of virtual addresses
|
|
*
|
|
*/
|
|
bool registerIonBuffers(const zdl::DlSystem::UserMemoryMap& ionBufferMap) noexcept;
|
|
|
|
/**
|
|
* @brief Regiter Client ION Buffers
|
|
* @param[in] A StringList of ION Buffer names
|
|
*
|
|
*/
|
|
bool deregisterIonBuffers(const zdl::DlSystem::StringList& ionBufferNames) noexcept;
|
|
|
|
/**
|
|
* @brief Returns the version string embedded at model conversion
|
|
* time.
|
|
*
|
|
* @return Model version string, which is a free-form string
|
|
* supplied at the time of the conversion
|
|
*
|
|
*/
|
|
zdl::DlSystem::String getModelVersion() const noexcept;
|
|
|
|
/**
|
|
* @brief Returns the dimensions of the input data to the model in the
|
|
* form of TensorShape. The dimensions in TensorShape corresponds to
|
|
* what the tensor dimensions would need to be for an input tensor to
|
|
* the model.
|
|
*
|
|
* @param[in] layer input name.
|
|
*
|
|
* @note Note that this function only makes sense for networks
|
|
* that have a fixed input size. For networks in which the
|
|
* input size varies with each call of Execute(), this
|
|
* function should not be used.
|
|
*
|
|
* @note Because the returned type is an Optional instance, it must
|
|
* be verified as a boolean true value before being dereferenced.
|
|
*
|
|
* @return An Optional instance of TensorShape that maintains dimensions,
|
|
* matching the tensor dimensions for input to the model,
|
|
* where the last entry is the fastest varying dimension, etc.
|
|
*
|
|
* @see zdl::DlSystem::ITensor
|
|
* @see zdl::DlSystem::TensorShape
|
|
* @see zdl::DlSystem::Optional
|
|
*/
|
|
zdl::DlSystem::Optional<zdl::DlSystem::TensorShape>
|
|
getInputDimensions() const noexcept;
|
|
zdl::DlSystem::Optional<zdl::DlSystem::TensorShape>
|
|
getInputDimensions(const char *name) const noexcept;
|
|
|
|
/**
|
|
* @brief Gets the output layer(s) for the network.
|
|
*
|
|
* Note that the output layers returned by this function may be
|
|
* different than those specified when the network was created
|
|
* via the zdl::SNPE::SNPEBuilder. For example, if the
|
|
* network was created in debug mode with no explicit output
|
|
* layers specified, this will contain all layers.
|
|
*
|
|
* @note Note that because the returned value is an Optional StringList,
|
|
* the list must be verified as a boolean true value before being
|
|
* dereferenced.
|
|
*
|
|
* @return A List of output layer names.
|
|
*
|
|
* @see zdl::DlSystem::Optional
|
|
*/
|
|
zdl::DlSystem::Optional<zdl::DlSystem::StringList>
|
|
getOutputLayerNames() const noexcept;
|
|
|
|
/**
|
|
* @brief Returns attributes of buffers used to feed input tensors and receive result from output tensors.
|
|
*
|
|
* @param[in] Tensor name.
|
|
*
|
|
* @return BufferAttributes of input/output tensor named
|
|
*/
|
|
zdl::DlSystem::Optional<zdl::DlSystem::IBufferAttributes*> getInputOutputBufferAttributes(const char *name) const noexcept;
|
|
|
|
/**
|
|
* @brief .
|
|
*
|
|
* Get the diagnostic logging interface
|
|
*
|
|
* @note Note that because the returned type is an Optional instance,
|
|
* it must be verified as a boolean true value before being
|
|
* dereferenced.
|
|
*
|
|
* @see zdl::DlSystem::Optional
|
|
*/
|
|
zdl::DlSystem::Optional<zdl::DiagLog::IDiagLog*>
|
|
getDiagLogInterface() noexcept;
|
|
|
|
private:
|
|
SNPE(const SNPE&) = delete;
|
|
SNPE& operator=(const SNPE&) = delete;
|
|
|
|
std::unique_ptr<SnpeRuntime> m_Runtime;
|
|
};
|
|
|
|
/** @} */ /* end_addtogroup c_plus_plus_apis C++ */
|
|
}}
|
|
|
|
#endif
|
|
|