前面的文章有所过在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对话框将出现如下状态:
选择目标应用,进行Connect连接。
分析Shader:
由于我们是要进行Shader的性能分析,因此是把目标机器作为一个Online的Compiler,高通没有提供类似ARM malisc那样的Offline Compiler,因此目前情况下必须通过Adreno Profiler连接真机作为Compiler。
确保应用程序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:
ES3.0:
分析发现在ES3.0上总体指令数量较ES2.0少了3个,算术ALU指令出现明显减少,和预期一致。但是No-Op Instructions出现明显增多。