首页
商城
  • English
  • 简体中文
首页
商城
  • English
  • 简体中文
  • 产品系列

    • FPGA+ARM

      • GM-3568JHF

        • 一、简介

          • GM-3568JHF 简介
        • 二、快速开始

          • 00 前言
          • 01 环境搭建
          • 02 编译说明
          • 03 烧录指南
          • 04 调试工具
          • 05 软件更新
          • 06 查看信息
          • 07 测试命令
          • 08 应用编译
          • 09 源码获取
        • 三、外设与接口

          • 01 USB
          • 02 显示与触摸
          • 03 以太网
          • 04 WIFI
          • 05 蓝牙
          • 06 TF-Card
          • 07 音频
          • 08 串口
          • 09 CAN
          • 10 RTC
        • 四、应用开发

          • 01 UART读写案例
          • 02 按键检测案例
          • 03 LED灯闪烁案例
          • 04 MIPI屏幕检测案例
          • 05 读取 USB 设备信息案例
          • 06 FAN 检测案例
          • 07 FPGA FSPI 通信案例
          • 08 FPGA DMA 读写案例
          • 09 GPS调试案例
          • 10 以太网测试案例
          • 11 RS485读写案例
          • 12 FPGA IIC 读写案例
          • 13 PN532 NFC读卡案例
          • 14 TF卡读写案例
        • 五、QT开发

          • 01 ARM64交叉编译器环境搭建
          • 02 QT 程序加入开机自启服务
        • 六、RKNN_NPU开发

          • 01 RK3568 NPU 概述
          • 02 开发环境搭建
          • 运行官方 YOLOv5 示例
        • 七、FPGA开发

          • ARM与FPGA通讯
          • FPGA开发手册
        • 八、其他

          • 01 根目录文件系统的修改
          • 02 系统自启服务
        • 九、资料下载

          • 资料下载
    • ShimetaPi

      • M4-R1

        • 一、简介

          • M4-R1简介
        • 二、快速上手

          • 01 OpenHarmony概述
          • 02 镜像烧录
          • 03 应用开发快速上手
          • 04 设备开发快速上手
        • 三、应用开发

          • 01 ArkUI

            • 1 ArkTS语言简介
            • 2 UI 组件-Row 容器介绍
            • 3 UI 组件-Column 容器介绍
            • 4 UI 组件-Text 组件
            • 5 UI 组件-Toggle 组件
            • 6 UI 组件-Slider 组件
            • 7 UI 组件-Animation 组件&Transition 组件
          • 02 资料获取

            • 1 OpenHarmony 官方资料
          • 03 开发须知

            • 1 Full-SDK替换教程
            • 2 引入和使用三方库
            • 3 HDC调试
            • 4 命令行恢复出厂模式
            • 5 升级App为system权限
          • 04 构建第一个应用

            • 1 构建第一个ArkTs应用-HelloWorld
          • 05 案例

            • 01 串口调试助手应用案例
            • 02 手写板应用案例
            • 03 数字时钟应用案例
            • 04 WIFI 信息获取应用案例
        • 四、设备开发

          • 1 Ubuntu环境开发

            • 01 环境搭建
            • 02 下载源码
            • 03 编译源码
          • 2 使用DevEco Device Tool 工具

            • 01 工具简介
            • 02 开发环境的搭建
            • 03 导入SDK
            • 04 HUAWEI DevEco Tool 功能介绍
        • 五、内核外设与接口

          • 01 指南
          • 02 设备树介绍
          • 03 NAPI 入门
          • 04 ArkTS入门
          • 05 NAPI开发实战演示
          • 06 GPIO介绍
          • 07 I2C通讯
          • 08 SPI通信
          • 09 PWM 控制
          • 10 串口通讯
          • 11 TF卡
          • 12 屏幕
          • 13 触摸
          • 14 Ethernet(以太网)
          • 15 M.2 硬盘
          • 16 音频
          • 17 WIFI & BT
          • 18 摄像头
        • 六、资料下载

          • 资料下载
      • M5-R1

        • 一、简介

          • M5-R1 开发文档
        • 二、快速上手

          • 镜像烧录
          • 环境搭建
          • 下载源码
        • 三、外设与接口

          • 树莓派接口
          • GPIO 接口
          • I2C 接口
          • SPI通信
          • PWM控制
          • 串口通讯
          • TF Card
          • 屏幕
          • 触摸
          • 音频
          • RTC
          • Ethernet
          • M.2
          • MINI-PCIE
          • Camera
          • WIFI&BT
        • 四、资料下载

          • 资料下载
      • Pico-G1

        • 一、产品概述

          • 01 芯片与硬件平台介绍
          • 02 SDK版本说明
        • 二、快速入门

          • 01 开发环境搭建
          • 02 镜像编译
          • 03 镜像烧录
          • 04 系统登录
          • 05 网络配置
          • 06 文件传输
          • 07 SDK目录结构
          • 08 部署第一个应用程序
          • 09 部署第一个驱动程序
          • 10 SD卡挂载
        • 三、外设与接口

          • 01 GPIO控制
          • 02 UART串口通信
          • 03 I2C 通信
          • 04 SPI 通信
        • 四、MPP媒体开发

          • 01 MPP媒体处理软件
          • 02 图像处理链路
          • 03 视频输入
          • 04 图像编码
        • 五、NPU与AI

          • 01 NPU驱动与运行库架构
          • 02 .xmm 模型加载
          • 03 SVP视频处理
          • 04 AI降噪 (AI_NR)
        • 六、应用程序示例

          • 01 区域运动检测应用
          • 02 MTCNN 人脸检测应用
    • 开源鸿蒙

      • SC-3568HA

        • 一、简介

          • SC-3568HA简介
        • 二、快速上手

          • OpenHarmony概述
          • 镜像烧录
          • 开发环境准备
          • Hello World应用以及部署
        • 三、应用开发

          • ArkUI

            • 第一章 ArkTS语言简介
            • 第二章 UI组件介绍和实际应用(上)
            • 第三章 UI组件介绍和实际应用(中)
            • 第四章 UI组件介绍和实际应用(下)
          • 拓展

            • 第一章 入门指引
            • 第二章 三方库的引用和使用
            • 第三章 应用编译以及部署
            • 第四章 命令行恢复出厂设置
            • 第五章 系统调试--HDC调试
            • 第六章 APP 稳定性测试
            • 第七章 应用测试
        • 四、设备开发

          • 第一章 环境搭建
          • 第二章 下载源码
          • 第三章 编译源码
        • 五、内核的外设与接口

          • 树莓派接口
          • GPIO 接口
          • I2C 接口
          • SPI通信
          • PWM控制
          • 串口通讯
          • TF Card
          • 屏幕
          • 触摸
          • 音频
          • RTC
          • Ethernet
          • M.2
          • MINI-PCIE
          • Camera
          • WIFI&BT
          • 树莓派拓展板
        • 六、资料下载

          • 资料下载
      • M-K1HSE

        • 一、简介

          • M-K1HSE 简介
        • 二、快速开始

          • 开发环境搭建
          • 源码获取
          • 编译说明
          • 烧录指南
        • 三、应用开发

          • 00 应用开发环境搭建
          • 01 第一个应用-Hello World
        • 四、外设与接口

          • 01 Audio
          • 02 RS485
          • 03 Display
        • 五、系统定制开发

          • 系统移植
          • 系统定制
          • 驱动开发
          • 系统调试
          • OTA升级
        • 六、资料下载

          • 资料下载
    • EVS相机

      • CF-NRS1

        • 一、简介

          • 01-产品介绍
          • 02-相关概念
          • 03-MultiVision Studio 介绍
        • 二、开发

          • 01-ShiMetaPi Hybrid vision SDK 介绍
          • 02-Hybrid_vision_toolkit
          • 03-Hybrid_vision_toolkit API (C++)
          • 04 Hybrid Vision algo
          • 05 Hybrid vision algo API
          • 06 EVS Network Server
          • 07 EVS Time Sync
          • 08 Web Window
        • 三、资料下载

          • 资料下载
        • 四、常见问题

          • 常见问题解决指南
      • CF-CRA2

        • 一、简介

          • CF-NRS2 简介
        • 二、资料下载

          • 资料下载
      • EVS模块

        • 一、相关概念
        • 二、硬件准备与环境配置
        • 三、示例程序使用指南
        • 资料下载
    • AI硬件

      • 1684XB-32T

        • 一、简介

          • AIBOX-1684XB-32简介
        • 二、快速上手

          • 初次使用
          • 网络配置
          • 磁盘使用
          • 内存分配
          • 风扇策略
          • 固件升级
          • 交叉编译
          • 模型量化
        • 三、应用开发

          • 开发简介

            • Sophgo SDK开发
            • SOPHON-DEMO简介
          • 大语言模型

            • 部署Llama3示例
            • Sophon LLM_api_server开发
            • 部署MiniCPM-V-2_6
            • Qwen-2-5-VL图片视频识别DEMO
            • Qwen3-chat-DEMO
            • Qwen3-Qwen Agent-MCP开发
            • Qwen3-langchain-AI Agent
          • 深度学习

            • ResNet(图像分类)
            • LPRNet(车牌识别)
            • SAM(通用图像分割基础模型)
            • YOLOv5(目标检测)
            • OpenPose(人体关键点检测)
            • PP-OCR(光学字符识别)
        • 四、资料下载

          • 资料下载
      • 1684X-416T

        • 简介

          • AIBOX-1684X-416简介
        • Demo简单操作指引

          • shimeta智慧监控demo的简单使用说明
      • RDK-X5

        • 简介

          • RDK-X5 硬件简介
        • 快速开始

          • RDK-X5 快速开始
        • 应用开发

          • AI在线模型开发

            • 实验01-接入火山引擎豆包 AI
            • 实验02-图片分析
            • 实验03-多模态视觉分析定位
            • 实验04-多模态图文比较分析
            • 实验05-多模态文档表格分析
            • 实验06-摄像头运用-AI视觉分析
          • 大语言模型

            • 实验01-语音识别
            • 实验02-语音对话
            • 实验03-多模态图片分析-语音对话
            • 实验04-多模态图片比较-语音对话
            • 实验05-多模态文档分析-语音对话
            • 实验06-多模态视觉运用-语音对话
          • ROS2基础开发

            • 实验01-搭建环境
            • 实验02-工作包的创建及编译
            • 实验03-运行 ROS2 话题通信节点
            • 实验04-ROS2 相机应用
          • 40pin-IO开发

            • 实验01-GPIO 输出(LED闪烁)
            • 实验02-GPIO 输入
            • 实验03-按键控制 LED
            • 实验04-PWM 输出
            • 实验05-串口输出
            • 实验06-IIC 实验
            • 实验07-SPI 实验
          • USB模块开发使用

            • 实验01-USB 语音模块使用
            • 实验02-声源定位模块使用
          • 机器视觉技术实战

            • 实验01-打开 USB 摄像头
            • 实验02-颜色识别检测
            • 实验03-手势识别体验
            • 实验04-YOLOv5物体检测
      • RDK-S100

        • 简介

          • RDK-S100 硬件简介
        • 快速开始

          • RDK-S100 硬件简介
        • 应用开发

          • AI在线模型开发

            • 实验01-接入火山引擎豆包 AI
            • 实验02-图片分析
            • 实验03-多模态视觉分析定位
            • 实验04-多模态图文比较分析
            • 实验05-多模态文档表格分析
            • 实验06-摄像头运用-AI视觉分析
          • 大语言模型

            • 实验01-语音识别
            • 实验02-语音对话
            • 实验03-多模态图片分析-语音对话
            • 实验04-多模态图片比较-语音对话
            • 实验05-多模态文档分析-语音对话
            • 实验06-多模态视觉运用-语音对话
          • ROS2基础开发

            • 实验01-搭建环境
            • 实验02-工作包的创建及编译
            • 实验03-运行 ROS2 话题通信节点
            • 实验04-ROS2 相机应用
          • 40pin-IO开发

            • 实验01-GPIO 输出(LED闪烁)
            • 实验02-GPIO 输入
            • 实验03-按键控制 LED
            • 实验04-PWM 输出
            • 实验05-串口输出
            • 实验06-IIC 实验
            • 实验07-SPI 实验
          • USB模块开发使用

            • 实验01-USB 语音模块使用
            • 实验02-声源定位模块使用
          • 机器视觉技术实战

            • 实验01-打开 USB 摄像头
            • 实验02-图像处理基础
            • 实验03-目标检测
            • 实验04-图像分割
    • 核心板

      • C-3568BQ

        • 简介

          • C-3568BQ 简介
      • C-3588LQ

        • 简介

          • C-3588LQ 简介
      • GC-3568JBAF

        • 简介

          • GC-3568JBAF 简介
      • C-K1BA

        • 简介

          • C-K1BA 简介

