【转自:http://tieba.baidu.com/p/1966590296?from=prin】

1. 都是测GPU的

2. 恩 确实比较奇怪,但也不奇怪
http://www.anandtech.com/pipeline/  
比较SGX540和Mali-400也是,Mali-400在lowlevel测试(填充率,三角形输出)里都落后,但在Egypt HD反超不少

一方面,SGX系列lowlevel测试高,我觉得有它TBDR架构的关系

另一方面,我们看整个渲染的过程……

三角形Setup-->vertex shader计算-->rasterization(光栅化)-->pixel shader(fragment)计算-->后端处理输出
当然中间很多部分都跟贴图/纹理 有关

Fillrate(填充率)理论测试
测的就是这个
三角形Setup-->vertex shader计算-->rasterization(光栅化)-->pixel shader(fragment)计算--> 后端处理输出

三角形输出测试,测的
三角形Setup -->vertex shader计算-->rasterization(光栅化)-->pixel shader(fragment)计算-->后端处理输出

然后三角形测试,vertex lit,测得这个
三角形Setup-->vertex shader计算 -->rasterization(光栅化)-->pixel shader(fragment)计算-->后端处理输出

然后三角形输出,fragment lit,测得这个
三角形Setup -->vertex shader计算-->rasterization(光栅化)--> pixel shader(fragment) 计 -->后端处理输出

一些GPU这部分理论性能测试低,很可能都是在这一步造成的瓶颈:
三角形Setup -->vertex shader计算-->rasterization(光栅化)-->pixel shader(fragment)计算-->后端处理输出

也就是三角形的setup能力在理论测试中不足,所以后面再nb也高不到哪去:
典型的就是Mali-400了

但实际表现是另一回事了……实际场景,如Egypt HD,大部分都是考验shader计算能力的
(特效啊什么的,都是靠shader计算出来的)所以实际压力的大是这两部分
三角形Setup--> vertex shader计算 -->rasterization(光栅化)--> pixel shader(fragment)计算 -->后端处理输出

而一般情况下,光影等等效果, 更加吃pixel shader (记得末代DX9 Radeon X1000系列的3:1架构吧,疯狂增加pixel ALU), 所以实际瓶颈往往是:
三角形Setup-->vertex shader计算-->rasterization(光栅化)--> pixel shader(fragment)计算- ->后端处理输出

--
So,这时候拥有大量shader计算资源的Mali,Adreno就会相对nb了:
所以shader计算能力约40GFlops的Adreno 320干掉约30GFLops的543MP4,并没有悬念(当然差距很小,因为543MP4有TBDR支持,可以减少些计算量)
同样,~20GFlops的Mali-400干掉12GFlops的SGX540也是在意料之中的
参考: http://tieba.baidu.com/p/1815909366

shader的GFLOPS,反映了GPU的计算能力

桌面显卡,现在好多都拼GFLOPS。而移动GPU,标称三角形生成率和填充率,实际上是过时的算法。加上各家的三角形生成率和填充率的计算法则(或测试规范)并不一致,实际上不见得特别靠谱。
比如,PowerVR SGX(540/543),200MHz的真实填充率是400Mpix/s,但因为PVR特有的TBDR技术(下文说),可以不渲染被遮挡的部分,所以减轻了工作量,IMGtec按照2.5X的系数算,认为等效1000Mpix/s,所以标称为1Gpix/s的填充率
而其他家的最大填充率,也只是生成“无色点”的能力,例如Mali-400 MP4,275MHz下1.1G的填充率,是指输出1.1G的无色点。实际应用中,大家不可能都去玩无色点的,肯定有shader的渲染计算,以及纹理贴图,此时,是绝对达不到标称值的。
而实际的表现,又会跟很多因素相关。

3.1 Vec4如果遇到非4个一组的操作,比如x.rgb + y.rgb这种Vec3的计算,那么一部分性能就相当于浪费了
如果碰到scalar(标量)的计算,比如p.r + q.r,那么浪费的更多
有时候将vec4设计成vec3+1的结构,那么上述的2个计算可以在一个周期内完成,也就是所谓的co-issue(双发射)

3.2 计算精度问题
最常见的,是FP32,32bit的单精度
更高的,有FP64,64bit的双精度,不过图像处理一般用不到,把GPU当科学计算工具使才会用到吧。。。
严格的说,只有FP32和FP64的操作,才能算FLOPS

不过在图形计算中,还有更低精度的,如
FP16,16bit,半精度
FX10,10bit,都不是浮点,而是定点数了

3.3 各家的GPU的shader支持的计算精度

3.3.1 PowerVR SGX系列
USSE:SGX530/535/540用的,结构就像上面说的,是vec4,也就是4-wide SIMD
(实际上好像是vec4+scalar,只是后面的scalar单元用于一些特殊函数的计算,比如三角函数啊,对数啊,并且scalar和vec4不能并发,所以一般只算前面vec4的计算能力了)

