ZHCAF23A February 2025 – March 2025 AM62A3 , AM62A3-Q1 , AM62A7 , AM62A7-Q1 , AM67A , TDA4AEN-Q1
本部分將分析一個(gè)同時(shí)對(duì) RGB 流與紅外流進(jìn)行可視化的應(yīng)用程序。
該應(yīng)用由 GStreamer 與 TIOVX 共同組成,以便對(duì)兩者進(jìn)行對(duì)比。圖 5-5 顯示的是 GStreamer 中的應(yīng)用程序,圖 5-6 顯示了利用 TIOVX 構(gòu)建的等效應(yīng)用程序。對(duì)于 GST 命令與 TIOVX 代碼,可通過 GitHub [6] 獲取。
幀數(shù)據(jù)通過 v4l2,從與 RGB 和 IR 流對(duì)應(yīng)的 /dev/videoX 條目到達(dá),并且通過片上 ISP 進(jìn)行處理。兩個(gè)數(shù)據(jù)流都會(huì)縮放到適合顯示器的分辨率,IR 數(shù)據(jù)流(灰度)會(huì)轉(zhuǎn)換為與 RGB 數(shù)據(jù)流相同的色彩格式。然后,在通過 Linux KMS 或 DRM 接口顯示到監(jiān)視器以前,將該等數(shù)據(jù)流合并至支持馬賽克功能的單個(gè)幀。
TIOVX 與 GStreamer 應(yīng)用在處理功能方面是等效的,但也存在一些主要差異。TIOVX 應(yīng)用程序會(huì)構(gòu)建一個(gè)處理應(yīng)用程序內(nèi)部主體的 TIOVX 圖形,在本例中,為 ISP、比例縮小、色彩轉(zhuǎn)換以及圖像合并(馬賽克)功能。利用 TIOVX 圖形外的 Linux 級(jí) API,處理來自 V4L2 的輸入與通過 KMS 或 DRM 的輸出。不過,GStreamer 擁有很多可用插件,可利用該等插件,實(shí)施該等 API。TIOVX 應(yīng)用程序會(huì)被編譯為二進(jìn)制應(yīng)用程序并運(yùn)行,而 GStreamer 流水線可利用能夠通過命令行運(yùn)行的單個(gè)字符串表示。
本部分將分析在運(yùn)行該等應(yīng)用程序時(shí) AM62A74 的資源利用率。測(cè)量應(yīng)用程序能夠通過 TIOVX 接收遠(yuǎn)程內(nèi)核利用率,并且通過存儲(chǔ)器映射寄存器來讀取 DDR 利用率和溫度等其他信息。該 perf_stats 應(yīng)用程序是 SDK 的一部分,位于 /opt/edgeai-gst-apps/scripts/perf_stats 目錄下。SoC 利用率的采樣間隔為 500ms;在 20s 的時(shí)間窗口完成該等采樣(每個(gè) RGB 流與 IR 流為 600 幀),然后平均到 圖 5-7 所示雙條形圖中。
圖 5-7 適用于雙流可視化流水線的 GStreamer 與 TIOVX 的利用率比較該圖表中的誤差條表示第 25 百分位數(shù)與第 75 百分位數(shù)。兩種框架下,當(dāng)應(yīng)用以 30FPS(每個(gè)輸入流)運(yùn)行時(shí),加速器與 DDR 的利用率相當(dāng),不會(huì)出現(xiàn)掉幀現(xiàn)象。值得注意的是,MPU(SMP 模式下的四路 Arm? Cortex?-A53,圖 5-7 中標(biāo)記為 mpu1_0)在 GStreamer 中的利用率高于 TIOVX。這是因?yàn)?,CPU 復(fù)合體與任何遠(yuǎn)程內(nèi)核或加速器之間的信號(hào)增加。在該應(yīng)用中,未使用 C7xMMA。除此之外,兩個(gè)應(yīng)用框架之間的核心或 HWA 的利用率非常相似,TIOVX 效率稍高。
表 5-1 顯示了通過流水線各個(gè)元件的延遲。不包括幀采集與顯示延遲。對(duì)于應(yīng)用程序中的每個(gè)處理任務(wù),對(duì)比 GStreamer 與 TIOVX 的延遲以及總延遲。因此可以認(rèn)為,TIOVX 一般更快,特別是在色彩轉(zhuǎn)換方面;紅外路徑受應(yīng)用框架差異的影響最大。
功能 | 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 |
色彩轉(zhuǎn)換 (紅外->NV12) | 19.2 | 0.64 |
馬賽克合并圖像(RGB + IR) | 5.5 | 4.7 |
總延遲(IR 路徑) | 57.5 | 32.9 |
總延遲(RGB 路徑) | 44.3 | 39.3 |
GStreamer 在內(nèi)部為每個(gè)插件實(shí)現(xiàn)了 TIOVX 節(jié)點(diǎn),因此,TIOVX 節(jié)點(diǎn)的測(cè)量速度總是快于 GStreamer 中的同等插件。GStreamer 的測(cè)量是在插件從 Linux 運(yùn)行前后捕獲的,TIOVX 的測(cè)量可以通過運(yùn)行操作的遠(yuǎn)程內(nèi)核采集與報(bào)告。存在明顯提升。(1) 所示),特別是從灰度到 NV12 格式的色彩轉(zhuǎn)換延遲。(1)
對(duì)比該等應(yīng)用程序的另一種方法是中斷與處理器間通信的頻繁程度(即:A53 向 C7x 發(fā)送信息,R5F 向 A53 發(fā)送信息等)。中斷次數(shù)越少越好,因?yàn)檫@樣能夠讓處理器更快地處理來自不同外設(shè)與加速器的待處理信號(hào)。測(cè)量 Linux 的中斷次數(shù),以便查看 A53(運(yùn)行 Linux)在每個(gè)應(yīng)用程序運(yùn)行 600 幀前后收到的中斷次數(shù)。
在 20 秒的持續(xù)時(shí)間內(nèi)(每個(gè)流 600 幀),Linux 的中斷次數(shù)。GStreamer 顯示的中斷次數(shù)多于 TIOVX,因?yàn)檫\(yùn)行 Linux 的 Cortex A53 內(nèi)核必須在每個(gè)插件/流水線元素之間發(fā)出通知。于單個(gè)內(nèi)核郵箱的中斷計(jì)數(shù),通過 /proc/interrupts 獲取。
GStreamer 應(yīng)用程序 | TIOVX 應(yīng)用 | |
|---|---|---|
DM R5F(管理 VPAC) | 13,469 | 10,589 |
C7x | 0(未使用) | 0(未使用) |
MCU R5F | 0(未使用) | 0(未使用) |
表 5-2 中的數(shù)據(jù)反映了一個(gè)總體趨勢(shì),即:在 CPU 中斷方面,GStreamer 的效率低于 TIOVX。這是因?yàn)?,TIOVX 允許所有內(nèi)核直接通信,但 GStreamer 要求內(nèi)核通過 Linux 主機(jī) (A53) 流動(dòng)。利用 TIDL 增加 AI 處理也顯示出了類似的 C7x 中斷模式。