01 NPU驱动与运行库架构

NPU(Neural Processing Unit,神经网络处理器)是一种专门用于人工智能计算的处理器,主要针对神经网络和深度学习算法进行了硬件级优化。与传统 CPU 和 GPU 相比,NPU 在执行矩阵运算、卷积运算等 AI 相关任务时具有更高的运算效率和更低的功耗,能够广泛应用于图像识别、语音识别、目标检测、智能安防以及大模型推理等场景。

GK7206平台的NPU软件栈采用分层设计,旨在为开发者提供高效、灵活的深度神经网络应用开发环境。该架构涵盖了从底层硬件驱动到上层运行时库的完整链路,支持目标识别、图像分类等多种AI应用的开发。

1 软件栈分层

NPU的软件栈自上而下主要包括以下几个层次:

  • 应用层与算法模型库 (ALG SDK):面向具体业务场景,提供目标检测、图像分类等现成的算法应用。典型示例位于 sample/npu/demo_ai/,包含人员检测、车辆检测、人脸识别等 21 种 AI 功能。
  • 运行层 (XMEDIA_CL):作为针对NPU设计的异构编程框架,为上层应用提供C语言API库,负责模型加载、资源管理及任务调度,屏蔽底层硬件差异。核心头文件为 xmedia_cl.h 和 xmedia_cl_common.h,动态库为 libxmedia_npu.so。
  • 用户态驱动 (NPU UMD):负责封装具体的驱动调用逻辑,与运行层配合完成命令下发与数据交互。
  • 内核态驱动 (NPU KMD):运行在Linux内核空间,负责NPU硬件的初始化、电源管理、中断处理、内存映射及任务队列的硬件级调度。内核模块为 xm_npu.ko,加载命令为 ./load xm7206v11a -i。
  • 硬件:NPU计算单元,负责执行具体的神经网络算子指令。

