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.
205 lines
7.2 KiB
205 lines
7.2 KiB
// =============================================================================
|
|
//
|
|
// Copyright (c) 2019-2021 Qualcomm Technologies, Inc.
|
|
// All Rights Reserved.
|
|
// Confidential and Proprietary - Qualcomm Technologies, Inc.
|
|
//
|
|
// =============================================================================
|
|
|
|
#ifndef PSNPE_HPP
|
|
#define PSNPE_HPP
|
|
|
|
#include <cstdlib>
|
|
#include <functional>
|
|
#include "SNPE/SNPE.hpp"
|
|
#include "DlSystem/UserBufferMap.hpp"
|
|
#include "DlContainer/IDlContainer.hpp"
|
|
#include "DlSystem/DlEnums.hpp"
|
|
#include "DlSystem/ZdlExportDefine.hpp"
|
|
|
|
#include "UserBufferList.hpp"
|
|
#include "RuntimeConfigList.hpp"
|
|
#include "ApplicationBufferMap.hpp"
|
|
|
|
namespace zdl
|
|
{
|
|
namespace PSNPE
|
|
{
|
|
|
|
/** @addtogroup c_plus_plus_apis C++
|
|
@{ */
|
|
|
|
/**
|
|
*@ brief build snpe instance in serial or parallel
|
|
*
|
|
*/
|
|
enum ZDL_EXPORT BuildMode {
|
|
SERIAL = 0,
|
|
PARALLEL = 1
|
|
};
|
|
/**
|
|
* @brief Input and output transmission mode
|
|
*/
|
|
enum ZDL_EXPORT InputOutputTransmissionMode
|
|
{
|
|
sync = 0,
|
|
outputAsync = 1,
|
|
inputOutputAsync = 2
|
|
};
|
|
|
|
/**
|
|
* @brief A structure representing parameters of callback function of Async Output mode
|
|
*/
|
|
struct ZDL_EXPORT OutputAsyncCallbackParam
|
|
{
|
|
size_t dataIndex;
|
|
bool executeStatus;
|
|
std::string errorMsg;
|
|
OutputAsyncCallbackParam(size_t _index,bool _status, const std::string& _errorMsg = std::string())
|
|
: dataIndex(_index),executeStatus(_status), errorMsg(_errorMsg){};
|
|
};
|
|
/**
|
|
* @brief A structure representing parameters of callback function of Async Input/Output mode
|
|
*/
|
|
struct ZDL_EXPORT InputOutputAsyncCallbackParam
|
|
{
|
|
size_t dataIndex;
|
|
const ApplicationBufferMap& outputMap;
|
|
bool executeStatus;
|
|
std::string errorMsg;
|
|
InputOutputAsyncCallbackParam(size_t _index, const ApplicationBufferMap& output_map,bool _status,
|
|
const std::string _ErrorMsg = std::string())
|
|
: dataIndex(_index)
|
|
, outputMap(output_map)
|
|
, executeStatus(_status)
|
|
, errorMsg(_ErrorMsg){};
|
|
};
|
|
/**
|
|
* @brief This callback is called when the output data is ready, only use for Output Async mode
|
|
*/
|
|
using OutputAsyncCallbackFunc = std::function<void(OutputAsyncCallbackParam)>;
|
|
/**
|
|
* @brief This callback is called when the output data is ready, only use for Output-Input Async mode
|
|
*/
|
|
using InputOutputAsyncCallbackFunc = std::function<void(InputOutputAsyncCallbackParam)>;
|
|
/**
|
|
* @brief This callback is called when the input data is ready,only use for Output-Input Async mode
|
|
*/
|
|
using InputOutputAsyncInputCallback = std::function<std::shared_ptr<ApplicationBufferMap>(const std::vector<std::string> &,
|
|
const zdl::DlSystem::StringList &)>;
|
|
/**
|
|
* @brief .
|
|
*
|
|
* A structure PSNPE configuration
|
|
*
|
|
*/
|
|
struct ZDL_EXPORT BuildConfig final
|
|
{
|
|
BuildMode buildMode = BuildMode::SERIAL; ///< Specify build in serial mode or parallel mode
|
|
zdl::DlContainer::IDlContainer* container;///< The opened container ptr
|
|
zdl::DlSystem::StringList outputBufferNames;///< Specify the output layer name
|
|
zdl::DlSystem::StringList outputTensors;///< Specify the output layer name
|
|
RuntimeConfigList runtimeConfigList;///< The runtime config list for PSNPE, @see RuntimeConfig
|
|
size_t inputThreadNumbers = 1;///< Specify the number of threads used in the execution phase to process input data, only used in inputOutputAsync mode
|
|
size_t outputThreadNumbers = 1;///< Specify the number of threads used in the execution phase to process output data, only used in inputOutputAsync and outputAsync mode
|
|
OutputAsyncCallbackFunc outputCallback;///< The callback to deal with output data ,only used in outputAsync mode
|
|
InputOutputAsyncCallbackFunc inputOutputCallback;///< The callback to deal with output data ,only used in inputOutputAsync mode
|
|
InputOutputAsyncInputCallback inputOutputInputCallback;///< The callback to deal with input data ,only used in inputOutputAsync mode
|
|
InputOutputTransmissionMode inputOutputTransmissionMode = InputOutputTransmissionMode::sync;///< Specify execution mode
|
|
zdl::DlSystem::ProfilingLevel_t profilingLevel = zdl::DlSystem::ProfilingLevel_t::OFF;///< Specify profiling level for Diaglog
|
|
uint64_t encode[2] = {0, 0};
|
|
bool enableInitCache = false;
|
|
std::string platformOptions;
|
|
std::string diaglogOutputDir = "./diaglogs/"; ///< Specify a diaglog output directory to save the generated Diaglog files.
|
|
};
|
|
/**
|
|
* @brief .
|
|
*
|
|
* The class for executing SNPE instances in parallel.
|
|
*/
|
|
class ZDL_EXPORT PSNPE final
|
|
{
|
|
public:
|
|
~PSNPE();
|
|
|
|
explicit PSNPE() noexcept :m_TransmissionMode(InputOutputTransmissionMode::sync){};
|
|
|
|
/**
|
|
* @brief Build snpe instances.
|
|
*
|
|
*/
|
|
bool build(BuildConfig& buildConfig) noexcept;
|
|
|
|
/**
|
|
* @brief Execute snpe instances in Async Output mode and Sync mode
|
|
*
|
|
* @param[in] inputBufferList A list of user buffers that contains the input data
|
|
*
|
|
* @param[in,out] outputBufferList A list of user buffers that will hold the output data
|
|
*
|
|
*/
|
|
bool execute(UserBufferList& inputBufferList, UserBufferList& outputBufferList) noexcept;
|
|
|
|
/**
|
|
* @brief Execute snpe instances in Async Input/Output mode
|
|
*
|
|
* @param[in]inputMap A map of input buffers that contains input data. The names of buffers
|
|
* need to be matched with names retrived through getInputTensorNames()
|
|
*
|
|
* @param dataIndex Index of the input data
|
|
*
|
|
* @param isTF8buff Whether prefer to using 8 bit quantized element for inference
|
|
*
|
|
* @return True if executed successfully; flase, otherwise.
|
|
*/
|
|
bool executeInputOutputAsync(const std::vector<std::string>& inputMap, size_t dataIndex, bool isTF8buff) noexcept;
|
|
bool executeInputOutputAsync(const std::vector<std::string>& inputMap, size_t dataIndex, bool isTF8buff,bool isTF8Outputbuff) noexcept;
|
|
/**
|
|
* @brief Returns the input layer names of the network.
|
|
*
|
|
* @return StringList which contains the input layer names
|
|
*/
|
|
const zdl::DlSystem::StringList getInputTensorNames() const noexcept;
|
|
|
|
/**
|
|
* @brief Returns the output layer names of the network.
|
|
*
|
|
* @return StringList which contains the output layer names
|
|
*/
|
|
const zdl::DlSystem::StringList getOutputTensorNames() const noexcept;
|
|
|
|
/**
|
|
* @brief Returns the input tensor dimensions of the network.
|
|
*
|
|
* @return TensorShape which contains the dimensions.
|
|
*/
|
|
const zdl::DlSystem::TensorShape getInputDimensions() const noexcept;
|
|
|
|
const zdl::DlSystem::TensorShape getInputDimensions(const char *name) const noexcept;
|
|
|
|
/**
|
|
* @brief Returns attributes of buffers.
|
|
*
|
|
* @see zdl::SNPE
|
|
*
|
|
* @return BufferAttributes of input/output tensor named.
|
|
*/
|
|
const zdl::DlSystem::TensorShape getBufferAttributesDims(const char *name) const noexcept;
|
|
|
|
zdl::DlSystem::Optional<zdl::DlSystem::IBufferAttributes*> getInputOutputBufferAttributes(const char *name) const noexcept;
|
|
bool registerIonBuffers(const zdl::DlSystem::UserMemoryMap& ionBufferMap) const noexcept;
|
|
bool deregisterIonBuffers(const zdl::DlSystem::StringList& ionBufferNames) const noexcept;
|
|
|
|
const char* getLastErrorString();
|
|
|
|
private:
|
|
PSNPE(const PSNPE&) = delete;
|
|
PSNPE& operator=(const PSNPE&) = delete;
|
|
zdl::PSNPE::InputOutputTransmissionMode m_TransmissionMode;
|
|
|
|
};
|
|
|
|
/** @} */ /* end_addtogroup c_plus_plus_apis C++ */
|
|
} // namespace PSNPE
|
|
} // namespace zdl
|
|
#endif // PSNPE_HPP
|
|
|