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
 | |
| 
 |