软件栈分层

2 核心架构特性

XMEDIA_CL框架在设计上具备以下关键特性,以保障NPU的高效利用:

  • 零拷贝与Ping-Pong Buffer:支持零拷贝模式以减少内存搬运开销,同时支持Ping-Pong Buffer机制,实现数据流转与计算的重叠,提升吞吐率。
  • 同步/异步模式:支持同步和异步两种调用模式。异步模式允许CPU与NPU并行工作,提高整体效率。
  • JIT与AOT支持:支持即时编译(JIT)和提前编译(AOT),兼顾灵活性与极致性能。
  • 异构设备扩展:支持CPU、NPU、DSP等异构设备的统一管理与调度。
  • 低内存占用:内部无缓冲Buffer设计,无额外内存占用,适合资源受限的嵌入式场景。

3 NPU硬件规格

3.1 支持的数据类型

NPU计算单元支持以下数据类型(定义于 xmedia_cl_common.h):

数据类型枚举值说明
INT8XMEDIA_CL_INT88位有符号整数,量化推理最常用的类型
UINT8XMEDIA_CL_UINT88位无符号整数
INT16XMEDIA_CL_INT1616位有符号整数
UINT16XMEDIA_CL_UINT1616位无符号整数
FP16XMEDIA_CL_FP16半精度浮点数,平衡精度与性能
INT32XMEDIA_CL_INT3232位有符号整数
FP32XMEDIA_CL_FP32单精度浮点数,用于高精度场景
INT4XMEDIA_CL_INT44位有符号整数,极致量化压缩
UINT10XMEDIA_CL_UINT1010位无符号整数,适用于RAW图像数据
UINT12XMEDIA_CL_UINT1212位无符号整数,适用于RAW图像数据

