今天带大家了解 S32V 的 APEX 的数据组织和具体的处理流程。
一、APEX_数据组织相关的概念定义
1.1 APEX 核物理架构
参考资料:《APEX_Data_Organization_and_Processing.pdf》
- CU + CMEM --- for 矢量操作,一个 CU 对应一块 CMEM ( 4 KB )
- IMEM + DMEM + ACP --- for 标量操作
1.2 APEX 数据块相关概念的定义和解释
① Slice , Chunk
图片数据分多个 Slice 处理,这个 Slice 又分多个 Chunk 处理,Chunk 的数据会直接导入到CMEM 里面,一个 CU 对应一个 Chunck ,CU 是否充分利用,取决于 Chunk 大小设定。
② Spatial Dependency (空间依赖)
如下图,每个像素的空间依赖大小为 1 个像素
③ Image Border Padding
由于图像处理时,需要空间依赖数据,在 Buffer 边缘时,会按照 Spatial Dependency 大小拷贝填充 Padding。
④ Chunk Padding
同样,在 Chunck 边缘时,它的 Padding 是由它的邻近 Chunk 的数据进行填充
如上图,当这个 Chunk 在 Image Bufer 边缘填充的一个情况。
注: Padding 数据会由 APEX 自动加上,无须人工干预。
⑤ Chunk 数据 + Chunk Padding 导入到 CU 时,对应存储位置
地址从 Chunk 数据开始,而不是从 Padding 数据开始。
二、APEX_处理流程
2.1 APEX & ARM 数据处理流程
参考资料:《UG-10267-03-14-ACF_User_Guide.pdf》
2.2 运用 ACF 加速五步走
Kernel ---> Graph ---> 配置 APU属性 ---> 生成 ACF 固件 ---> ARM 调用
2.3 Kernel 介绍
① Kernel 的实现
编程语言,APU-C ( 即 C99 code + Vector extension )
Kernel 的主要表现:(以 ADD 为例子)
在 For loop 中,要充分处理 Chunk 中的数据,即以 ChunkWidth 和 ChunkHight 作为边界。
注意:Kernel Input 的端口变量,只能读,不能写
② Kernel Metadata
端口属性配置Metadata 的定义:
Attributtes 有四种:NONE、FIXED、STATIC、STATIC_FIXED
比如:ACF_ATTR_VEC_IN、ACF_ATTR_VEC_IN_FIXED、ACF_ATTR_VEC_IN_STATIC、ACF_ATTR_VEC_IN_STATIC_FIXED
_spatial_dep : 设置 Kernel 的左、右、上、下依赖的大小(大小以 eo 为单位)
Sd(left,right,top,down)
③ Kernel Wrapper to ACF
Kernel 封装统一接口给 ACF 调用,所封装的 Kernel_name 必须与 metadata 里面的 identifier 一致
Kernel_io+_desc 的定义如下:
这里的 ChunkSpan 以 Byte 为单位,注意不同类型之间所占用的字节数
比如实现:
ACF 封装
如上,Out0 为 16 bit,In0 为 8 bit,即 Out0.chunSpan 为 In0 stride 的两倍,所以 lStrideOut0 = Out0.chunSpan / 2
The End
评论