Adreno Profiler分析高通GPU上Shader性能

时间:2024-04-05 16:28:00

    前面的文章有所过在Mali的GPU上采用DS-5 Streamline分析Shader在Mali T860上的执行性能。现在遇到一个问题在高通GPU上GLSL 从ES2.0升级到ES3.0以后就出现Shader性能的明显下降。在高通GPU上选择Adreno Profiler作为性能分析工具。

环境配置:

    下载地址:https://developer.qualcomm.com/software/adreno-gpu-profiler/tools

连接终端:

    确保adb可以正确connect上设备以后,点击Adreno Profilter左上角Connect按钮,运行待测试的目标应用程序。Connect对话框将出现如下状态:

Adreno Profiler分析高通GPU上Shader性能

    选择目标应用,进行Connect连接。

分析Shader:

    由于我们是要进行Shader的性能分析,因此是把目标机器作为一个Online的Compiler,高通没有提供类似ARM malisc那样的Offline Compiler,因此目前情况下必须通过Adreno Profiler连接真机作为Compiler。

Adreno Profiler分析高通GPU上Shader性能

    确保应用程序GPU在运行状态,点击Shader Analyzer,输入Vertex和Fragment Shader代码,代码下方就会列出当前Shader运行在目标机器上所需要的指令执行情况。

OpenGLES2.0 Vs OpenGLES3.0:

    由于ES3.0由于texelFetch可以直接采用目标x,y坐标取纹理操作,不用归一化到0.0-1.0的scale区间,因此可以避免大图像下去纹理的浮点数失真导致的误差。理论上也可以减少一次归一化的乘法操作。然而运行以后发现在高通的GPU上性能不升反降了。采用如上方法分析指令如下:

ES2.0:

Adreno Profiler分析高通GPU上Shader性能

ES3.0:

Adreno Profiler分析高通GPU上Shader性能

   分析发现在ES3.0上总体指令数量较ES2.0少了3个,算术ALU指令出现明显减少,和预期一致。但是No-Op Instructions出现明显增多。