提示

实际部署中,大多数模型使用 INT8 量化,在精度损失极小的情况下获得最佳的推理性能。FP16 适用于对精度要求较高的场景。

3.2 支持的数据格式

格式枚举值说明
RGBXMEDIA_CL_FORMAT_RGB标准RGB三通道
RGrGbBXMEDIA_CL_FORMAT_RGrGbBBayer格式
BGbGrRXMEDIA_CL_FORMAT_BGbGrRBayer格式
GrRBGbXMEDIA_CL_FORMAT_GrRBGbBayer格式
GbBRGrXMEDIA_CL_FORMAT_GbBRGrBayer格式
YUVXMEDIA_CL_FORMAT_YUVYUV色彩空间
YVUXMEDIA_CL_FORMAT_YVUYVU色彩空间

3.3 NPU管理接口

NPU提供以下管理接口(定义于 xmedia_npu.h):

API功能说明
xmedia_npu_set_quick_start_flag(flag)设置快速启动标志,开启后可加速NPU初始化
xmedia_npu_get_quick_start_flag(&flag)获取当前快速启动标志
xmedia_npu_get_proc_info(&proc)获取NPU内存映射信息(物理地址和缓冲区长度)
xmedia_npu_get_usage_rate(&usage)获取NPU利用率(百分比),用于性能监控

