S32V234 软件浅谈-APEX | 数据组织和具体的处理流程

今天带大家了解 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

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论