USSE一个周期,可以对
4个FX10 或者 2个FP16 或者 1个FP32 进行MADD操作

所以,一个USSE单元,工作在200MHz下时,其GFLOPS为
4×200×2 = 1.6GFLOPS
一个SGX540含有4个USSE,那么200MHz的SGX540(蜂鸟),其计算性能为6.4GFLOPS
但严格的说,这并不确切,因为这是按照FX10精度计算的。
如果是FP32精度,那么要除以4,只剩下1.6GFLOPS了。
不过无所谓,如果游戏里,设置为低精度,按照FX10渲染,那么SGX540就牛b轰轰的了(降低精度你也不见得能看出啥,没记错的话,DX8就是FX10精度的,8.1到FX12,DX9开始要求FP24)

所以:SGX530/535 2USSE
SGX540 4USSE 大家自己算吧
-----
USSE2: SGX543/544
USSE2做了一些改进,号称能co-issue,但我并不清楚这个co-issue跟我3.1里说的是否一样。有资料称USSE2的GFLOPS性能是USSE的2倍。IMGtec官方称在侧重shader计算的测试里,采用USSE2GPU能比采用USSE的GPU快40%。
同样,USSE2对应的高/中/低精度为 FP32/FP16/FX10
按照FX10算,200MHz的USSE2,计算能力为3.2GFLOPS
FP16则为1/2, FP32则为1/4

单个543/544含有4个USSE2
所以,一个200MHz的543MP2,FX10计算能力为2×12.8GFLOPS=25.6GFLOPS

3.3.2 喜闻乐见的Adreno系列
类似于PowerVR SGX,其单个计算单元,同样采用vec4+1的架构,当然那1个也是拿来做specialfunction的貌似,所以算前面的vec4,能力是一样的。

但不同的是,Adreno系列只支持FP32计算,即高/中/低精度,全部用FP32精度进行计算,所以可以说,计算能力是实打实的GFLOPS吧。

Adreno 200, 2Vec4 + 1TMU, 133MHz,2.1GFLOPS
Adreno 205, 4Vec4 + 1TMU, 266MHz,8.5GFLOPS 
Adreno 220, 8Vec4 + 2TMU, 266MHz,17GFLOPS 
Adreno 225, 8Vec4 + 2TMU, 400MHz,25.6GFLOPS 
Adreno 320, 目测16vec4 + 4TMU, 如果500MHz的话,就是51GFLOPS

3.3.3 Vivante的GC系列
跟Adreno差不多,也是vec4 SIMD,同样只支持FP32精度
不过Vivante这货的特点是跑高频。。。所以他们一直鼓吹同样的性能,面积最小
所以
RK29的GC800, 1Vec4, 450MHz,3.6GFLOPS
飞思卡尔i.MX6的GC2000, 4Vec4,~600MHz,19.2GFLOPS
华为海思K3V2,GC4000+(或者叫GC6000?),8Vec4,680MHz, 43.5GFLOPS

3.3.4 Mali系列
因为T系列还没产品上市。。。所以说说Mali-400吧
Mali-400并非Unified Shader,是顶点和像素处理分开的
一个顶点处理器包含一个Vertex shader ,vec4,支持FP32精度
一个像素处理器包含一个vec4的pixel shader,以及一个TMU, shader支持FP16精度

所以,一个Mali-400“单核”,400MHz下,计算能力为6.4GFLOPS
如果是MP4,266MHz,则为10.6GFLOPS
MP4, 400MHz,则为16GFLOPS

3.3.5 GeForce ULP
GeForce ULP的vertex shader和pixel shader都是scalar的,并非vec4
顶点支持FP32精度,像素部分支持FP20和FX10精度

所以,“8核”tegra 2, 300MHz,计算能力为4.8GFLOPS
“12核”Terga3, 600MHz,计算能力为14.4GFLOPS

之后说一下,GPU架构 和 纹理格式

4.1 架构,或者说是渲染模式

4.1.1 Imgtec,PowerVR系列,TBDR(TileBasedDeferred Rendering)
特点: 分块,把画面分成小块,这样可以在片上的高速缓存里处理
HSR(Hidden Surface Removal),有专有的硬件单元,在筛掉图像中被遮挡的部分后,才进行光栅化,这样被遮挡的部分就不用被渲染了。节省了计算资源(shader)和带宽(纹理拾取)。
看着非常雕的样子,确实很牛x,imgtec认为能提供等效2.5X的能力(一般按照3的overdraw算到话。。。其实想想也是,场景中被遮挡的看不到的部分太多了。。)不过场景非常复杂时,就容易撑爆管线或者cache,就sb掉了,另外做alphatest的代价也很大(碰到一堆半透明的玩意就哭了,测试代价很大)
不过现在的PowerVR都太牛x了,貌似还没被撑爆过。。。(或者说高压力下会悲剧?谁拿个SGX530跑1080p Glbenchmark 2.5试试?)

