MC3302_SDK_V1.1.9_202507281.../media/mpp/include/fhhcp/npu.h
2025-11-11 12:08:31 +08:00

574 lines
24 KiB
C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef TY_NPU_H_
#define TY_NPU_H_
#include "base.h"
#ifdef __cplusplus
extern "C" {
#endif
#if (defined DP2000_300 || defined CPU_SIMU_300)
#define TY_NU_MAX_FREQ 792
#elif (defined DP2000_320 || defined CPU_SIMU_320)
#if (defined DP2000_310 || defined CPU_SIMU_310)
#define TY_NU_MAX_FREQ 743.1
#elif (defined DP2000_315 || defined CPU_SIMU_315)
#define TY_NU_MAX_FREQ 768
#else
#define TY_NU_MAX_FREQ 768
#endif
#endif
#define TY_VU_MAX_FREQ (TY_NU_MAX_FREQ/2)
#define TY_NPU_MODEL_VERSION_LEN 64
#define TY_NPU_MODEL_COMPILE_DATE_LEN 32
#define TY_NPU_NU_SUPPORT_DATA_FORMAT_LEN 256
#define TY_NPU_VU_SUPPORT_DATA_FORMAT_LEN 256
#define TY_NPU_PROFILE_MEM_THROUGHPUT_TYPE_NUM 8
#define TY_NPU_PROFILE_UNVALID -1
typedef struct TY_ModelIODesc{
uint32_t inputNum;
uint32_t outputNum;
T_TY_BlobDesc in[TY_NPU_MODLE_BLOB_MAX_INPUT_NUM];
T_TY_BlobDesc out[TY_NPU_MODLE_BLOB_MAX_OUTPUT_NUM];
}T_TY_ModelIODesc;
typedef struct TY_ModelCommonInfo{
char version[TY_NPU_MODEL_VERSION_LEN];
char compileDate[TY_NPU_MODEL_COMPILE_DATE_LEN];
}T_TY_ModelCommonInfo;
typedef struct TY_ModelDesc{
T_TY_ModelIODesc ioDesc;
T_TY_ModelCommonInfo info;
}T_TY_ModelDesc;
typedef struct TY_ModelCfgParam{
int32_t reserve;
}T_TY_ModelCfgParam;
typedef struct TY_TaskCfgParam{
int32_t batchNum;
int32_t reserve;
}T_TY_TaskCfgParam;
typedef struct TY_TaskInput{
T_TY_Mem dataIn;
T_TY_BlobDesc descIn;//当T_ModelDesc.in[i].type==E_BLOB_IMAGE_WITH_PRE_PROC时需要用户根据输入图像填写此参数
//用户根据输入图像赋值dataIn.addr和size
}T_TY_TaskInput;
typedef struct TY_TaskOutput{
T_TY_Mem dataOut;
}T_TY_TaskOutput;
typedef struct TY_OpWeightInfo{
int32_t reserved;
}T_TY_OpWeightInfo;
typedef struct TY_OpQuaInfo{
int32_t reserved;
}T_TY_OpWQuaInfo;
typedef struct TY_OpDesc{
char name[TY_NPU_OPTYPE_STRING_MAX_LEN];
int32_t id;
int32_t numInputs;
int32_t numOutputs;
T_TY_BlobDesc inputDesc[TY_NPU_MODLE_BLOB_MAX_INPUT_NUM];
T_TY_BlobDesc outputDesc[TY_NPU_MODLE_BLOB_MAX_OUTPUT_NUM];
T_TY_OpWeightInfo weightInfo; /* op 参数信息 */
T_TY_OpWQuaInfo quaInfo; /* op 量化信息 */
}T_TY_OpDesc;
typedef struct TY_Profile{
E_TY_EngineType type;
/* 根据type类型不同如下信息可能存在部分有效无效值设置为 TY_NPU_PROFILE_UNVALID (-1) */
float executeTime; /* 所有type均有效 单位ms */
float macUtilRate; /* E_AI_NPU有效 范围:[0,1] */
float ddrBandWidth; /* E_AI_NPU有效 MB/s */
uint64_t cycles; /* E_AI_NPU有效 时钟周期 */
uint64_t memThroughput[TY_NPU_PROFILE_MEM_THROUGHPUT_TYPE_NUM]; /* E_AI_NPU有效, 默认0为ddr吞吐其他待扩展 */
}T_TY_Profile;
typedef struct TY_OpProfileInfo{
char opName[TY_NPU_OPTYPE_STRING_MAX_LEN];
T_TY_Profile profile;
}T_TY_OpProfileInfo;
typedef struct TY_NpuHwCapacity{
uint32_t nuCurrFreq; /* Mhz */
uint32_t nuMaxFreq; /* Mhz */
uint32_t vuCurrFreq; /* Mhz */
uint32_t vuMaxFreq; /* Mhz */
float nuTops; /* nu 算力 */
float vuTops; /* vu 算力 */
char nuDataFmt[TY_NPU_NU_SUPPORT_DATA_FORMAT_LEN];
char vuDataFmt[TY_NPU_VU_SUPPORT_DATA_FORMAT_LEN];
}T_TY_NpuHwCapacity;
typedef struct TY_NpuDrvCapacity{
uint32_t taskQueDepth; /* 可配置的队列深度信息 */
}T_TY_NpuDrvCapacity;
typedef struct TY_NpuCapacityInfo{
T_TY_NpuHwCapacity hardware;
T_TY_NpuDrvCapacity driver;
}T_TY_NpuCapacityInfo;
typedef struct TY_NpuPayLoadInfo{
uint32_t waitTaskCnt; /* 等待执行的task数目 */
uint32_t resTaskCnt; /* 剩余可用的task数目 */
uint32_t allTaskCnt; /* 总计所有的task数目 */
float rate; /* 负载百分比 */
}T_TY_NpuPayLoadInfo;
/*
dump功能
1. 应用场景:针对芯片模型部署时算子精度比对 & debug信息
2. 使用限制:
a. 由于dump执行效率低不建议多模型、多TaskHandle同时调度执行否则会造成模型latency严重任务拥塞
b. dump和profile功能二选一打开dump会导致profile数据不准
*/
typedef struct TY_OpDumpInfo{
char name[TY_NPU_OPTYPE_STRING_MAX_LEN];
/* dump typeMask:
1 ==> enable; 0 ==> disable
bit | 31~4 | 3 | 2 | 1 | 0 |
type | reserved | QUA | WEIGHT | OUT | IN | 、、
*/
int32_t typeMask;
int32_t numInput; /* op输入数目, 可以不填 */
int32_t numOutput; /* op输出数目, 可以不填 */
/*
DUMP内存空间定义
1. 外部负责申请、释放;
2. 不需要物理地址连续
*/
T_TY_Mem weight;
T_TY_Mem quanti;
/*
inputs & outputs 数组填写顺序说明:
1. TY_NPU_GetOpListInfo()中获取的每个op的inputDesc & outputDesc数组
2. 按照inputDesc & outputDesc的顺序来填写inputs & outputs memInfo
*/
T_TY_Mem inputs[TY_NPU_MODLE_BLOB_MAX_INPUT_NUM];
T_TY_Mem outputs[TY_NPU_MODLE_BLOB_MAX_OUTPUT_NUM];
}T_TY_OpDumpInfo;
typedef struct TY_Mat{
uint32_t rows;
uint32_t cols;
E_TY_DataType dataType;
uint32_t rowStride; //以字节为单位当前仅支持rowStride=cols*sizeof(dataType)
T_TY_Mem mem;
uint32_t reserved[2];
}T_TY_Mat;
typedef struct TY_MatMulCfg{ //AxB=C, A维度m行k列B维度k行n列C维度m行n列
uint32_t maxM;//支持的最大m
uint32_t maxN;//支持的最大n
uint32_t maxK;//支持的最大k
uint32_t priority; //0:普通优先级1:相对NPU_Forward高优先级
uint32_t reserved[2];
}T_TY_MatMulCfg;
typedef void* TY_NPU_MODEL_HANDLE;
typedef void* TY_NPU_TASK_HANDLE;
typedef uint64_t TY_NPU_NN_HANDLE;
typedef void* TY_NPU_MATMUL_HANDLE;
/*!
* @brief NPU系统初始化
* @note 调用本接口初始化成功,其它接口才能正常工作
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_SysInit(void);
/*!
* @brief NPU系统去初始化
* @note 本接口与NPU_SysInit配对使用调用本接口后其它接口不能正常工作
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_SysExit(void);
/*!
* @brief 查询NPU接口版本信息
* @param [out] majorVersion major版本
* @param [out] minorVersion minor版本
* @param [out] patchVersion patch版本
* @note 版本信息格式 x.y.z
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_GetVersion(int32_t *majorVersion,
int32_t *minorVersion,
int32_t *patchVersion);
/*!
* @brief 获取NPU模型所需内存大小
* @param [in] model 从离线文件读取的NPU模型二进制文件数据起始指针由用户开辟内存
* @param [in] modelSize 离线模型文件大小
* @param [out] modelMem 创建网络模型所需内存信息结构体中allocInfo成员有效
* 用户根据此信息分配对应内存并赋值结构体中mem成员用于创建模型
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_GetModelMemSize(const void *model,
int32_t modelSize,
T_TY_MemSegmentInfo *modelMemInfo);
/*!
* @brief 解析并创建NPU模型实例
* @param [in] model 从离线文件读取的NPU模型二进制文件数据起始指针由用户开辟内存
* @param [in] modelSize 离线模型文件大小
* @param [in] configParam 解析模型的配置参数,当前版本无效
* @param [in] modelMem 为创建模型实例分配的内存信息见TY_NPU_GetModelMemSize
* @param [out] desc 解析离线模型得到的模型输入输出信息
* @param [out] modelHandle 创建的模型实例用户利用此实例创建推理task
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_CreateModel(const void *model,
int32_t modelSize,
const T_TY_ModelCfgParam *configParam,
const T_TY_MemSegmentInfo *modelMem,
T_TY_ModelDesc *desc,
TY_NPU_MODEL_HANDLE *modelHandle);
/*!
* @brief 直接从内存物理地址连续空间创建NPU模型实例避免NPU内部cpy & 多余备份
* @param [in] model 模型对应的内存存储MemSegMent空间需要保证
* 1. 内存空间物理地址连续;
* 2. 内存空间首地址对齐 32 Bytes
* @param [in] configParam 解析模型的配置参数,当前版本无效
* @param [in] modelMem 解析模型需要的额外内存空间预留扩展当前版本无需分配可设置为nullptr
* @param [out] desc 解析离线模型得到的模型输入输出信息
* @param [out] modelHandle 创建的模型实例用户利用此实例创建推理task
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_CreateModelFromPhyMem(const T_TY_MemSegmentInfo *model,
const T_TY_ModelCfgParam *configParam,
const T_TY_MemSegmentInfo *modelMem,
T_TY_ModelDesc *desc,
TY_NPU_MODEL_HANDLE *modelHandle);
/*!
* @brief 获取NPU子图运行所需的内存大小
* @param [in] modelHandle 已创建的有效模型实例
* @param [in] configParam 创建子图任务的配置参数
* @param [out] taskMem 子图网络运行所需内存信息结构体中allocInfo成员有效
* 用户根据此信息分配对应内存并赋值结构体中mem成员用于创建task
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_GetTaskMemSize(const TY_NPU_MODEL_HANDLE modelHandle,
const T_TY_TaskCfgParam *configParam,
T_TY_MemSegmentInfo *taskMem);
/*!
* @brief 创建NPU子图的一个运行实例
* @param [in] modelHandle 已创建的有效模型实例
* @param [in] configParam 创建子图任务的配置参数
* @param [in] taskMem 为创建子图实例分配的内存信息见TY_NPU_GetTaskMemSize
* @param [out] taskHandle 创建的模型运行实例用户利用此实例执行推理task
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_CreateTask(const TY_NPU_MODEL_HANDLE modelHandle,
const T_TY_TaskCfgParam *configParam,
const T_TY_MemSegmentInfo *taskMem,
TY_NPU_TASK_HANDLE *taskHandle);
/*!
* @brief NPU子图同步推理接口返回推理完成
* @param [in] taskHandle 已创建的有效运行实例
* @param [in] npuId 指定task运行的NPU仅多NPU平台适用
* @param [in] inputNum 输入数目
* @param [in] taskInput 运行实例的输入用户需按照TY_NPU_CreateModel接口获取的模型输入描述信息分配内存填充输入数据
* @param [in] outputNum 输出数目
* @param [in] taskOutput 运行实例的输出用户需按照TY_NPU_CreateModel接口获取的模型输出描述信息分配内存
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_Forward(const TY_NPU_TASK_HANDLE taskHandle,
E_TY_NpuID npuId,
uint32_t inputNum,
const T_TY_TaskInput taskInput[],
uint32_t outputNum,
const T_TY_TaskOutput taskOutput[]);
/*!
* @brief 支持设置优先级的NPU子图同步推理接口返回推理完成
* @param [in] taskHandle 已创建的有效运行实例
* @param [in] npuId 指定task运行的NPU仅多NPU平台适用
* @param [in] inputNum 输入数目
* @param [in] taskInput 运行实例的输入用户需按照TY_NPU_CreateModel接口获取的模型输入描述信息分配内存填充输入数据
* @param [in] outputNum 输出数目
* @param [in] taskOutput 运行实例的输出用户需按照TY_NPU_CreateModel接口获取的模型输出描述信息分配内存
* @param [in] priority 推理任务优先级指示0 :低优先级, 1高优先级
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_ForwardPriority(const TY_NPU_TASK_HANDLE taskHandle,
E_TY_NpuID npuId,
uint32_t inputNum,
const T_TY_TaskInput taskInput[],
uint32_t outputNum,
const T_TY_TaskOutput taskOutput[],
uint32_t priority);
/*!
* @brief NPU子图异步推理接口返回时推理任务下发成功用TY_NPU_Query接口查询是否推理完
* @param [in] taskHandle 已创建的有效运行实例
* @param [in] npuId 指定task运行的NPU仅多NPU平台适用
* @param [in] inputNum 输入数目
* @param [in] taskInput 运行实例的输入用户需按照TY_NPU_CreateModel接口获取的模型输入描述信息分配内存填充输入数据
* @param [in] outputNum 输出数目
* @param [in] taskOutput 运行实例的输出用户需按照TY_NPU_CreateModel接口获取的模型输出描述信息分配内存
* @param [out] nnHandle 本次推理对应的handle信息用于非阻塞执行时状态查询
*
* 返回值:
0成功其它值失败
* 说明使用相同taskHandle进行多个异步推理时各推理的taskInput、taskOutput应分别分配内存
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_ForwardAsync(const TY_NPU_TASK_HANDLE taskHandle,
E_TY_NpuID npuId,
uint32_t inputNum,
const T_TY_TaskInput taskInput[],
uint32_t outputNum,
const T_TY_TaskOutput taskOutput[],
TY_NPU_NN_HANDLE* nnHandle);
/*!
* @brief 支持设置优先级的NPU子图异步推理接口返回时推理任务下发成功用TY_NPU_Query接口查询是否推理完
* @param [in] taskHandle 已创建的有效运行实例
* @param [in] npuId 指定task运行的NPU仅多NPU平台适用
* @param [in] inputNum 输入数目
* @param [in] taskInput 运行实例的输入用户需按照TY_NPU_CreateModel接口获取的模型输入描述信息分配内存填充输入数据
* @param [in] outputNum 输出数目
* @param [in] taskOutput 运行实例的输出用户需按照TY_NPU_CreateModel接口获取的模型输出描述信息分配内存
* @param [out] nnHandle 本次推理对应的handle信息用于非阻塞执行时状态查询
* @param [in] priority 推理任务优先级指示0 :低优先级, 1高优先级
*
* 返回值:
0成功其它值失败
* 说明使用相同taskHandle进行多个异步推理时各推理的taskInput、taskOutput应分别分配内存
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_ForwardAsyncPriority(const TY_NPU_TASK_HANDLE taskHandle,
E_TY_NpuID npuId,
uint32_t inputNum,
const T_TY_TaskInput taskInput[],
uint32_t outputNum,
const T_TY_TaskOutput taskOutput[],
TY_NPU_NN_HANDLE* nnHandle,
uint32_t priority);
/*!
* @brief 查询NPU指定推理任务是否完成
* @param [in] npuId NPU编号
* @param [in] nnHandle 推理任务对应的handle来源于TY_NPU_ForwardAsync接口
* @param [in] status 是否完成1完成0未完成
* @param [out] isBlock 指示是否阻塞查询1阻塞0非阻塞
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_Query( E_TY_NpuID npuId,
TY_NPU_NN_HANDLE nnHandle, E_TY_Bool *status, int32_t isBlock);
/*!
* @brief 释放网络运行实例和相关资源
* @param [in] taskHandle 网络运行实例
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_ReleaseTask(const TY_NPU_TASK_HANDLE taskHandle);
/*!
* @brief 释放模型
* @param [in] modelHandle 子图模型实例
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_ReleaseModel(const TY_NPU_TASK_HANDLE modelHandle);
/*!
* @brief 查询加载分辨率小于等于(m,n,k)的矩阵乘法算子所需Memory大小、特性
* 对于矩阵乘法axb = ca维度m行k列b矩阵维度k行n列c矩阵维度m行n列
* @param [in] matMulCfg 矩阵乘法配置包括最大的m,n,k值
* @param [out] matMulMemInfo 加载MatMul算子需要的内存信息用户根据T_MemSegmentInfo结构中allocInfo成员申请对应内存
* 赋值T_MemSegmentInfo结构中mem成员通过TY_NPU_CreateMatMul创建MatMul算子库
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_GetMatMulMemSize(const T_TY_MatMulCfg *matMulCfg,
T_TY_MemSegmentInfo *matMulMemInfo);
/*!
* @brief 利用用户提供的内存信息加载MatMul算子库
* 对于矩阵乘法axb = ca维度m行k列b矩阵维度k行n列c矩阵维度m行n列
* @param [in] matMulCfg 矩阵乘法配置包括最大的m,n,k值与TY_NPU_GetMatMulMemSize入参一致
* @param [in] matMulMemInfo 加载MatMul算子需要的内存信息见TY_NPU_GetMatMulMemSize
* @param [out] handle 矩阵乘算子标识
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_CreateMatMul(const T_TY_MatMulCfg *matMulCfg,
const T_TY_MemSegmentInfo *matMulMemInfo, TY_NPU_MATMUL_HANDLE *handle);
/*!
* @brief 矩阵乘算子,输入输出矩阵均需物理地址连续空间
* 公式: c = a x Transpose(b), a,b,c均为矩阵;
* @param [in] handle 算子handle见TY_NPU_CreateMatMul
* @param [in] npuId 指定矩阵乘运行的NPU仅多NPU平台适用
* @param [in] srcA a矩阵, 行优先存储, 维度m行k列, 仅支持int8_t
* @param [in] srcB b矩阵的转置, 行优先存储, 维度n行k列, 仅支持int8_t
* @param [out] dstC c矩阵, 行优先存储, 维度m行n列, 仅支持int32_t
* @param [out] nnHandle 任务handleisBlock为1时可为nullptr
* @param [in] isBlock 是否阻塞1阻塞接口返回任务完成0非阻塞需TY_NPU_Query获取任务完成状态
*
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_MatMul(const TY_NPU_MATMUL_HANDLE handle, E_TY_NpuID npuId,
const T_TY_Mat* srcA, const T_TY_Mat* srcB, T_TY_Mat* dstC,
TY_NPU_NN_HANDLE *nnHandle, int32_t isBlock);
/*!
* @brief 释放矩阵乘法算子,须在TY_NPU_SysExit之前调用且TY_NPU_MatMul任务已完成
* @param [in] handle 矩阵乘法算子实例见TY_NPU_CreateMatMul
*
* 返回值:
0成功其它值失败
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_ReleaseMatMul(const TY_NPU_MATMUL_HANDLE handle);
/*!
* @brief 获取NPU模型fusion-op算子数目
* @param [in] modelHandle 模型handle通过TY_NPU_CreateModel()创建
* @param [out] opNum 模型对应的fusion-op算子数目包括npu、cpu算子)
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_GetOpNum(
const TY_NPU_MODEL_HANDLE modelHandle,
int32_t *opNum);
/*!
* @brief 获取NPU模型fusion-op算子信息
* @param [in] modelHandle 模型handle通过TY_NPU_CreateModel()创建
* @param [in] opNum fusion-op算子数目
* @param [out] opDescList 指向算子列表空间,由调用者提供内存空间,
* 数组,[opNum]
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_GetOpListInfo(
const TY_NPU_MODEL_HANDLE modelHandle,
int32_t opNum, /* 输入op数目如果小于子图内op的数目取前opNum个 */
T_TY_OpDesc opDescList[] /* 外部申请空间 */
);
/*!
* @brief 查询NPU能力信息
* @param [in] id, npu id信息当前版本不适用
* @param [out] capacity npu能力信息
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_QueryCapacity(
E_TY_NpuID id,
T_TY_NpuCapacityInfo *capacity);
/*!
* @brief 查询NPU负载信息
* @param [in] id, npu id信息当前版本不适用
* @param [out] capacity npu能力信息
* @note 建议用户利用该信息用户层面做流控设计比如rate超过一定门限后下发task阻塞。
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_QueryLoad(
E_TY_NpuID id,
T_TY_NpuPayLoadInfo *load);
/*!
* @brief 绑定模型的profile统计功能
* @param [in] modelHandle 任务handle通过TY_NPU_CreateModel()创建
* @note 调用该函数后modelHandle关联的所有taskHandle均产生profile信息
* 1. 绑定后Create的TaskHandle均有效未完成绑定不产生profile
* 2. 绑定动作执行1次即可同一模型可以重复绑定
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_SetProfileOn(const TY_NPU_MODEL_HANDLE modelHandle);
/*!
* @brief 去模型的profile统计功能绑定
* @param [in] modelHandle 任务handle通过TY_NPU_CreateModel()创建
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_SetProfileOff(const TY_NPU_MODEL_HANDLE modelHandle);
/*!
* @brief 获取taskHandle对应的profile信息用户确保task执行完毕后调用
* @param [in] taskHandle 模型handle通过TY_NPU_CreateTask()创建
* @param [in] opProfileNum 模型内包括的fusion-op数目通过TY_NPU_GetOpNum()获取
* @param [out] outputProfileNum 有效profile输出的fusion-op数目
* @param [out] opProfiles op profile信息数组[opProfileNum]
空间大小: opProfileNum*sizeof(TY_OpProfileInfo), 调用者提供内存空间
* @note task profile只记录最近一次的TY_NPU_Forward()执行输出不支持同一taskHandle不同TY_NPU_Forward()调用后的反复获取!!!
* 用户需要保证: TY_NPU_Forward()与TY_NPU_GetProfileInfo()对应关系!!!
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_GetProfileInfo(
const TY_NPU_TASK_HANDLE taskHandle,
int32_t opProfileNum,
int32_t *outputProfileNum,
T_TY_OpProfileInfo opProfiles[]);
/*!
* @brief 设置task的dump信息
* @param [in] taskHandle 任务handle通过TY_NPU_CreateTask()创建
* @param [in] opNum op数目, 范围(0, opNum]maxOpNum由TY_NPU_GetOpNum()获取
* @param [out] opDumps dump信息数组[opNum]
* 空间大小: opNum*sizeof(TY_OpDumpInfo), 调用者提供内存空间
* @note (1) T_OpDumpInfo可以只设置一次反复做dump动作
* (2) taskHandle执行前T_OpDumpInfo可动态修改以最近一次修改为准
* (3) taskHandle执行完毕后默认dump信息全部已导出用户可直接使用
* (4) 当前版本只支持同步推理接口;
* 问题场景:
* 存在dump所需空间太大用户内存不足的情况
* 解决用户拆成多次dump动作多次跑同一个模型
* 返回值:
0成功其它值错误码
*/
TY_NPU_FUNC_VISIBILITY int32_t TY_NPU_SetDumpOp(
const TY_NPU_TASK_HANDLE taskHandle,
int32_t opNum,
T_TY_OpDumpInfo *opDumps);
#ifdef __cplusplus
}
#endif
#endif