openpilot v0.9.6 release
date: 2024-01-12T10:13:37 master commit: ba792d576a49a0899b88a753fa1c52956bedf9e6
This commit is contained in:
205
third_party/snpe/include/SNPE/PSNPE.hpp
vendored
Normal file
205
third_party/snpe/include/SNPE/PSNPE.hpp
vendored
Normal file
@@ -0,0 +1,205 @@
|
||||
// =============================================================================
|
||||
//
|
||||
// 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
|
||||
Reference in New Issue
Block a user