以下示例展示如何查询NPU利用率:

#include "xmedia_npu.h"

xmedia_float usage = 0.0f;
xmedia_s32 ret = xmedia_npu_get_usage_rate(&usage);
if (ret == XMEDIA_SUCCESS) {
    printf("NPU usage rate: %.2f%%\n", usage);
}

4 核心数据类型

XMEDIA_CL框架定义了一组核心数据结构,用于描述模型的输入输出张量信息。

4.1 张量形状 (tensor_shape)

描述张量的维度信息:

typedef struct _xmedia_cl_tensor_shape {
    xmedia_cl_u32 ndims;                      // 维度数量(最大 XMEDIA_CL_MAX_DIMS_NUM=8)
    xmedia_cl_u32 dims[XMEDIA_CL_MAX_DIMS_NUM]; // 每个维度的大小
    xmedia_cl_u32 pch[XMEDIA_CL_MAX_DIMS_NUM]; // 每个维度的步长(pitch)
    xmedia_cl_data_type type;                  // 数据类型
} xmedia_cl_tensor_shape;

例如,一个 NHWC 格式的输入张量 [1, 640, 640, 3],其 ndims=4,dims={1,640,640,3}。

4.2 张量量化参数 (tensor_quant)

描述量化推理所需的缩放因子和零点:

typedef struct _xmedia_cl_tensor_quant {
    xmedia_cl_float scale;  // 缩放因子
    xmedia_cl_s32 zp;       // 零点(zero point)
} xmedia_cl_tensor_quant;

反量化公式为:real_value = (int8_value - zp) * scale

4.3 张量 (tensor)

完整的张量描述结构:

typedef struct _xmedia_cl_tensor {
    xmedia_cl_u32 tensor_id;       // 张量唯一标识
    void *addr;                    // 数据缓冲区地址
    xmedia_cl_tensor_shape shape;  // 张量形状
    xmedia_cl_tensor_quant quant;  // 量化参数
    xmedia_cl_u32 size;            // 数据总大小(字节)
    xmedia_cl_s8 *name;            // 张量名称
} xmedia_cl_tensor;

4.4 输入输出张量信息 (tensor_info_inout)

用于 xmedia_cl_graph_get_input/get_output 接口返回张量信息:

typedef struct _xmedia_cl_tensor_info_inout {
    xmedia_cl_u32 num;                        // 张量数量
    xmedia_cl_tensor *tensor;                  // 张量数组
    xmedia_cl_tensor_batch *tensor_batch;      // 批次信息(动态批处理时使用)
    xmedia_cl_u32 *current_batch;             // 当前批次大小
} xmedia_cl_tensor_info_inout;

4.5 模型内存信息 (mem_info)

描述模型运行所需的各类内存大小,通过 xmedia_cl_graph_query_model_info_from_file 获取:

typedef struct _xmedia_cl_mem_info {
    xmedia_cl_u32 worksize;           // 工作空间大小
    xmedia_cl_u32 weightsize;         // 模型权重大小
    xmedia_cl_u32 inputsize;          // 输入缓冲区大小
    xmedia_cl_u32 outputsize;         // 输出缓冲区大小
    xmedia_cl_u32 codesize;           // 模型代码段大小
    xmedia_cl_u32 memory_reuse_type;  // 内存复用模式(见 3.6 节)
    xmedia_cl_u32 private_data_size;  // 私有数据大小
} xmedia_cl_mem_info;

