首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程
1. 使用DS-5 Streamline定位瓶颈
DS-5 Streamline要求GPU驱动启用性能测试,在Mali GPU驱动中激活性能测试对性能影响微不足道。
1.1 DS-5 Streamline简介
可使用DS-5 Streamline从CPU和Mali GPU中实时收集性能计数器,然后以图形方式显示这些计数器,其主要功能如下:
• 收集计数器--从CPU和Mali GPU中
• 保存收集到的计数器数据以供回放
• 查看显示GPU活动、GPU活动和Framebuffer变化的时间线
• 以图形或表格的方式显示指定的性能计数器的值
• 观察计数器值如何变化
• 评估每一帧的性能
• 查看处理器活动的图表
• 查看堆栈跟踪
• 查看应用程序分析(Profiling)
1.2 DS-5 Streamline分析图
1) 查看下面三个图:
• GPU Vertex activity.
• GPU Fragment activity.
• <Application processor> Instruction: Executed.
2) 分析图
• 寻找具有最高和最长图形的处理器,它的使用最多;
• 如果很难找到占用太多时间的单个处理器,则问题可能在于带宽过度使用或图形管理被阻塞;
• 如果找到占用太多时间的处理器,则采取更多测量以隔离此问题;
• 如果所有图形都很忙,则应用程序充分利用了Mali GPU。
2. 通过比较定位问题区域
可以通过以下比较来定位问题区域:• 修改分辨率
修改分辨率,然后测试帧率变化:
如果分辨率增加,而FPS下降(即分辨率增加为原来的2倍,则FPS下降为原来的1/2),则FP或带宽是性能的瓶颈;
如果FPS不随着分辨率的变化而变化,则CPU或VP是性能的瓶颈。
• 改变纹理大小
逐步减小纹理的大小,如果帧率增加,且纹理Cache命中率太低:则表明纹理太大,带宽是性能的瓶颈。
• 减少Shader的长度
如果Shader太长,它将降低帧率,深度缩短Shader并进行测试。
注:如果分辨率或FPS加倍,则FP可得到的cycles减半。
• 使用空的Fragment Shder
一个null shader什么都不做。如果使用null shader,性能快速上升,则表明Fragment Shader或带宽是性能瓶颈。
• 改变顶点数
如果减少顶点数,则FPS上升,则表明顶点数过多或带宽是性能瓶颈。
• 改变纹理位深度
当减少纹理深度时,如果FPS上升,则表明内存带宽是性能的瓶颈。
• 改变Drawing Surface位深度
当降低surface位深度,如果FPS上升,则表明内存带宽是性能的瓶颈。
• 减少draw调用
优化应用程序以减少draw调用,观察性能变化。
• 减少状态变化
优化应用程序以减少状态变化,观察性能变化。
3. 隔离具体的问题区域
当定位到问题区域之后,下一步就是找到瓶颈的具体原因。其方法如下:3.1 应用处理器(CPU)限制了应用性能
• 应用逻辑复杂导致性能问题如果删除draw调用和eglSwapBuffers之后,性能变化很少或没有变化,则表明瓶颈在应用逻辑,可通过OProfile来进行分析,它可区分用户态和Kernel态瓶颈问题。
• 驱动超负荷导致性能问题
如果低分辨率输出表明瓶颈在于CPU,且应用逻辑没有问题,则问题可能在于调用OpenGL ES API的方式:
1) 太多的draw调用
2) 太多的状态变化
3) 管道被阻塞
• 应用程序逻辑与驱动超负荷共同导致了性能问题
可通过DS-5或OProfile分析问题的根源所在。
3.2 顶点处理器(VP)限制了应用性能
如果顶点处理器限制了应用性能,问题可能在于以下方面:• 太多的顶点
• Vertex Shader太长
• Vertex SHader太复杂
• 三角形设置时间过长
• 多边形列生成器单元时间过长(PLBU: Polygon List Builder Unit)
3.3 像素处理器(FP)限制了应用性能
如果像素处理器(FP)限制了应用性能,则问题可能在以下方面1) 瓶颈:像素处理器(Fragment Processing)
• 过多的draw调用
•