ZHCAF23A February 2025 – March 2025 AM62A3 , AM62A3-Q1 , AM62A7 , AM62A7-Q1 , AM67A , TDA4AEN-Q1
本部分将分析一个同时对 RGB 流与红外流进行可视化的应用程序。
该应用由 GStreamer 与 TIOVX 共同组成,以便对两者进行对比。图 5-5 显示的是 GStreamer 中的应用程序,图 5-6 显示了利用 TIOVX 构建的等效应用程序。对于 GST 命令与 TIOVX 代码,可通过 GitHub [6] 获取。
帧数据通过 v4l2,从与 RGB 和 IR 流对应的 /dev/videoX 条目到达,并且通过片上 ISP 进行处理。两个数据流都会缩放到适合显示器的分辨率,IR 数据流(灰度)会转换为与 RGB 数据流相同的色彩格式。然后,在通过 Linux KMS 或 DRM 接口显示到监视器以前,将该等数据流合并至支持马赛克功能的单个帧。
TIOVX 与 GStreamer 应用在处理功能方面是等效的,但也存在一些主要差异。TIOVX 应用程序会构建一个处理应用程序内部主体的 TIOVX 图形,在本例中,为 ISP、比例缩小、色彩转换以及图像合并(马赛克)功能。利用 TIOVX 图形外的 Linux 级 API,处理来自 V4L2 的输入与通过 KMS 或 DRM 的输出。不过,GStreamer 拥有很多可用插件,可利用该等插件,实施该等 API。TIOVX 应用程序会被编译为二进制应用程序并运行,而 GStreamer 流水线可利用能够通过命令行运行的单个字符串表示。
本部分将分析在运行该等应用程序时 AM62A74 的资源利用率。测量应用程序能够通过 TIOVX 接收远程内核利用率,并且通过存储器映射寄存器来读取 DDR 利用率和温度等其他信息。该 perf_stats 应用程序是 SDK 的一部分,位于 /opt/edgeai-gst-apps/scripts/perf_stats 目录下。SoC 利用率的采样间隔为 500ms;在 20s 的时间窗口完成该等采样(每个 RGB 流与 IR 流为 600 帧),然后平均到 图 5-7 所示双条形图中。
图 5-7 适用于双流可视化流水线的 GStreamer 与 TIOVX 的利用率比较该图表中的误差条表示第 25 百分位数与第 75 百分位数。两种框架下,当应用以 30FPS(每个输入流)运行时,加速器与 DDR 的利用率相当,不会出现掉帧现象。值得注意的是,MPU(SMP 模式下的四路 Arm® Cortex®-A53,图 5-7 中标记为 mpu1_0)在 GStreamer 中的利用率高于 TIOVX。这是因为,CPU 复合体与任何远程内核或加速器之间的信号增加。在该应用中,未使用 C7xMMA。除此之外,两个应用框架之间的核心或 HWA 的利用率非常相似,TIOVX 效率稍高。
表 5-1 显示了通过流水线各个元件的延迟。不包括帧采集与显示延迟。对于应用程序中的每个处理任务,对比 GStreamer 与 TIOVX 的延迟以及总延迟。因此可以认为,TIOVX 一般更快,特别是在色彩转换方面;红外路径受应用框架差异的影响最大。
功能 | GStreamer (ms) | TIOVX (ms) |
|---|---|---|
VISS ISP (红外) | 18.5 | 13.9 |
VISS ISP (RGB) | 17.6 | 14.1 |
MSC 缩小(红外) | 14.3 | 13.7 |
MSC 缩小(RGB) | 21.2 | 20.5 |
色彩转换 (红外->NV12) | 19.2 | 0.64 |
马赛克合并图像(RGB + IR) | 5.5 | 4.7 |
总延迟(IR 路径) | 57.5 | 32.9 |
总延迟(RGB 路径) | 44.3 | 39.3 |
GStreamer 在内部为每个插件实现了 TIOVX 节点,因此,TIOVX 节点的测量速度总是快于 GStreamer 中的同等插件。GStreamer 的测量是在插件从 Linux 运行前后捕获的,TIOVX 的测量可以通过运行操作的远程内核采集与报告。存在明显提升。(1) 所示),特别是从灰度到 NV12 格式的色彩转换延迟。(1)
对比该等应用程序的另一种方法是中断与处理器间通信的频繁程度(即:A53 向 C7x 发送信息,R5F 向 A53 发送信息等)。中断次数越少越好,因为这样能够让处理器更快地处理来自不同外设与加速器的待处理信号。测量 Linux 的中断次数,以便查看 A53(运行 Linux)在每个应用程序运行 600 帧前后收到的中断次数。
在 20 秒的持续时间内(每个流 600 帧),Linux 的中断次数。GStreamer 显示的中断次数多于 TIOVX,因为运行 Linux 的 Cortex A53 内核必须在每个插件/流水线元素之间发出通知。于单个内核邮箱的中断计数,通过 /proc/interrupts 获取。
GStreamer 应用程序 | TIOVX 应用 | |
|---|---|---|
DM R5F(管理 VPAC) | 13,469 | 10,589 |
C7x | 0(未使用) | 0(未使用) |
MCU R5F | 0(未使用) | 0(未使用) |
表 5-2 中的数据反映了一个总体趋势,即:在 CPU 中断方面,GStreamer 的效率低于 TIOVX。这是因为,TIOVX 允许所有内核直接通信,但 GStreamer 要求内核通过 Linux 主机 (A53) 流动。利用 TIDL 增加 AI 处理也显示出了类似的 C7x 中断模式。