GPU Performance Testing

Background

In today's digital era, graphics processing capability has become one of the key metrics for evaluating the performance of the single-board computer. QuecPi Alpha, equipped with Qualcomm's Adreno 642L/643 GPU, demonstrates remarkable prowess in graphics processing. Imagine a smart traffic scenario where the QuecPi Alpha leverages its powerful GPU to rapidly and accurately identify and annotate target objects such as vehicles, license plates, and pedestrians, providing real-time and precise data for traffic management. In intelligent security applications, it can utilize the GPU's exceptional computational power to swiftly perform image recognition and analysis on complex surveillance footage, identifying potential risks in real time. Behind this efficient and precise graphics processing lies the QuecPi Alpha's robust GPU performance. It not only handles everyday multimedia tasks with ease but also excels in demanding applications requiring high-performance graphics computing. Here below is the evaluation of QuecPi Alpha's graphics rendering performance using the glmark2 benchmarking tool.

glmark2 is an open-source OpenGL ES and EGL benchmarking testing tool designed to assess device graphics rendering performance. It runs a series of standardized test scenarios (e.g., texture filling, lighting calculations, pixel processing) to quantify GPU metrics such as frame rate (FPS), latency (FrameTime), and stability. It is suitable for performance analysis and optimization on embedded devices, smartphones, and development boards.

Test Environment

glmark2 is integrated and installed in the system image by default. Entering the device terminal will test the GPU performance directly.

  • Prepare a display and connect it to QuecPi Alpha.

Execute Commands

  • Run the following command in the terminal to ensure results are displayed on the connected display:
    export XDG_RUNTIME_DIR=/dev/socket/weston && export WAYLAND_DISPLAY=wayland-1
    
  • Execute the glmark2 command to test graphics rendering performance:
    glmark2-es2-wayland
    

Test Results

QUALCOMM build                   : a4d6ce04e1, I363e8f8d61
Build Config                     : G ESX_C_COMPILER_OPT 4.4.0 AArch64
Driver Path                      : /usr/lib/libGLESv2_adreno.so
Driver Version                   : 0808.0
Process Name                     : glmark2-es2-wayland
GBM_INFO::msmgbm_mapper(262)::gbm mapper instantiated

gbm_create_device(224): Info: backend name is: msm_drm
PFP: 0x016dc112, ME: 0x00000000
I/Adreno-UNKNOWN (1382,1382): <ReadGpuID:1042>: Reading chip ID through GSL
Pre-rotation disabled !!!

EGL updater thread started

=======================================================
    glmark2 2021.12
=======================================================
    OpenGL Information
    GL_VENDOR:     Qualcomm
    GL_RENDERER:   Adreno (TM) 643
    GL_VERSION:    OpenGL ES 3.2
=======================================================
[build] use-vbo=false: FPS: 516 FrameTime: 1.938 ms
[build] use-vbo=true: FPS: 679 FrameTime: 1.473 ms
[texture] texture-filter=nearest: FPS: 748 FrameTime: 1.337 ms
[texture] texture-filter=linear: FPS: 722 FrameTime: 1.385 ms
[texture] texture-filter=mipmap: FPS: 231 FrameTime: 4.329 ms
[shading] shading=gouraud: FPS: 220 FrameTime: 4.545 ms
[shading] shading=blinn-phong-inf: FPS: 679 FrameTime: 1.473 ms
[shading] shading=phong: FPS: 221 FrameTime: 4.525 ms
[shading] shading=cel: FPS: 688 FrameTime: 1.453 ms
[bump] bump-render=high-poly: FPS: 693 FrameTime: 1.443 ms
[bump] bump-render=normals:[  606.705365][  T943] smcinvoke: process_accept_req: Setting pid:943, server id : 23 state to defunct
[  606.714752][  T944] smcinvoke: process_accept_req: Setting pid:944, server id : 23 state to defunct
[  606.724315][  T945] smcinvoke: process_accept_req: Setting pid:945, server id : 23 state to defunct
[  606.734878][  T946] smcinvoke: process_accept_req: Setting pid:946, server id : 23 state to defunct
[  606.751381][  T943] smcinvoke: process_tzcb_req: server is defunct, state= 1 tzhandle = -2147483625
[  606.760794][  T943] smcinvoke: process_tzcb_req: server invalid, res: -90
 FPS: 714 FrameTime: 1.401 ms
[bump] bump-render=height: FPS: 674 FrameTime: 1.484 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 373 FrameTime: 2.681 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 251 FrameTime: 3.984 ms
[pulsar] light=false:quads=5:texture=false: FPS: 213 FrameTime: 4.695 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 559 FrameTime: 1.789 ms
[desktop] effect=shadow:windows=4: FPS: 466 FrameTime: 2.146 ms
Error: Requested MapBuffer VBO update method but GL_OES_mapbuffer is not supported!
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: Unsupported
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 238 FrameTime: 4.202 ms
Error: Requested MapBuffer VBO update method but GL_OES_mapbuffer is not supported!
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: Unsupported
[ideas] speed=duration: FPS: 578 FrameTime: 1.730 ms
[jellyfish] <default>: FPS: 642 FrameTime: 1.558 ms
[terrain] <default>: FPS: 74 FrameTime: 13.514 ms
[shadow] <default>: FPS: 527 FrameTime: 1.898 ms
[refract] <default>: FPS: 418 FrameTime: 2.392 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 679 FrameTime: 1.473 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 686 FrameTime: 1.458 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 230 FrameTime: 4.348 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 680 FrameTime: 1.471 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 693 FrameTime: 1.443 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 691 FrameTime: 1.447 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 240 FrameTime: 4.167 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 685 FrameTime: 1.460 ms
=======================================================
                                  glmark2 Score: 506
=======================================================

EGL updater thread exited

Performance Analysis

The glmark2 benchmarking testing report indicates strong OpenGL ES graphics performance of QuecPi Alpha , with a final score of 506.

Key Performance Highlights

  1. VBO (Vertex Buffer Object) Optimization:

    • use-vbo=false → 516 FPS
    • use-vbo=true → 679 FPS (31.6% improvement)

    Conclusion: Enabling VBO significantly enhances rendering efficiency by reducing CPU-GPU data transfer overhead.

  2. Texture Filtering Mode:

    • Nearest → 748 FPS (fastest)
    • Linear → 722 FPS (minor performance drop)
    • Mipmap → 231 FPS (69% performance degradation)

    Conclusion: Mipmap causes a significant drop in frame rate due to additional computational overhead, making it suitable for high-quality textures but at a significant performance cost.

  3. Shading Mode:

    • Blinn-phong-inf (optimized blinn-phong) → 679 FPS
    • Cel (toon shading) → 688 FPS
    • Phong/Gouraud (traditional mode) → ~220 FPS (lowest performance)

    Conclusion: Modern shaders (e.g., blinn-phong-inf) outperform traditional mode (e.g., Phong) in efficiency.