API 参考手册
MT GPU 管理库 (MTML)
主页
基本概念
支持的平台
| CPU 架构 | 操作系统 |
|---|---|
| x86_64 | Ubuntu 20.04, UOS 20, Kylin V10, 以及 Windows 10 Pro 21H |
| AArch64 | Kylin V10 SP |
不透明数据类型
MTML 库使用几种核心不透明数据类型。每种数据类型代表用户可以与之交互的特定功能实体。下面定义的大多数函数都接受一个或多个不透明对象作为其输入参数。因此,用户需要很好地理解它们。
- MtmlLibrary 代表 MTML 库本身,作为访问和创建其他不透明对象的入口点。
- MtmlSystem 代表库运行的系统环境。
- MtmlDevice 代表安装在系统中的 Moore Threads 设备(包括虚拟设备)。
- MtmlGpu 代表 Moore Threads 设备的图形单元,负责 3D 和计算工作负载。
- MtmlMemory 代表位于 Moore Threads 设备上的内存单元。
- MtmlVpu 代表 Moore Threads 设备的视频编解码单元,处理视频编码解码任务。
上述不透明数据类型之间的关系是层次性的,意味着某些类型“包含”其他类型。上述不透明数据类型的层次结构可以总结如下。
库
|--- 系统
|--- 设备
|--- GPU
|--- 内存
|--- VPU
初始化和释放
在使用不透明对象作为参数调用其他函数之前,正确初始化它非常重要。不透明数据类型之间的层次关系决定了它们的初始化顺序。例如,要初始化一个 MtmlGpu 结构,用户应首先初始化一个 MtmlLibrary 结构,然后从 MtmlLibrary 初始化 MtmlDevice 结构,最后从 MtmlDevice 初始化 MtmlGpu 结构。
不透明对象的初始化是通过调用一个 mtmlInit() 函数来完成的。如果不透明对象1和对象2指向相同的资源,那么表达式 (object1 == object2) 将始终评估为 true。
虚拟化
在使用 MTML 库提供的设备虚拟化管理功能之前,建议建立一些基本概念。关于虚拟化特性有两个主要功能:虚拟化类型管理和虚拟设备管理。更具体地说,需要介绍几个概念:
- 可虚拟化 - 这是一个用来描述物理设备是否支持虚拟化的概念。因此,可虚拟化的设备被定义为可以从中创建虚拟资源的物理设备。
- 虚拟化类型 - 虚拟化类型是一个规范模板,它限制了虚拟资源(例如,设备内存)的分配。通常,一个可虚拟化的设备支持几种虚拟化类型,因此可以创建具有相应规格的虚拟设备(见下文)。
- 虚拟设备 - 虚拟设备是根据指定的虚拟化类型从可虚拟化设备创建的。关键是要记住,虚拟设备是一个仅宿主概念。这意味着只有在 MTML 库在启用了虚拟化的宿主环境中运行时,用户才能初始化代表虚拟设备的 MtmlDevice 不透明对象。
编解码会话
编解码会话是视频 流的独立编码/解码过程。Moore Threads 设备的视频编解码单元可以支持的并行编解码会话数量称为编解码容量。decodeCapacity 和 encodeCapacity 分别代表并行解码会话和编码会话的最大限制。
每个编解码会话都可以通过一个唯一的整数值来识别,称为会话 ID。对于解码会话,会话 ID 的范围是 0 ∼(decodeCapacity-1),而对于编码会话,范围是 0 ∼(encodeCapacity-1)。
编解码会话的另一个重要方面是其状态。编解码会话状态的定义如下:
- 非活动(空闲):没有分配给此会话的视频工作负载。
- 活动:分配给此会话一个视频编码/解码工作负载。在任何给定的时间点,可以查询编解码会话的状态。如果编解码会话处于活动状态,则可以查询其度量信息。
有关可工作的示例代码,请参考 sample/basic/basic_sample.cpp 中的 videoMonApp() 示例。
多主核心 (MPC)
MPC,即多主核心,是 Moore Threads 专有的 GPU 硬件虚拟化技术,支持将单个强大的 GPU 设备分割成多个功能较弱的 GPU 设备,具有物理资源隔离能力。简单来说,当在设备上启用 MPC 时,即使只安装了一个物理设备,系统中也会存在多个称为MPC 实例的设备。每个 MPC 实例拥有物理

