4.5.14. 3D GPU 性能测试
4.5.14.1. 测试原理
3D GPU 性能
OpenGLES(渲染
性能 测试):使用 glmark2 进行 测试,评估 GPU 的 图形 渲染 能力,如 几何 处理、纹理 填充、着色器 性能 等。 OpenCL(计算
性能 测试):使用 clpeak 进行 测试,评估 GPU 在 通用 计算( GPGPU)任务 中 的 性能,如 浮点 计算、内存 带宽、整数 计算 等。
4.5.14.2. 测试准备工作
BSP 镜像
中 默认 存放 了 可 执行 的 测试程序 , 可以 cd到如下 路径 查看 : cd /app/platform_samples/chip_base_test/11_gpu_3d_test/ ls clpeak clpeak Readme.md source-code-patch ls glmark2 bin data Readme.md run.sh source-code-patch
如果
是 自定义 镜像 的 情况,可以 从 BSP 源码 目录 中 的 app/samples/platform_samples/chip_base_test/11_gpu_3d_test目录拷贝到 设备 中
4.5.14.3. 测试方法
渲染性能测试方法
接上
显示器 可以 看到 3D GPU 的 渲染 效果 程序
默认 使用 HDMI 显示 如果
切换 为 DSI,需要 修改 run.sh 脚本 中 的 命令 为: ./bin/glmark2 --data-path ./data -c DSI
执行 run.sh
cd glmark2 ./run.sh
打印
如下 结果:
Warning: DRM_CAP_ASYNC_PAGE_FLIP not supported, falling back to 'mailbox' mode for SwapInterval(0).
=======================================================
glmark2 2023.01
=======================================================
OpenGL Information
GL_VENDOR: Vivante Corporation
GL_RENDERER: Vivante GC8000L
GL_VERSION: OpenGL ES 3.1 V6.4.14.9.674707
Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=0 samples=0
Surface Size: 1920x1080 fullscreen
=======================================================
[build] use-vbo=false: FPS: 105 FrameTime: 9.588 ms
[build] use-vbo=true: FPS: 121 FrameTime: 8.324 ms
[texture] texture-filter=nearest: FPS: 121 FrameTime: 8.326 ms
[texture] texture-filter=linear: FPS: 121 FrameTime: 8.332 ms
[texture] texture-filter=mipmap: FPS: 121 FrameTime: 8.332 ms
[shading] shading=gouraud: FPS: 121 FrameTime: 8.325 ms
[shading] shading=blinn-phong-inf: FPS: 121 FrameTime: 8.333 ms
[shading] shading=phong: FPS: 120 FrameTime: 8.334 ms
[shading] shading=cel: FPS: 121 FrameTime: 8.332 ms
[bump] bump-render=high-poly: FPS: 121 FrameTime: 8.332 ms
[bump] bump-render=normals: FPS: 120 FrameTime: 8.334 ms
[bump] bump-render=height: FPS: 121 FrameTime: 8.332 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 91 FrameTime: 11.097 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 52 FrameTime: 19.438 ms
[pulsar] light=false:quads=5:texture=false: FPS: 120 FrameTime: 8.385 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 44 FrameTime: 23.077 ms
[desktop] effect=shadow:windows=4: FPS: 56 FrameTime: 18.121 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 60 FrameTime: 16.675 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 60 FrameTime: 16.670 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 90 FrameTime: 11.113 ms
[ideas] speed=duration: FPS: 73 FrameTime: 13.862 ms
[jellyfish] <default>: FPS: 91 FrameTime: 11.066 ms
[terrain] <default>: FPS: 10 FrameTime: 106.800 ms
[shadow] <default>: FPS: 120 FrameTime: 8.337 ms
[refract] <default>: FPS: 27 FrameTime: 37.329 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 121 FrameTime: 8.329 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 90 FrameTime: 11.122 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 120 FrameTime: 8.343 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 120 FrameTime: 8.336 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 105 FrameTime: 9.603 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 120 FrameTime: 8.337 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 120 FrameTime: 8.335 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 120 FrameTime: 8.345 ms
=======================================================
glmark2 Score: 97
=======================================================
计算性能测试方法
执行命令
cd clpeak ./clpeak
打印
如下 结果: root@buildroot:/userdata# ./clpeak Platform: Vivante OpenCL Platform Device: Vivante OpenCL Device GC8000L.6214.0148 Driver version : OpenCL 3.0 V6.4.14.9.674707 (Linux ARM64) Compute units : 1 Clock frequency : 996 MHz Global memory bandwidth (GBPS) float : 4.15 float2 : 7.60 float4 : 11.27 float8 : 10.08 float16 : 6.33 Single-precision compute (GFLOPS) float : 7.96 float2 : 15.86 float4 : 31.50 float8 : 31.20 float16 : 30.96 Half-precision compute (GFLOPS) half : 15.90 half2 : 31.65 half4 : 62.74 half8 : 62.14 half16 : 60.41 No double precision support! Skipped Integer compute (GIOPS) int : 7.96 int2 : 15.81 int4 : 15.75 int8 : 15.60 int16 : 15.51 Integer compute Fast 24bit (GIOPS) int : 7.96 int2 : 15.81 int4 : 15.75 int8 : 15.60 int16 : 15.51 Integer char (8bit) compute (GIOPS) char : 15.86 char2 : 31.31 char4 : 61.07 char8 : 59.73 char16 : 58.65 Integer short (16bit) compute (GIOPS) short : 15.86 short2 : 31.31 short4 : 61.07 short8 : 59.72 short16 : 58.65 Transfer bandwidth (GBPS) enqueueWriteBuffer : 2.30 enqueueReadBuffer : 1.39 enqueueWriteBuffer non-blocking : 4.40 enqueueReadBuffer non-blocking : 4.09 enqueueMapBuffer(for read) : 4260.88 memcpy from mapped ptr : 0.12 enqueueUnmap(after write) : 5390.27 memcpy to mapped ptr : 4.31 Kernel launch latency : 50.17 us
4.5.14.4. 测试指标
渲染性能指标
测试
一般渲染测试
| 测试 |
FPS | 说明 |
|---|---|---|
| use-vbo=false | 105 | 不 |
| use-vbo=true | 121 | 使用 VBO,减少 CPU-GPU 数据传输,提高 FPS |
| texture-filter=nearest/linear/mipmap | 121 | 纹理 |
| shading=gouraud/phong/blinn-phong-inf/cel | 120~121 | 着色器 |
| bump-render=high-poly/normals/height | 120~121 | 法线 |
复杂计算测试
| 测试 |
FPS | 说明 |
|---|---|---|
| effect2d(卷积 |
91 / 52 | 高斯 |
| desktop(窗口 |
44 / 56 | 复杂 UI 效果 |
| buffer(大规模 |
60 / 90 | 数据传输 |
| ideas(粒子系统) | 73 | 场景 |
| jellyfish(水母 |
91 | GPU 计算 |
| terrain(地形 |
10 | 地形 |
| refract(折射) | 27 | 折射 |
计算型测试
| 测试 |
FPS | 说明 |
|---|---|---|
| conditionals(分支 |
90~121 | GPU 执行 |
| function(复杂度 |
105~120 | 片段 |
| loop(循环 |
120 | GPU 执行 |
计算性能指标
内存带宽 (GBPS)
float : 4.15
float2 : 7.60
float4 : 11.27
float8 : 10.08
float16 : 6.33
内存
带宽 随 向量 大小 的 增加 先 提升 后 降低, float4 具有 最高 的 带宽 性能。 可能
受到 缓存 结构 或 内存 访问 模式 的 影响。
单精度计算性能 (GFLOPS)
float : 7.96
float2 : 15.86
float4 : 31.50
float8 : 31.20
float16 : 30.96
单精度
浮点 计算 性能 随 向量 大小 增加 而 增强,但 在 float8 及 以上 趋于稳定。 计算能力
较 低,可能 由于 GPU 计算 单元 较 少 ( 仅 1 个 Compute Unit)。
半精度计算性能 (GFLOPS)
half : 15.90
half2 : 31.65
half4 : 62.74
half8 : 62.14
half16 : 60.41
半
精度 计算 相比 单精度 计算 具有 更 高 的 GFLOPS,符合 预期。 在 AI 推理
等 应用 中,半 精度 计算 通常 被 用于 提升 吞吐量。
整数计算性能 (GIOPS)
int : 7.96
int2 : 15.81
int4 : 15.75
int8 : 15.60
int16 : 15.51
整数
计算 性能 与 单精度 浮点 计算 相似。 可能
受到 SIMD 计算 单元 和 缓存 架构 的 限制。
传输带宽 (GBPS)
enqueueWriteBuffer : 2.30
enqueueReadBuffer : 1.39
enqueueWriteBuffer non-blocking : 4.40
enqueueReadBuffer non-blocking : 4.09
enqueueMapBuffer(for read) : 4260.88
memcpy from mapped ptr : 0.12
enqueueUnmap(after write) : 5390.27
memcpy to mapped ptr : 4.31
显存
访问 效率 较 低 (enqueueWriteBuffer 仅 2.30 GBPS)。 非
阻塞 传输 相比 阻塞 传输 提升 显著,建议 优化 数据传输 策略。 Map/Unmap 机制
速度 极快,但 memcpy 受 CPU 性能 影响,实际 吞吐 较 低。
Kernel 启动延迟
Kernel launch latency : 50.17 us
Kernel 启动
延迟 较 高,可能 受 驱动 调度 或 OpenCL 运行 时 影响。 对
实时 计算 应用 ( 如 计算机 视觉 ) 可能 造成 性能 瓶颈,建议 减少 Kernel 调用 次数。
4.5.14.5. 常见问题
执行
渲染 性能 测试 时,执行 失败
问题
描述:错误 日志 如下
glmark2# ./run.sh
start insmod display module related drivers ...
Opened DRM module 'vs-drm'
Error: Failed to find a suitable connector
Error: main: Could not initialize canvas
./run.sh: line 13: 1482 Segmentation fault (core dumped) ./bin/glmark2 --data-path ./data
问题
分析:没有 找到 合适 的 显示器 的 连接器 解决办法:接上 HDMI 显示器
或 DSI 显示器