4.5.13. 2D GPU 性能测试
4.5.13.1. 测试原理
2D GPU 性能测试主要评估在 2D 图形加速等常用操作中的性能表现,包含位块传输、矩形填充和清除、透明度混合等关键指标。 测试代码逻辑如下:
记录测试起始时间
2D GPU 处理函数循环执行 100 次
记录测试结束时间
根据测试起始、结束时间和执行次数计算 2D GPU 处理函数的平均耗时和帧率
4.5.13.2. 测试准备工作
BSP 镜像中默认存放了可执行的测试程序 , 可以
cd到如下路径查看 :cd /app/platform_samples/chip_base_test/10_gpu_2d_test/ ls bin performance_test.sh
如果是自定义镜像的情况,可以从 BSP 源码目录中的
app/samples/platform_samples/chip_base_test/10_gpu_2d_test目录拷贝到设备中
4.5.13.3. 测试方法
执行
performance_test.sh./performance_test.sh
打印如下结果:
root@buildroot:10_gpu_2d_test# ./performance_test.sh
[Case copy ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1142191 us] [AverageConsume 11421 us] [FPS 87.6]
[Case multi_source_alphablend ] [Input 4*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 2046196 us] [AverageConsume 20461 us] [FPS 48.9]
[Case resize ] [Input 1*1920*1080] [Output 3840*2160] [TestTimes 100] [TotalConsume 1227924 us] [AverageConsume 12279 us] [FPS 81.4]
[Case resize ] [Input 1*1920*1080] [Output 960*540 ] [TestTimes 100] [TotalConsume 80673 us] [AverageConsume 806 us] [FPS 1239.6]
[Case stitch ] [Input 4*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1357203 us] [AverageConsume 13572 us] [FPS 73.7]
[Case stitch ] [Input 2*3840*2160] [Output 3840*1080] [TestTimes 100] [TotalConsume 688650 us] [AverageConsume 6886 us] [FPS 145.2]
[Case alphablend ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1146742 us] [AverageConsume 11467 us] [FPS 87.2]
[Case crop ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1141900 us] [AverageConsume 11419 us] [FPS 87.6]
[Case rectangle_fill ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1143476 us] [AverageConsume 11434 us] [FPS 87.5]
4.5.13.4. 测试指标
针对测试方法章节中的打印结果,分析如下:
| 测试项 | FPS | 说明 |
|---|---|---|
| copy | 87.2 | 使用 2DGPU 完成分辨率为 3840 * 2160 图像的拷贝操作 |
| multi_source_alphablend | 48.9 | 输入 4 个 3840 * 2160 图像融合成一个3840 *2160 的图像 |
| resize | 81.4 | 输入 1920*1080 的图像放大 4 倍后输出 3840 * 2160 的图像 |
| resize( 第 2 个 ) | 1239.6 | 输入 1920 * 1080 的图像缩小 4 倍后输出 960 * 540 的图像 |
| stitch | 73.7 | 输入 4 个 3840 * 2160的图像拼接成1个 3840 * 2160 的图像(输入图像的宽和高先各缩放 2 倍再拼接) |
| stitch(第 2 个) | 145.2 | 输入 2 个 3840 * 2160的图像拼接成1个 3840*1080 的图像(输入图像的宽和高先各缩放 2 倍再在水平方向拼接) |
| alphablend | 87.2 | 输入 2 个 3840 * 2160 的图像,两个图像的背景色是不同的,进行 alphablend 处理后,输出一个3840 * 2160 的图像 |
| crop | 87.6 | 输入 1 个 3840 * 2160 的图像,从输入图像的起始坐标 (0,0) 裁剪 3840 * 2160 的图像, 输出 3840 * 2160 的图像 (利用裁剪的方式实现图像拷贝) |
| rectangle_fill | 87.5 | 输入一个 3840 * 2160 的图像背景色是黑色,填充一个和输入图像大小一样的红色矩形框,输出 3840 * 2160 的图像 |
源码见 BSP 源码目录中的 app/samples/platform_samples/sample_gpu_2d
4.5.13.5. 常见问题
多次执行的结果之间有比较小的差别
问题描述:如下两次执行日志,测出的帧率是不同的 第一次执行日志:
[Case copy ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1142191 us] [AverageConsume 11421 us] [FPS 87.6] [Case multi_source_alphablend ] [Input 4*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 2046196 us] [AverageConsume 20461 us] [FPS 48.9] [Case resize ] [Input 1*1920*1080] [Output 3840*2160] [TestTimes 100] [TotalConsume 1227924 us] [AverageConsume 12279 us] [FPS 81.4] [Case resize ] [Input 1*1920*1080] [Output 960*540 ] [TestTimes 100] [TotalConsume 80673 us] [AverageConsume 806 us] [FPS 1239.6] [Case stitch ] [Input 4*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1357203 us] [AverageConsume 13572 us] [FPS 73.7] [Case stitch ] [Input 2*3840*2160] [Output 3840*1080] [TestTimes 100] [TotalConsume 688650 us] [AverageConsume 6886 us] [FPS 145.2] [Case alphablend ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1146742 us] [AverageConsume 11467 us] [FPS 87.2] [Case crop ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1141900 us] [AverageConsume 11419 us] [FPS 87.6] [Case rectangle_fill ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1143476 us] [AverageConsume 11434 us] [FPS 87.5]
第二次执行日志:
[Case copy ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1160530 us] [AverageConsume 11605 us] [FPS 86.2] [Case multi_source_alphablend ] [Input 4*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 2069446 us] [AverageConsume 20694 us] [FPS 48.3] [Case resize ] [Input 1*1920*1080] [Output 3840*2160] [TestTimes 100] [TotalConsume 1243849 us] [AverageConsume 12438 us] [FPS 80.4] [Case resize ] [Input 1*1920*1080] [Output 960*540 ] [TestTimes 100] [TotalConsume 80530 us] [AverageConsume 805 us] [FPS 1241.8] [Case stitch ] [Input 4*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1371815 us] [AverageConsume 13718 us] [FPS 72.9] [Case stitch ] [Input 2*3840*2160] [Output 3840*1080] [TestTimes 100] [TotalConsume 695384 us] [AverageConsume 6953 us] [FPS 143.8] [Case alphablend ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1160516 us] [AverageConsume 11605 us] [FPS 86.2] [Case crop ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1160381 us] [AverageConsume 11603 us] [FPS 86.2] [Case rectangle_fill ] [Input 1*3840*2160] [Output 3840*2160] [TestTimes 100] [TotalConsume 1149800 us] [AverageConsume 11498 us] [FPS 87.0]
问题分析:性能测试的逻辑是执行 100 次,计算的平均时间,所以存在 1 帧左右的偏差
解决办法:可以修改测试脚本
performance_test.sh中执行次数(默认是 100 次,为了尽快输出测试结果)