使用示例:

#include "xmedia_cl.h"

xmedia_cl_mem_info mem_info;
xmedia_cl_s32 ret = xmedia_cl_graph_query_model_info_from_file(
    "model.xmm", &mem_info, XMEDIA_CL_MEM_INFO);
if (ret == XMEDIA_CL_SUCCESS) {
    printf("workspace: %u bytes\n", mem_info.worksize);
    printf("weight:    %u bytes\n", mem_info.weightsize);
    printf("input:     %u bytes\n", mem_info.inputsize);
    printf("output:    %u bytes\n", mem_info.outputsize);
}

4.6 内存复用模式

NPU支持四种内存复用模式,可有效降低多模型场景下的内存占用:

模式枚举值复用内容
仅工作空间复用XMEDIA_CL_WORKSPACEworkspace
工作空间+输入复用XMEDIA_CL_WORKSPACE_INPUTworkspace + input
工作空间+输出复用XMEDIA_CL_WORKSPACE_OUTPUTworkspace + output
全部复用XMEDIA_CL_WORKSPACE_INPUT_OUTPUTworkspace + input + output

可通过 xmedia_cl_graph_get_memory_reuse_type() 查询模型支持的复用模式。详细用法参见 XMM模型加载。

5 设备与上下文管理

5.1 设备类型

XMEDIA_CL框架支持以下异构设备类型:

设备类型枚举值说明
CPUXMEDIA_CL_DEVICE_CPU使用CPU执行推理
NPUXMEDIA_CL_DEVICE_NPU使用NPU加速执行推理
ALLXMEDIA_CL_DEVICE_ALL查询所有可用设备

5.2 上下文生命周期

上下文(Context)是XMEDIA_CL框架中管理所有资源的核心对象。典型的生命周期如下:

#include "xmedia_cl.h"

// 1. 初始化CL框架
xmedia_cl_s32 ret = xmedia_cl_init();
if (ret != XMEDIA_CL_SUCCESS) {
    printf("CL init failed: %d\n", ret);
    return -1;
}

// 2. 获取NPU设备ID
xmedia_cl_device_id devices = NULL;
xmedia_cl_u32 num_devices = 0;
ret = xmedia_cl_get_device_ids(XMEDIA_CL_DEVICE_NPU, &devices, &num_devices);

// 3. 创建上下文
xmedia_cl_s32 err_code = 0;
xmedia_cl_context context = xmedia_cl_create_context(
    num_devices, &devices, &err_code);
if (context == NULL) {
    printf("Create context failed: %d\n", err_code);
    return -1;
}

// 4. 使用上下文进行模型加载和推理...
// (详见 ch03-xmm-model-loading.md)

// 5. 释放资源
xmedia_cl_release_context(context);
xmedia_cl_release_device_ids(&devices, &num_devices);
xmedia_cl_uninit();

注意

上下文销毁前,必须确保所有使用该上下文的模型图(Graph)已通过 xmedia_cl_graph_unload() 卸载完毕。

6 错误码参考

XMEDIA_CL框架定义了详细的错误码(定义于 xmedia_cl_common.h),便于开发过程中快速定位问题。

6.1 通用错误

错误码值说明
XMEDIA_CL_SUCCESS0操作成功
XMEDIA_CL_OUT_OF_HOST_MEMORY-6主机内存不足
XMEDIA_CL_INVALID_VALUE-30无效的参数值
XMEDIA_CL_INVALID_BUFFER_SIZE-61无效的缓冲区大小

6.2 设备与上下文错误

错误码值说明
XMEDIA_CL_INVALID_DEVICE_TYPE-31无效的设备类型
XMEDIA_CL_INVALID_PLATFORM-32无效的平台
XMEDIA_CL_INVALID_DEVICE-33无效的设备
XMEDIA_CL_INVALID_CONTEXT-34无效的上下文
XMEDIA_CL_INVALID_COMMAND_QUEUE-36无效的命令队列

6.3 模型加载错误