4.1.2 Mali/ Adreno, Tiled Based Rendering
这俩也是分块渲染的,同样把画面切成小块,丢到片上高速存储里渲染,不同的是没有HSR功能
不过,还是支持些early-z的测试,减少overdraw(具体我就说不清了,自己还没吃透)

但区别是,Mali和SGX的“块”比较小,一般是16×16这样的

而Adreno的“块”很大。。。以256K为单位,确切的说,大部分的Adreno都带有256K的缓存,画面以这个大小为单位进行渲染

就像上下这两种区别:

不过,新一代的Adreno 3xx,除去tiled渲染,也开始支持传统的渲染方式(IMR,见下)

4.1.3 IMR,immediate mode rendering,或者说是传统的渲染方式
主要是Tegra的GeForce ULP和Vivante的GC系列了
桌面显卡也基本采用这种模式…… 大概就是抓的啥渲染啥了。。。orz……

不过还是会做Z-culling,不过和SGX的deffered rendering还是有区别的(具体。。太专业了)

貌似Adreno的这种大块渲染,比较脆弱,容易sb掉(到底是为什么我也不知道。。。传说的)
所以Adreno 3xx开始增加IMR模式的支持了。

5. 纹理格式
5.1 ETC1
OPENGL ES2.0的支持纹理格式,大家都得支持。但是这个不太给力,竟然不支持alpha通道,所以如果要有alpha通道的纹理,就要读取2次:第一次读rgb,第二次读alpha…… 这样带宽占用就2倍了去:
但偏偏Mali-400这货只支持ETC1,如果为了通用,让SGX/Adreno/GeForce跟着Mali一起读两次,可是大大吃亏了
Mali-400 MP4: 反正哥有4个TMU,给哥充足的带宽,多读就多读吧!
Adreno 220:一堆shader+2个TMU的,压力巨大。。
SGX543:虽然2个TMU,不过哥有defferred rendering,看不到的地方可以不渲染不读纹理。。。

所以GL ES 3.0开始推ETC2了,支持alpha通道,貌似压缩比也牛b了不少

5.2 PVRTC(powerVR的) ATC(Adreno的),都支持alpha通道,读一次就够了,压缩比也不错。遇到自家格式,SGX和Adreno自然会很爽。

5.3 DXT(1/2/3/4/5),DirectX的纹理格式,GeForce ULP,Vivante GC,和ZMS 支持
也支持alpha通道。

--
不过实际上呢,对于纹理的处理,不同的GPU也不太一样
比如PvowerVR,对于一个tile里同样的纹理,只要读一次就可以了
而Mali就需要用几次读几次
这方面又会导致带宽消耗的差别

所以总的来说,不同的GPU有不同的侧重点
比如PowerVR,特别的TBDR架构,不渲染被遮挡的部分,有效节省计算资源和带宽
但是说在32bit计算精度下的绝对性能呢,其实并不高
如果跑FX10的低精度渲染,就很吃香

Adreno呢,shader资源丰富,计算能力强劲,但是只有2个可怜的TMU,纹理拾取的能力不够,而且架构上说是不是很健康。。。驱动也渣渣

Mali呢,不是统一渲染架构,计算能力也一般,但TMU多,4个,跟543MP2一样了,贴起图来应该嗷嗷的

最后呢,如果大量的shader计算,shader成为瓶颈的时候,adreno就突出了。而遇到大量贴图的时候,Mali可能吃香点。当然SGX什么的,各种情况下适应能力都挺强。。。要么来个复杂场景+强制FP32精度渲染。。。

典型的比如创新Zii的Mandelmark,就是完全利用pixel shader做计算,并且强制高精度(FP32)
这时候Adreno 225都能快接近543MP4了(FP32)
而不支持FP32精度的Tegra和Mali,就会出现图案不正确
目测这个测试 K3V2也会碉堡
而Ziilabs自家的ZMS-40,靠着12个Vec8的高频ALU,58GFLOPS的计算能力,得分足足是543MP4的2倍。。。但实际跑GLbenchmark 2.1, 性能好像就540水平。。。。
所以shader的计算能力,跟实际的游戏表现,又是两回事了

最后呢,SGX,Adreno,Tegra,Mali,各家都有些优化工具,包括三角形的顶点按照什么顺序喂等等细节,都可以做优化……所以说到底还是靠“优化”啊

“神油”才是王道啊
http://tieba.baidu.com/p/1815909366?pn=1

http://tieba.baidu.com/p/1970934768?pn=1

