【ATU Book-S32V系列】APEX 進階架構

一.   概述

前文回顧,從上一篇 APEX-CV Pro Library 介紹 ,相信各位已經對於如何使用 APEX-CV 資料庫有一定的熟悉度了。而此篇文章為另一個 APEX 系列的介紹。這裡將開始更詳細更進階的介紹 APEX 使用方式,並擺脫 APEX-CV 的思維,從使用 kernel 的角度變成創造 Kernel。接下來,將藉由 APEX 的進階介紹能夠帶領各位撰寫出專屬的 APEX Kernel ,更能展現出 APEX 的效能。
如同下圖 “APEX 技術指南-文章架構示意圖” 所示,此次介紹章節為 “ APEX 進階架構

 


APEX  技術指南 - 文章架構示意圖
 

若是對於 APEX 相關技術與知識尚未理解者,該篇文章難度略深,請從另一個系列的文章 “ APEX 基礎架構 ” 閱覽起。 

 

在 APEX 的進階架構探討裡,可拆成兩個部分介紹 ; 分別為 硬體架構 與 軟體架構 兩大部分。

二.   APEX 硬體架構之進階探討

首先探討進階的 APEX 硬體架構,如同文章 “APEX 基礎架構”內所描述的 APEX 的核心架構是由兩大架構所組成 …
第一大架構為 APU(Array Process Unit) 矩陣運算單元,主要負責平行化處理,並配置2顆供使用。
第二大架構為 DMA( Direct Memory Access) 快速存取記憶體架構,主要負責資料與記憶體之間的傳輸。


APEX 架構示意圖
圖文出處 : NXP文件 - APEX Core Architecture and Programming.pdf

 

使 APEX 核心能夠達到硬體加速的效果, 這就要歸功於所謂的矩陣處理單元 APU (Array Processor Unit) ,也是硬體加速最重要的關鍵。如下圖所示,一個 APU 是由 32 個小型處理器 CU 組成。並搭配 128 KByte 大小的記憶體作為使用。

 

 APU 架構示意圖
圖文出處 : NXP文件 - APEX Principle and Programming_liyan.pdf

 

引用先前概念,可將 APU 視為一個分工者,將整張影像資料切割成數個區域並適當分工於數個 CU 進行運算,這樣就能在大幅度縮短處理時間!!
接下來,將介紹 APU 整個硬體架構、硬體動作的流程,以及 APU 的特色。

 


 APU 架構示意圖
圖文出處 : NXP文件 - APU-2_C_Programmer_Guide.pdf

 

如上圖所示,為 APU 實際硬體架構圖,在內部構造中可以看到兩大區塊分別為 純量( Scalar)向量(Vector) 。這兩種運算架構,其中的 ALU / vALU、DMEM / CMEM 能互相傳遞訊息。這也就是 APU 可靈活運用的原因之一。

以下將說明 APU 實際硬體架構圖中的名詞定義
純量處理器(Scalar Processor)

a. IMEM (Instruction Memory) 指令記憶體 : 為存放指令類別的記憶體。
b. DMEM (Data Memory) 資料記憶體 : 為存放資料類別的記憶體。
c. SREG (Scalar Register) 純量暫存器 : 為暫存或緩衝純量數值。
d. ALU (Scalar ALU) 純量算術邏輯運算單元 : 主要運算純量的資料。

向量處理器(Vector Processor)

a. CMEM (Computational Memory) 運算處理記憶體 : 為 CU 所配置之記憶體。
b. vREG (Vector Register) 向量暫存器 : 為暫存或緩衝向量數值。
c. vALU (Vector ALU) 向量算術邏輯運算單元 : 主要運算向量的資料。


若更詳細的注意 APU 實際硬體架構圖,每一個箭頭指向的方向,所代表的意思就是資料的傳遞方向。像是純量與向量間資料的互相傳遞就是 ALU / vALU 與 DMEM / CMEM 互相搭配,或是龐大的資料亦會使用到 DMEM / CMEM 與 sReg / vReg 將資料暫存至暫存器中。最後皆會透過 Memory Interface 送至外部記憶體 External Memory ,然而這時就會透過 DMA (Direct Memory Acess) 的機制將資料進行快速的存取,以減省傳輸的時間。


Chunk 與 Tile 組成示意圖
圖文出處 : NXP文件 - APEX2_emu_UserGuide.pdf

 

此外,介紹一下記憶體的排列方式。 APEX 會將 Chunk 組成 Tiles 或 Slice 的形式,以便控制與提高效能,其中 Tiles 或 Slice 為描述一整片記憶體的位置。如 Chunk 與 Tiles 組成示意圖所示,由原始數據 (Raw input image) 的資料,被拆分成各個 Chunk 並設置於 CU0 至 CU3 之中,這樣排列成一條的方式即組成 Tile (Tile image) ,而 Tile 的實際排列則如示意圖上記憶體 CMEM 所呈現的方式一致。

 

