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.
175 lines
4.8 KiB
175 lines
4.8 KiB
5 years ago
|
// =============================================================================
|
||
|
//
|
||
|
// Copyright (c) 2019 Qualcomm Technologies, Inc.
|
||
|
// All Rights Reserved.
|
||
|
// Confidential and Proprietary - Qualcomm Technologies, Inc.
|
||
|
//
|
||
|
// =============================================================================
|
||
|
|
||
|
#ifndef PSNPE_HPP
|
||
|
#define PSNPE_HPP
|
||
|
|
||
|
#include <cstdlib>
|
||
|
#include <unordered_map>
|
||
|
#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;
|
||
|
OutputAsyncCallbackParam(size_t _index,bool _status)
|
||
|
: dataIndex(_index),executeStatus(_status){};
|
||
|
};
|
||
|
/**
|
||
|
* @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;
|
||
|
InputOutputAsyncCallbackParam(size_t _index, const ApplicationBufferMap& output_map,bool _status)
|
||
|
: dataIndex(_index)
|
||
|
, outputMap(output_map)
|
||
|
,executeStatus(_status){
|
||
|
|
||
|
};
|
||
|
};
|
||
|
using OutputAsyncCallbackFunc = std::function<void(OutputAsyncCallbackParam)>;
|
||
|
using InputOutputAsyncCallbackFunc = std::function<void(InputOutputAsyncCallbackParam)>;
|
||
|
/**
|
||
|
* @brief .
|
||
|
*
|
||
|
* A structure BulkSNPE configuration
|
||
|
*/
|
||
|
struct ZDL_EXPORT BuildConfig final
|
||
|
{
|
||
|
BuildMode buildMode = BuildMode::SERIAL;
|
||
|
zdl::DlContainer::IDlContainer* container;
|
||
|
zdl::DlSystem::StringList outputBufferNames;
|
||
|
RuntimeConfigList runtimeConfigList;
|
||
|
OutputAsyncCallbackFunc outputCallback;
|
||
|
InputOutputAsyncCallbackFunc inputOutputCallback;
|
||
|
InputOutputTransmissionMode inputOutputTransmissionMode = InputOutputTransmissionMode::sync;
|
||
|
};
|
||
|
/**
|
||
|
* @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 ApplicationBufferMap& inputMap, size_t dataIndex, bool isTF8buff) 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;
|
||
|
|
||
|
/**
|
||
|
* @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;
|
||
|
|
||
|
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
|