Program Listing for File QnnCpuOpPackage.h¶
↰ Return to documentation for file (include/QNN/CPU/QnnCpuOpPackage.h)
//==============================================================================
//
// Copyright (c) 2020-2023 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
//
//==============================================================================
/** @file
* @brief CPU Operation Package component API
*
* Provides interface to interact with OpPackage libraries registered
* with the CPU backend.
*/
#ifndef QNN_CPU_OP_PACKAGE_H
#define QNN_CPU_OP_PACKAGE_H
#include "CPU/QnnCpuCommon.h"
#include "QnnGraph.h"
#include "QnnOpPackage.h"
#include "QnnTypes.h"
#ifdef __cplusplus
extern "C" {
#endif
#define QNN_CPUOPPACKAGE_TENSOR_DATA_FORMAT_FLAT_BUFFER 0
/**
* @brief A value representing a tensor data format.
*/
typedef uint32_t QnnCpuOpPackage_TensorDataFormat_t;
/**
* @brief A value representing a profile data in ms.
*/
typedef double QnnCpuOpPackage_ProfileData_t;
/**
* @brief An enum to specify a param type.
*/
typedef enum {
QNN_CPU_PARAMTYPE_SCALAR = 0,
QNN_CPU_PARAMTYPE_TENSOR = 1,
QNN_CPU_PARAMTYPE_STRING = 2,
// Unused, present to ensure 32 bits.
QNN_CPU_PARAMTYPE_UNDEFINED = 0xFFFFFFFF
} QnnCpuOpPackage_ParamType_t;
/**
* @brief An enum to specify tensor data type.
*/
typedef enum {
QNN_CPU_DATATYPE_BOOL_8 = 0x0508,
QNN_CPU_DATATYPE_INT_8 = 0x0008,
QNN_CPU_DATATYPE_INT_32 = 0x0032,
QNN_CPU_DATATYPE_UINT_8 = 0x0108,
QNN_CPU_DATATYPE_UINT_32 = 0x0132,
QNN_CPU_DATATYPE_FLOAT_32 = 0x0232,
// Unused, present to ensure 32 bits.
QNN_CPU_DATATYPE_UNDEFINED = 0x7FFFFFFF
} QnnCpuOpPackage_DataType_t;
/**
* @brief An enum to specify logging level.
*/
typedef enum {
QNN_CPU_MSG_ERROR = 1,
QNN_CPU_MSG_DEBUG = 2,
QNN_CPU_MSG_LOW = 3,
QNN_CPU_MSG_MED = 4,
QNN_CPU_MSG_HIGH = 5,
// Unused, present to ensure 32 bits
QNN_CPU_MSG_UNDEFINED = 0x7FFFFFFF
} QnnCpuOpPackage_MsgType_t;
/**
* @brief An enum to specify the profiling type.
*/
typedef enum {
QNN_CPU_PROFILE_BASIC = 1,
QNN_CPU_PROFILE_DETAILED = 2,
// Unused, present to ensure 32 bits
QNN_CPU_PROFILE_UNDEFINED = 0x7FFFFFFF
} QnnCpuOpPackage_ProfileType_t;
/**
* @brief A struct which defines the Global infrastructure.
*/
typedef struct _QnnOpPackage_GlobalInfrastructure_t {
// Message
void (*reportMessage)(QnnCpuOpPackage_MsgType_t msgType, const char* msg, ...);
// Profile
void (*profile)(QnnCpuOpPackage_ProfileType_t profileType,
QnnCpuOpPackage_ProfileData_t timeInMsec);
} QnnCpuOpPackage_GlobalInfra_t;
// clang-format off
/// QnnCpuOpPackage_GlobalInfra_t initializer macro
#define QNN_CPU_OP_PACKAGE_GLOBAL_INFRA_INIT \
{ \
NULL, /*reportMessage*/ \
NULL /*profile*/ \
}
// clang-format on
typedef Qnn_ErrorHandle_t (*QnnCpuOpPackage_OpImplFn_t)(void* opPkgNodeData);
/**
* @brief A struct which defines the OpImpl definition.
*/
typedef struct _QnnOpPackage_OpImpl_t {
QnnCpuOpPackage_OpImplFn_t opImplFn;
void* userData;
} QnnCpuOpPackage_OpImpl_t;
// clang-format off
/// QnnCpuOpPackage_OpImpl_t initializer macro
#define QNN_CPU_OP_PACKAGE_OPIMPL_INIT \
{ \
NULL, /*kernelFn*/ \
NULL /*userData*/ \
}
// clang-format on
/**
* @brief A struct which describes the properties of a tensor.
*
*/
typedef struct {
QnnCpuOpPackage_TensorDataFormat_t dataFormat;
QnnCpuOpPackage_DataType_t dataType;
uint32_t rank;
uint32_t* maxDimensions;
uint32_t* currentDimensions;
void* data;
Qnn_QuantizeParams_t quantizeParams;
} QnnCpuOpPackage_Tensor_t;
// clang-format off
/// QnnCpuOpPackage_Tensor_t initializer macro
#define QNN_CPU_OP_PACKAGE_TENSOR_INIT \
{ \
QNN_TENSOR_DATA_FORMAT_FLAT_BUFFER, /*dataFormat*/ \
QNN_CPU_DATATYPE_UNDEFINED, /*dataType*/ \
0, /*rank*/ \
NULL, /*maxDimensions*/ \
NULL, /*currentDimensions*/ \
NULL, /*data*/ \
QNN_QUANTIZE_PARAMS_INIT /*quantizeParams*/ \
}
// clang-format on
/**
* @brief A struct which describes the parameters of a node.
*
*/
typedef struct {
QnnCpuOpPackage_ParamType_t type;
const char* name;
union {
double scalarParam;
const char* string;
QnnCpuOpPackage_Tensor_t* tensorParam;
};
} QnnCpuOpPackage_Param_t;
// clang-format off
/// QnnCpuOpPackage_Param_t initializer macro
#define QNN_CPU_OP_PACKAGE_PARAM_INIT \
{ \
QNN_CPU_PARAMTYPE_UNDEFINED, /*type*/ \
NULL, /*name*/ \
{ \
0 /*scalarParam*/ \
} \
}
// clang-format on
/**
* @brief A struct which describes the node.
*
*/
typedef struct _QnnOpPackage_Node_t {
const char* name;
const char* packageName;
const char* typeName;
uint32_t numOfParams;
QnnCpuOpPackage_Param_t** params;
uint32_t numOfInputs;
QnnCpuOpPackage_Tensor_t** inputs;
uint32_t numOfOutputs;
QnnCpuOpPackage_Tensor_t** outputs;
} QnnCpuOpPackage_Node_t;
// clang-format off
/// QnnCpuOpPackage_Node_t initializer macro
#define QNN_CPU_OP_PACKAGE_NODE_INIT \
{ \
NULL, /*name*/ \
NULL, /*packageName*/ \
NULL, /*typeName*/ \
0, /*numOfParams*/ \
NULL, /*params*/ \
0, /*numOfInputs*/ \
NULL, /*inputs*/ \
0, /*numOfOutputs*/ \
NULL /*outputs*/ \
}
// clang-format on
/**
* @brief Graph infrastructure.
*
*/
typedef _QnnOpPackage_GraphInfrastructure_t QnnCpuOpPackage_GraphInfrastructure_t;
#ifdef __cplusplus
} // extern "C"
#endif
#endif // QNN_CPU_OP_PACKAGE_H