错误码值说明
XMEDIA_CL_INVALID_MODEL-64模型文件无效或格式不支持
XMEDIA_CL_READ_MODEL_FAIL-65读取模型文件失败
XMEDIA_CL_INVALID_BINARY-42无效的二进制数据
XMEDIA_CL_INVALID_PROGRAM-44无效的程序对象
XMEDIA_CL_ERROR_MODEL_TYPE-68模型类型错误
XMEDIA_CL_MODEL_DECOMPRESS_FAIL-71模型解压失败
XMEDIA_CL_NOT_FIND_FILE-75找不到模型文件

6.4 内存与地址错误

错误码值说明
XMEDIA_CL_INVALID_HOST_PTR-37无效的主机指针
XMEDIA_CL_INVALID_MEM_OBJECT-38无效的内存对象
XMEDIA_CL_INSUFFICIENT_SIZE-66内存大小不足
XMEDIA_CL_ERROR_ADDR_ALIGN-69地址未对齐(需8字节对齐)

6.5 运行时错误

错误码值说明
XMEDIA_CL_INVALID_KERNEL-48无效的内核函数
XMEDIA_CL_INVALID_KERNEL_ARGS-52无效的内核参数
XMEDIA_CL_INVALID_OPERATION-59无效的操作
XMEDIA_CL_INVALID_UNINIT-60CL框架未初始化
XMEDIA_CL_ALREADY_INIT-63CL框架已初始化(重复初始化)
XMEDIA_CL_OUT_OF_MAX_BATCH-74超出最大批次大小

6.6 事件错误

错误码值说明
XMEDIA_CL_WAIT_EVENT_FAILED-56等待事件失败
XMEDIA_CL_INVALID_EVENT_WAIT_LIST-57无效的事件等待列表
XMEDIA_CL_INVALID_EVENT-58无效的事件

7 核心概念与资源管理

XMEDIA_CL架构通过"上下文"统一管理各类设备资源,其核心概念如下:

  • 设备:硬件计算单元,如NPU、CPU、DSP等。任务队列将命令排队到具体的设备上执行。
  • 上下文:资源的管理者。负责管理各个设备、设备可访问的内存、每个设备对应的任务队列、程序和各个内核函数。
  • 模型图文件:由编译器编译AI模型生成的二进制文件(.xmm格式),支持异构指令。
  • 任务队列:用于将待执行的内核函数命令排队。
  • 事件:用于标识任务的执行状态,并可通过事件显式建立任务间的依赖约束。

8 任务调度流程

上下文负责统一的设备资源管理。在运行过程中,用户首先加载模型文件,XMEDIA_CL会根据Graph结构自动创建程序对象和内核函数。创建完成后,XMEDIA_CL将内核函数放入任务队列中,并生成对应的事件。

异步执行机制:架构中的kernel函数执行均采用异步模式。用户向任务队列提交命令后,CPU可执行其它工作而无需等待NPU命令完成;如有必要等待命令完成,则可以通过事件显式地建立这个约束,从而实现CPU与NPU的最大化并行。

8.1 事件状态

任务提交后的执行状态如下:

状态枚举值说明
QUEUEDXMEDIA_CL_QUEUED (0)已排队,等待执行
SUBMITTEDXMEDIA_CL_SUBMITTED (1)已提交到设备
RUNNINGXMEDIA_CL_RUNNING (2)正在执行
COMPLETEDXMEDIA_CL_COMPLETED (3)执行完成
FAILEDXMEDIA_CL_FAILED (4)执行失败

可通过 xmedia_cl_query_event_status() 查询当前状态,或通过 xmedia_cl_wait_for_events() 阻塞等待完成。

8.2 任务优先级

XMEDIA_CL支持4级任务优先级,可通过 xmedia_cl_graph_set_schedule_prio() 设置:

优先级宏定义值
最低XMEDIA_CL_JOB_SCHEDULE_PRIO_MIN0
中等XMEDIA_CL_JOB_SCHEDULE_PRIO_MEDIUM1
高XMEDIA_CL_JOB_SCHEDULE_PRIO_HIGH2
最高XMEDIA_CL_JOB_SCHEDULE_PRIO_MAX3
// 设置高优先级
xmedia_cl_graph_set_schedule_prio(graph, XMEDIA_CL_JOB_SCHEDULE_PRIO_HIGH);

在 GitHub 上编辑此页
上次更新:
贡献者: ljh
Next
02 .xmm 模型加载