iPad 4 GPU Performance Analyzed:PowerVR SGX 554MP4 Under the Hood

http://www.anandtech.com/show/6426/ipad-4-gpu-performance-analyzed-powervr-sgx-554mp4-under-the-hood

GL benchmark测试解析相关推荐

  1. 聊聊Benchmark测试【转载】

    根据wiki百科解释: beanchmark问题就是基准测试问题. 1996 International Workshop on Structural Control 会议上提议组建欧洲.亚洲.和美国 ...

  2. benchmark测试

    title: benchmark测试 date: 2021-12-20 17:44:59 categories: go tags: 测试 Go 中的基准测试在许多方面类似于单元测试,但有关键的不同之处 ...

  3. 在线ssd测试软件,AS SSD Benchmark测试

    AS SSD Benchmark测试 ● AS SSD Benchmark AS SSD是基于全方位性能的测试软件,它使用了非常深度的Queue Depth(QD)队列深度,以及非压缩测试. • AS ...

  4. 聊聊benchmark测试

    根据wiki百科解释: benchmark问题就是基准测试问题. 1996 International Workshop on Structural Control 会议上提议组建欧洲.亚洲.和美国3 ...

  5. AI Benchmark测试原理、v4测试项变化以及榜单数据解读

    田海立@csdn 2020-10-3 AI Benchmark这里特指ETHZ(苏黎世联邦理工学院)的AI性能评测工具.最新其发布了v4版本以及基于这个版本的soc和手机AI性能数据.本文分析了AI ...

  6. Centos7安装ab(Apache Benchmark)测试工具及使用

    Centos7安装ab(Apache Benchmark)测试工具及使用 Apache Benchmark简称AB 一.安装 yum install -y httpd-tools 二.创建Post请求 ...

  7. 干货 | 如何对京东云GPU云主机进行TensorFlow Benchmark测试

     摘  要  本文介绍基于京东云GPU云主机快速搭建基于Tensorflow深度学习平台的过程,并分享如何利用Tensorflow benchmark工具进行GPU云主机基准性能测试,帮助读者快速.经 ...

  8. 使用ab和wrk对腾讯CLS进行benchmark测试

    使用ab和wrk对腾讯云日志服务CLS进行压力测试,以此为例对ab和wrk进行说明 ab ab,全称是apache benchmark,是apache官方推出的工具.该工具是用来测试Apache服务器 ...

  9. Apache Benchmark测试结果数据解析

    简介 Apache Benchmark简称ab,是Apache自带的性能测试工具 概念 吞吐率(Requests per second) 概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是 ...

最新文章

  1. Dokku和Docker的完美配合
  2. android 九宫格虚线,形状Drawable和九宫格
  3. php中的for循环最多循环多少次,php - 我在PHP中有2次时间,如何运行foreach循环来遍历所有这些日子? (最后24小时同时循环1小时!) - 堆栈内存溢出...
  4. Python学习笔记--数据类型
  5. java获取前端json数据_java如何获取前端ajax传来的json对象
  6. 针对vue ui启动项目抛error
  7. svn服务器搭建之备份3
  8. Atitit. 悬浮窗口的实现 java swing c# .net c++ js html 的实现
  9. win系统CH341驱动安装方法
  10. CISP 考试教材《第 2 章 知识域:网络安全监管》知识整理
  11. XX和OO(南阳oj1159)
  12. 作为面试官,我是如何甄别应聘者的包装程度
  13. 来公司必须了解的编码开发规范
  14. 不会编程也能爬数据!3个爬虫小工具教你实现~
  15. 硅谷:大火是这样烧起来的!
  16. 小学数学考试系统java_C语言项目小学生数学考试系统参考
  17. 建水实验中学2021高考考成绩查询,高三第一次省统测成绩发布 建水实验中学低进高出、强势崛起...
  18. [经济学原理|政治部分]剩余价值理论
  19. python画矩阵图_Python可视化25_seaborn绘制矩阵图
  20. 关于计算机素养论文,浅谈计算机专业教学中如何提高学生计算机素养

热门文章

  1. [Tableau] 直方图绘制
  2. Qt:ui文件no member named actionXXX 解决方案
  3. dw版权信息栏如何制作_dw网页制作过程?用dw怎么制作网页?
  4. 大学综评自招面试 计算机专业,【荔枝高校大会】自招综评面试6月16日扎堆举行,这些准备工作要做好!...
  5. PLC模拟量采集在工业自动化控制中的应用
  6. zfs 文件服务器,使用ZFS实现大量快速而又稳定的存储
  7. FCFS磁盘调度算法(C语言实现)
  8. 新版HCIE考试有什么题型?各题型具体怎么考?
  9. 博客书写-教师节收益
  10. 计算机视觉与脑电数据等应用于驾驶员的疲劳状态检测综述