如何评估移动GPU性能:以及4个需要了解的Android GPU 本地性能测试工具
众所周知,Android终端基本都配有GPU;无论手机还是VR,AR设备,GPU在其中扮演了越来越重要的地位。
当我们拿到一款GPU时,我们最关心的就是性能了。
不服跑个分。跑分是目前最常见的测试性能的方式。
1)我们最熟悉的GPU benchmark测试就是曼哈顿3.0\3.1测试了;
2)安兔兔的3D测试也是一个不错的例子,但是注意应用版本,不同版本总分是不同的。
可以说这个方法基本还是可靠的,但是缺点也是存在的:
1)GPU Benchmark的测试会尽量排除CPU带来的影响,但实际游戏中很可能并非如此,因此跑分与实际的运行环境表现迥异。另外与台式机不同,台式机中显卡游戏测试比较成熟,3A大作中耗CPU的,耗GPU的,耗RAM的都能找到一堆。但Android生态上就很难找到类似场景;(这个问题不在这篇文章讨论,会在后续文章中介绍)
2)在了解了具体参数之后,我们希望在本地能验证一下GPU具体的性能。可惜曼哈顿虽好,但是要翻墙,对于我们本地测试就非常麻烦。安兔兔负载不均衡,可能并不适合单一场景下的帧率和功耗测试;最重要的,如果GPU能力不强,比如高通8909平台,则安兔兔则可能仅有2,3帧的样子,根本无法有效测试正常场景下的表现。
基于上面的考虑,我们接下来介绍4个简单的Android GPU本地性能测试工具。
1. GPU渲染评估初期本地测试:Flatland**
在最初选定设备时(例如使用不成熟的驱动程序时),使用预定义(固定)的时钟和工作负载来测量每秒渲染的帧数 (fps)。这可以让我们清楚地了解硬件功能。
为了在规格设计阶段便于推究设备性能,可使用Flatland 工具。Flatland 依靠固定时钟,并显示可通过基于合成的工作负载实现的吞吐量。Flatland 使用 gralloc 缓冲区来模拟多窗口情景,用 GL 填充窗口,然后测量合成情况。
8909 vs 18xx测试结果分析:(提高GPU频率结果相当,因为GPU大部分情况是在高频跑的),可见8909仅适用于720P大小 ,而18xx可最大适用于1080P大小(尽管在SurfaceView->Home仍可能会有一点超时)。测试阶段为渲染,和合成无关,对于1881甚至必须关屏测试。
https://source.android.com/devices/graphics/implement
2. GPU合成评估本地测试:SurfaceComposition
绘制完成之后,我们也要考虑合成的情况,尽管我们一般采用HWC合成,但是GPU合成在某些场景下仍然是不可避免的。(但这一步的重要性低于flatten)
路径:android/frameworks/base/tests/SurfaceComposition
功能:测试保证在58fps以内的最大合成Surface的数量(格式可选)。
命令:手动打开应用测试或者使用cts测试方式
am instrument -w -r android.surfacecomposition/android.test.InstrumentationTestRunner
结果:
INSTRUMENTATION_STATUS: surface-allocation-performance-median-sps=112.55279399895551
INSTRUMENTATION_STATUS: surface-compoistion-bandwidth-gbps=0.9486905799147451
INSTRUMENTATION_STATUS: surface-compoistion-peformance-sps=4.7642438127286955
这次是测试通过的结果,代表可支持4.76层RGBA的合成(58fps以上),带宽0.94Gb/s
评估阶段结束,我们进入开发阶段。
3. OpenGLES 本地测试:fillrate、angeles、gl2_basic gl2_yuv
fillrate
比较简单,就是循环绘制draw的命令,迭代多次分别绘制1次,2次…32次的吞吐量,可测试GPU是否带起成功。gl2_basic
非常简单,就是循环绘制一个三角形,60fps, Malit82x大约156M下46%的GPU利用率。因为负载比较均衡,因此可用于测试GPU功耗问题。angeles
以50fps的帧率,malit82x下624M下81-90%的利用率。
负载不均衡,可在一定程度上进行压力测试,但没有deqp中压力测试效果好,因此其可以实现624M下GPU利用率99%-100%gl2_yuv
另外一个常用case,可用于测试YUV数据显示于屏幕之上,NV12各种格式测试,这个场景应用非常多,我将在另外一篇文章中单独介绍。
4. GPU API测试工具(同时支持压力测试):DEQP
如果我们是OEM厂商,则我们同时还要关注GPU的兼容性与稳定性。这就需要Deqp模块了。(CTS也会测试相应API)
Deqp支持LINUX,WINDOW,ANDROID等平台,该文档仅介绍Android平台,具体可见下面链接:https://source.android.com/devices/graphics/testing
编译
目录:external/deqp
编译:mma –j12
环境准备:
安装APK:
adb –d install –r com.drawelements.deqp.apk
运行测试
准备:
adb –d forward tcp:50016 tcp:50016
adb –d shell am start –n com.drawelements.deqp/.execserver.ServiceStarter执行测试:
1)测试全部GLES2的API
am start -n com.drawelements.deqp/android.app.NativeActivity -e cmdLine “deqp --deqp-case=dEQP-GLES2.* --deqp-log-filename=/sdcard/dEQP-Log.qpa --deqp-crashhandler=enable --deqp-watchdog=enable --deqp-gl-config-name=rgba8888d24s8”
2)压力测试:–deqp-test-iteration-count可以修改,GPU利用率可达99-100%
am start -n com.drawelements.deqp/android.app.NativeActivity -e cmdLine “deqp --deqp-case=dEQP-GLES2.stress.long.* --deqp-log-filename=/sdcard/dEQP-stress.qpa --deqp-watchdog=disable --deqp-gl-config-name=rgba8888d24s8 --deqp-test-iteration-count=500”
3)旋转屏幕测试
增加 --deqp-screen-rotation=90
结果分析
目前结果是文本文档,转换成csv或html格式需要编译linux或window版本。但仍然还可以分析一下结果。
• 通过可包括 Pass、NotSupported、QualityWarning 和 CompatibilityWarning。
• 失败可包括 Fail、ResourceError、Crash、Timeout 和 InternalError。
综上,如果你是OEM厂商,这些工具都会对你有帮助。如果你是终端厂商且GPU能力较强,则只有第3个工具对你有用,毕竟其他你也不用关心,如果GPU能力差些,则1, 2,3都会对你有所帮助。
如何评估移动GPU性能:以及4个需要了解的Android GPU 本地性能测试工具相关推荐
- linux硬件性能,Linux运维知识:Linux下的硬件性能测试工具汇总
本文主要向大家介绍了Linux运维知识的Linux下的硬件性能测试工具汇总,通过具体的内容向大家展现,希望对的大家学习Linux运维知识有所帮助. 在购买计算机之后,我们都希望能充分了解它们的硬件性能 ...
- iPhone 6s GPU性能为何能够有大幅提升
摘要: 今年在iPhone 6s的A9芯片中苹果公司仍然非常重视提高GPU性能,而且和上一代相比A9的GPU性能确实提升不少.从第一代iPhone 还有它们使用的三星开发的SoC来看,可以说苹果公司简 ...
- 手机GPU性能评估指标
评价指标:单位时间计算浮点数 浮点类型 FP16 FP32 FP64 浮点数计算速度GFps指标 一般默认是32位浮点数 单位 gfps 每秒计算10亿次浮点数 tfps 每秒计算1万亿次浮点数 一些 ...
- Mali GPU性能调优方法
http://blog.csdn.net/MyArrow/article/details/17752101 1. 使用DS-5 Streamline定位瓶颈 DS-5 Streamline要求GPU驱 ...
- 【体系结构】使用Roofline model 分析GPU性能
Roofline model 评估深度学习模型在GPU上运行的性能 本文使用Roofline model方式评估GeForce RTX 2060和TITAN V两款GPU上分别运行AlexNet以及V ...
- GPU性能优化之CUDA调优指南
GPU性能优化之CUDA调优指南 GPU性能优化之CUDA调优指南 1 整体性能优化策略 2 最大化利用率 2.1 应用程序层次 2.2 设备层次 2.3 多处理器层次 2.3.1 占用率计算 3 最 ...
- R语言使用randomForest包构建随机森林模型(Random forests)、使用importance函数查看特征重要度、使用table函数计算混淆矩阵评估分类模型性能、包外错误估计OOB
R语言使用randomForest包中的randomForest函数构建随机森林模型(Random forests).使用importance函数查看特征重要度.使用table函数计算混淆矩阵评估分类 ...
- R语言使用rpart包构建决策树模型、使用prune函数进行树的剪枝、交叉验证预防过拟合、plotcp可视化复杂度、rpart.plot包可视化决策树、使用table函数计算混淆矩阵评估分类模型性能
R语言使用rpart包构建决策树模型.使用prune函数进行树的剪枝.使用10折交叉验证选择预测误差最低的树来预防过拟合.plotcp可视化决策树复杂度.rpart.plot包可视化最终决策树.使用t ...
- R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能
R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型(Logistic regression).分类预测器(分类变量)被自动替换为一组虚拟编码变量.summary函数查看检查模型.使用t ...
最新文章
- 一个三本程序猿的大厂逆袭之路
- 为物联网产业化发展提供坚实保障
- Python入门100题 | 第072题
- 『数据中心』降低PUE值4种方法
- Git无法检测到文件名大小写的更改
- git只提交一张图片_Git 图形化操作之合并提交记录
- 罗斯文2007(Northwind 2007)数据库、Access 2007 样列数据库分析[转]
- android中如何通过代码检测是否有root权限?
- openstack_Facebook的WebScaleSQL,思科投资OpenStack等
- 免费下载pro puppet 2高清pdf,需要的抓紧
- ASP.NET MVC4 IN ACTION学习笔记-第六波[Ajax in ASP.NET MVC][3/3]
- arduino交通灯编程代码_Arduino初初教程3 (交通灯)
- flame linux mac,Autodesk版蓝宝石插件 GenArts Sapphire V10.0 (Mac/Linux)
- Fragment、FragmentActivity、Fragment生命周期及Fragment组件穿透
- 腾讯云数据库TDSQL——数据库迁移备份与恢复
- 浙江海洋大学计算机考研资料汇总
- 百度hacked事件看谷歌real-time search
- 二维码(生成以及扫一扫)
- 安卓手机去水印哪个好用
- 解决Win10桌面右键卡顿一直转圈圈的问题