三.   APEX 軟體架構之進階探討


軟體架構的進階探討,可以拆成兩大部分來說明 ; 分別為 Vision SDK 軟體架構 與 APEX軟體架構。

1. Vision SDK 軟體架構

提起 S32V234 所運行的軟體架構就須先從 Vision SDK 軟體開發套件講起,如下 Vision SDK 架構示意圖所示,分別由 S32V234 Hardware 硬體、 第三方軟體 (3rd Party) 與原廠軟體開發工具 Vision SDK 共三個層級所組成。其中 S32V234 硬體內的 G2-APEX-642 即表示 APEX 硬體部分,並可藉由軟體層 Vision SDK 向硬體溝通。接續,可以觀察圖上黑框的部分,順序由下往上看,需依序建置 APEX Driver (.ko) 、ACF Graph & Kernel 、ACF 、APEX-CV ,其中 kernel 就是指 APU Kernel。這也就是此系列將要介紹 ACF 、APU Kernel 與 APEX kernel 建置流程。


VisionSDK 架構示意圖
圖文出處 : NXP文件 - APEX Core Architecture and Programming

 

2. APEX 軟體架構

這裡來闡述整個 APEX Kernel 軟體建置的流程,也就是 ACF 與 APU 的建置流程。如下圖所示,為 APEX 軟體架構流程圖,建議由下往上看此架構,同時也表示由最底層的架構建置起。

第一步就先關注每個層級的標題 (即虛線上方文字) ,依橘色、暗紫色、紫色、藍色方框上文字所述,首先建置 APU Kernel 並完成後 (即橘色方塊),再設計 ACF Graph 並搭配 APEX Core Framework (ACF) 向硬體溝通最佳化的硬體資源配置。生成後,再透過 ACF Graph (暗紫色方塊) 與描述 Library 的 C/C++ 檔案即可生成 APEX Kernel (即紫色方塊),亦可等同於我們所謂的 APEX-CV Kernel。建立完成就可以將 APEX Kernel 運用至我們熟悉的 APEX Application 應用層 (即藍色方塊) ,以程式的角度就是可以在 Main.cpp 下的架構作任意搭配與使用 。

PS : 方塊左上角的紅字為所在的層級

 

APEX 軟體架構流程示意圖

 

此外,關於 APEX Core Framework (ACF) 我們可以想像成 APU 與 APEX Kernel 架構層之間溝通的軟體,後續文章將重新以須建置的檔案方式來說明。整個 APEX Kernel 的建置,必須從撰寫 APU 以及 ACF 檔案,並接著撰寫 ACF_graph 與ACF_process_desc 的檔案,最後才能生成 APEX Kernel 。

同時,
    APU Kernel 就是負責演算法的運算;比如說矩陣加法、減法,甚至霍夫轉換、色彩轉換等演算法。
    ACF Graph 就是負責銜接 APU Kernel; 比如說算法設計為 先取絕對值後加法,只須絕對值與加法 kernel 連接即可。
    APEX Kernel 就是負責整個 Kernel 動作與行為 ; 比如說初始化、重置、動作、顯示 APU 資訊等。
    APEX Application 就是應用端 ; 就如同 APEX-CV 的使用方式一樣。

 
以上為 APEX 進階的硬體與軟體架構介紹,下一篇文章為 APU 資料型態與函式庫 ,將會教導如何一些關於 APU 獨特的資料型態與簡易的函式使用方式。若想加快軟體架構的理解,建議直接查看已安裝完成的 Vision SDK 資料夾,查看 kernel 、 lib以及 apps 資料夾內的檔案,即可對應至上述介紹 !
 
 

四.  參考文件

[1] NXP Official website : https://www.nxp.com/
[2] VisionSDK_ProgrammingExamples.pdf
[3] VisionSDK_UserGuide.pdf
[4] VisionSDK_SUMat_UMat.pdf
[5] UG-10328-01-09_APEX-CV_Base_Library .pdf
[6] UG-10328-02-11_APEX-CV_Pro_Library.pdf
[7] UG-10267-03-14-ACF_User_Guide.pdf
[8] UG-10301-00-06_APU-2_C_Programmer_Guide pdf


如有任何相關 APEX 技術問題,歡迎至博文底下留言提問 !!
接下來還會分享更多 APEX 的技術文章 !!敬請期待 【 ATU Book-S32V系列 】 !!

 


 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論