S32V234 ISP 静态编译和算子性能计数器(IPUsv engines performance counters)信息打印

关键字 :NXPS32V234 ISP

一、静态调度介绍

        在 NXP S32V234 平台搭载的 ISP 模块中,在进行数据处理时,行缓冲区的管理和图像处理的逐行处理,都是由如下图圈中的视觉序列器来调度完成的,因此 IPU 算子由序列器的开始处理而触发,而对于数据流的处理方式有静态调度和动态调度两种方式。

 

 

动态调度 (Dynamic sequencing)

-基于缓冲区级别的处理步骤调度

-对于复杂度较高的 graph,比静态调度性能要低

-只能以较低的帧率来评价 IPUS/V,无法发挥 IPU 的性能

 

静态调度 (Static sequencing)

-基于摄像头数据的行来完成处理步骤

-通过行完成信号来驱动,相当于更小的缓冲区 ( 一般只有几行 )

-合理分配和利用 IPUS/V,序列器就能更高速的运行

-在不需要全部使用 1MB SRAM 内存的情况下,缓冲区使用的越少越好

-ISP graph 的各种修改需要手动修改静态序列器文件



二、使用静态调度

1、什么时候需要使用静态调度 (Static sequencing)?

       (1) 首先 IPUs/v 算子性能计数器显示有 fps>32 的足够的性能。

       (2) 增加相机帧率时,控制台显示发生了序列器错误。

 

那如何才能打印 IPUs/v 算子性能计数器 (IPUs/v engines performance counters) 的信息呢?很简单,在main.cpp 或者 isp_process.cpp 中添加如下代码。

 

添加一个值不超过 10 IPU_PROF_FRAMES 宏定义

 

添加如下两个函数,我这里是添加到按键处理中,按下 “p” 后会运行如下两个函数:

       ISP_DumpPerfCounters(IPU_PROF_FRAMES): 用于打印信息。

       SEQ_IpuPerformanceInfoRequest(IPU_PROF_FRAMES): 用于请求信息。

 

添加打印函数和申请信息函数

 

这里添加的 Demo 只使用了四个 IPUs ,所以只打印了如下四条信息。

 

IPUs/v 算子性能计数器打印的信息

 

2、怎样使用静态调度 (Static sequencing)?

 
(1) 生成静态调度文件

此处用例程 isp_sonyimx224_csi_dcu 来举例如何把 ISP 修改为的静态调度。

 

 

右键 ISP graph 空白处,选择 “Emit AS”,选择 “Emit Configurations”。

 

 

勾选 “Static sequencer”。

 


Emmit 成功之后,会在 “SEQ_gen” 目录生成 “static_mipi_simple.c”。

 

 

编译静态序列的话,“A53_gen” 目录下的如下文件也需要用到。

 

 

右键选择 “Properties”,在对话框中选择红框的部分的按钮来找到生成的文件。

  

 

(2) 移植文件

如上用 S32DS 工具是为了生成 isp 静态调度的文件,最终还是需要在 linux 命令行下编译 Demo ,

sony224 这个 Demo 在 SDK 中 “s32v234_sdk\isp\graphs\mipi_simple” 有 isp 文件的。

 

 

接下来需要把 “mipi_simple_c.h” 放入 “s32v234_sdk\isp\graphs\mipi_simple\inc” 中替换

“mipi_simple_c.h” 文件。

 

 

把 “mipi_simple.c”、“static_mipi_simple.c” 放入 “s32v234_sdk\isp\graphs\mipi_simple\src”。

 

 

复制 “dynamic_mipi_simple” 目录并改名为 “static_mipi_simple”,之后在这个目录里进行静态调度的编译。

 

 

再进入刚更改的目录中编辑 “BUILD.mk”。

 


编译模式改为 “static”, 保存退出。

 

 

(3) 编译



打开 msys32 。

 

 

输入环境变量:

export PATH=${PATH}:/D/NXP/VisionSDK_S32V2_RTM_1_2_0/msys32/mingw32/bin:/D/NXP/VisionSDK_S32V2_RTM_1_2_0/compilers/gcc-6.3.1-linaro-Xarmv8-linux/i686-mingw32/bin:/D/NXP/VisionSDK_S32V2_RTM_1_2_0/compilers/gcc-6.3.1-linaro-Earmv8-eabi/i686-mingw32/bin:/D/NXP/VisionSDK_S32V2_RTM_1_2_0/compilers/gcc-6.3.1-linaro-Earmv7-eabi/i686-mingw32/bin:/D/NXP/APU_Compiler_v1.0/bin

export ARCH=arm

export CROSS_COMPILE=aarch64-linux-gnu-

 

 

进入到我们创建的 “static_mipi_simple” 目录下进行编译。

 

 

编译得到 libstatic_mipi_simple.a 。

 


编译例程 isp_sonyimx224_csi_dcu ,该例程就是调用的 “mipi_simple” 的 isp graph 文件,但是需要修改编译文件 “BUILD.mk” 该 Demo 例程才会调用上面我们编译得到的 ISP 静态调度的库文件

“libstatic_mipi_simple.a”。

 

 

修改编译模式为 “static”,保存退出。

 

 

到这里编译 Demo 还会报错,还有如下两个点需要修改,打开“s32v234_sdk\isp\graphs\mipi_simple\static_mipi_simple\build-v234ce-gnu-linux-d” 目录下

“kmem.c” 拷贝如下数组名,到 “mipi_simple.c” 文件中。

 


 










 

打开 “s32v234_sdk\isp\graphs\mipi_simple\static_mipi_simple\build-v234ce-gnu-linux-d” 目录下

“sequencer_mipi_simple_srec.c”,拷贝如下数组名,到 “mipi_simple.c” 文件中。

 














 

进入 Demo 目录。

 

 

输入 make clean & make 编译得到 isp_sonyimx224_csi_dcu.elf,其中用到的就是我们修改得到的静态调度的 isp 库文件。

 

 

参考资料
[1] S32V234RM_Rev2.1.pdf

 

上一篇:NXP S32V234 的 copy_1to1_ipus ISP 算子解析

下一篇:NXP S32V234 ISP 模块的 IPUS 指令集

 

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

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

评论