博客底层软件J6X gpu OpenCL sample

J6X gpu OpenCL sample

新手村2026-10-27
16
0

1. 功能概述

本文的gpu sample简单展示了OpenCL的计算和图片处理功能

1.1. 软件架构说明

本文的sample基于gpu的libgbm api,libEGL api,libGLESv2 api(支持GLES2,GLES3.2)实现。

1.2. 代码位置与目录结构

代码路径

1.3. API流程说明

OpenCL sample中的api调用相对简单。下面的流程图中抽取了相对固定的api调用,简要展示了OpenCL api的调用流程:

2. OpenCL sample

  1. 以下是OpenCL的图片灰度处理sample

运行结束之后会看到当前文件夹中有两张格式为raw rgba8888 4k的图片,一张是由cpu生成的参考图片,另一张是由gpu生成的图片。处理前和处理后的图片如下所示:

该sample会逐像素地对cpu和gpu的计算结果做校验,在sample运行结束之后会打印sample的cpu占用率,该占用率可能偏高,这是由于图片加载以及逐像素校验导致的。 通过额外的运行参数可得到opencl任务下发线程的cpu占用率:

可以看到,任务下发线程的cpu占用率约为1.3%,输出的图片帧率约为64fps,总共输出了641帧数据。

  1. 以下是OpenCL的fma计算sample

可以看到,fma运算的任务总共在gpu端运行了1次,由此得到的gpu算力约为204gflops,gpu的计算单元有4个,该任务在gpu端执行了约399.709034ms,整个sample的运行时间约为399.908901ms,gpu运算时间占sample运行时间的99.950022%。

  1. 以下是OpenCL的畸变矫正sample

运行结束之后当前文件夹中会生成一张yuv图片,格式为nv12 1280x720,可以通过看图软件查看。下图仅为示例,实际情况请结合输入图片进行确认:

该sample可以进行1920x1080和3840x2160分辨率的畸变矫正任务,以下是运行示例:

以上是1080p分辨率畸变矫正的运行示例,运行期间的cpu占用率约为3%,平均帧率约为581fps,总共进行了11619帧畸变矫正任务。

以上是4k分辨率畸变矫正的运行示例,运行期间的cpu占用率约为0.7%,平均帧率约为152fps,总共进行了3054帧畸变矫正任务。

  1. 以下是OpenCL的2D拼接sample

可以看到,sample在执行期间每5s左右会进行一次打印,比如第一条打印的意思是“在5001毫秒内处理了16394帧图片”,由此可以计算帧率大概为3278fps。

该sample可以通过“-m” 命令指定最大帧率,通过“-d”选择是否dump图片:

运行结束之后当前文件夹中会生成多张rgba格式的图片,大小为1920x100。图片中“0123456789”10个数字每个数字重复2遍, 下一张图片的最右侧2个数字会换位到最左侧。以下是10张dump图的效果展示:

底层软件
社区征文官方教程征程6
评论0
0/600