以下翻译自APEX_Programming_Overview.pdf
2 APEX Core
APEX内核是可编程高性能节能视觉加速器内核。它是一种大规模并行混合处理器,非常适合处理大量数据。
每个APEX内核均包括两(2)个阵列处理器单元(APU),高级直接内存访问(DMA)引擎和其他硬件模块。 有关更多信息,请参阅《 S32V234参考手册》:https://www.nxp.com/docs/en/reference-manual/S32V234RM.pdf
APU是具有三十二(32)个16位计算单元(CU)的标量矢量混合处理器带有用于向量的本地专用计算内存(CMEM),并与32位标量RISC处理器紧密耦合。
APEX内核在运行时提供灵活的配置。 默认情况下,APEX配置为具有64-CU的单个APU。 使用APEX Core Framework库时,还可以在运行时更改配置,并具有两个独立的APU,每个APU具有32-CU。
3 APEX Core Framework (ACF)
ACF是软件库和工具的集合,为在APEX内核上开发和执行代码提供了简便的方法。
APU需要专用的编译器来生成兼容的可执行文件。 Vision SDK安装程序,以及用于Vision的S32DS,带有免费提供的NXP APU编译器版本。
另一种工具集称为APU-2工具,需要额外付费。 APU-2工具具有编译器,周期精确的指令集模拟器和片上调试器软件功能。
建议使用APU-2工具进行高级APEX编程开发。 请联系您的销售代表以获取更多详细信息。
ACF正在抽象APEX硬件,以简化与硬件无关的功能编程。 这也允许跨APEX核心生成兼容性。 ACF消除了对DMA传输进行编码的繁琐任务,从而通过自动选择最佳的硬件资源使用来获得开发时间和性能。
易于编程,Vision SDK提供了一个用于构建应用程序的界面,构建系统会自动完成APU编译器和ACF工具的调用。
4 Vision SDK
Vision SDK中有多种开发代码的方法,这些代码将利用APEX核心的大量计算能力:APEX-CV库,自定义ACF图形,自定义ACF内核。
APEX-CV Library 是利用APEX核心的最简单方法。 计算机视觉库提供了大量算法,可通过直观的应用程序编程接口(API)从ARM轻松访问这些算法。 查阅APEX-CV库文档[1] [2]用于算法列表和相应的API。 有关更多详细信息,请参阅第5节APEX-CV库[在下面]。
Custom ACF Graphs 自定义ACF图允许合并一组操作并减少到主内存的传输时间。 自定义ACF图是优化的第一步,或者在使用自定义ACF内核时是必需的。 有关更多详细信息,请参阅第6节“自定义ACF图”。
Custom ACF Kernels 提供在APU上执行完全自定义代码的方式。 自订通过ACF内核,可以访问完整的编程,并可以进行最大程度的优化。有关更多详细信息,请参阅第7节“自定义ACF内核” [在下面]。
5 APEX-CV Library
APEX-CV库是执行将在APEX视觉加速器核心上运行的代码的最简单方法。在Vision SDK中,APEX-CV库由Base和Pro子库组成。
APEX-CV Base提供所有基本且更简单的计算机视觉操作,而APEX-CV Pro包含最高级的功能。
APEX-CV库作为API和内核库提供。创建自定义ACF图时,APEX-CV Base可以轻松与API一起使用,也可以作为ACF内核库使用。 APEXCV Pro主要用于通过API使用。
开发该API是为了提供易用性和清晰度,而又不影响性能。大多数类提供单独的初始化和处理方法,以分别初始化对象和执行计算。要更改正在使用的源变量和目标变量,应使用reconnectIO方法。 Initialize()方法执行一次,在此阶段进行一些动态分配,然后通过其他方法使用初始化的对象不会触发额外的内存分配。释放对象时释放内存。
大多数类别都支持从128像素到2048像素宽的图像大小。 高度不是许多类的限制因素,但是有些会受到限制,请查看类文档。
APEX-CV在某些方面类似于OpenCV。 以下是一些关键点:
•APEX-CV 使用与OpenCV类似的虚拟映像容器UMat。 该映像容器允许引用内存中的映像,而无需在ARM虚拟空间中包含映像并可能进行缓存。
•可以混合使用APEX-CV和OpenCV功能,建议获取一个Mat对象以执行OpenCV功能,然后释放Mat对象并将UMat对象用于APEX-CV功能。
•与OpenCV的主要区别在于APEX-CV功能需要
在调用它们之前要定义的输出缓冲区。 这主要是为了更紧密地控制何时和何处进行内存分配。
APEX-CV库是在Vision SDK中预编译提供的,因此如果不需要,可以使用APU编译器。
Vision SDK中提供了一些示例,显示了如何使用APEX-CV类,从基本使用到带有传感器输入和显示的完整应用程序。 请参考以下文件夹:
s32v234_sdk \ demos \ apexcv_base和s32v234_sdk \ demos \ apexcv_pro,以及的更高级应用程序。 s32v234_sdk \ demos \ apps。
APEX-CV类具有针对芯片上特定APEX内核的支持。 方法SelectApexCore()允许设置在调用下一个方法Process()时使用哪个内核。 可以为每次对Process()的调用更改核心。 请注意,使用APEX-CV API时,CU的数量始终为64。 APEX-CV Process()方法处于阻塞状态,因此要并行运行多个对象,需要在不同线程中进行调用。
相关文档:APEX-CV基本文档,APEX-CV PRO文档
6 Custom ACF Graphs
使用自定义ACF图是添加新功能并优化APEX内核上运行的代码的一种方法。
简而言之,ACF图是对处理流程的描述,其中定义了输入和输出,并引用了现有的处理组ACF Kernels。 由于APEX-CV Base还提供了ACF内核,因此可以使用这些现有内核中的任何一个来创建自定义ACF图。
强烈建议查阅ACF用户指南以更好地了解APEX核心框架的上下文和详细信息。
要使用自定义ACF图,必须有一个APU编译器。 APU有两种可能的编译器:Vision SDK附带的NXP APU编译器(nxp)和APU-2工具(tct)。 有关更多详细信息,请咨询3 APEX核心框架(ACF)。
Vision SDK中提供了一些示例,这些示例显示了从基本用法到更复杂的用法,如何使用自定义ACF图。 请参考文件夹:s32v234_sdk \ demos \ apex。 封装所需功能的所需新二进制文件将由ACF的Autobuild生成,该文件已集成到Vision SDK构建系统中。 这是通过将一个带有其BUILD.mk文件和APU目标子文件夹的graphs文件夹添加到项目中来实现的,请参见上面提到的代码示例。
使用自定义ACF图时,可以指示要在其APU配置中使用哪个APEX内核。 可以使用64-CU或32-CU,后者允许在单个APEX内核的每个APU上同时运行两个计算。 请参见SelectApuConfiguration()
详细资料。 还可以通过为所有ACF进程调用Start()来启动处理,然后调用Wait(),从而从单个线程调用并行执行。 例如,请参见s32v234_sdk \ demos \ apex \ apex_add。
7 Custom ACF Kernels
使用自定义ACF内核可提供完全自定义功能,以添加新功能并优化在APEX内核上运行的代码。
通过编写自己的ACF内核,您可以添加自己的算法并利用APEX内核的处理能力。
强烈建议查阅APU-2 C编程指南和ACF用户指南,以更好地了解实现自定义ACF内核的上下文和细节。
Vision SDK中提供了现有的ACF Kernels源代码。 请参考文件夹:s32v234_sdk \ kernels \ apu \,您可以在其中找到APEX-CV Base和Pro的内核以及其他内核库。