|
移动端SOC的GPU技术,当属高通Adreno系列GPU最为神秘,公开的资料最少。今天就来探究下Adreno GPU具体参数是怎样的。本文有很多猜测,仅供参考。
我们首先列一下近五年高通旗舰SOC型号及其对应的Adreno GPU型号(Snapdragon 简称SD,时间按照高通正式发布的时间为准),以及每年对GPU部分性能提升的宣传。
2016年 | 2017年 | 2018年 | 2019年 | 2020年 | SOC型号 | SD 835 | SD 845 | SD 855 | SD 865 | SD 888 | GPU型号 | Adreno 540 | Adreno 630 | Adreno 640 | Adreno 650 | Adreno 660 | 然后我们再来看看每年高通发布会上对GPU这部分的宣传。
从以上发布会信息可以看出高通对历代GPU的介绍是惜字如金。那我们先来看下SD 855和Adreno 640,因为高通在2019年的hotchips上唯一一次公开其Adreno 640 GPU的算力、Texture 能力、ROP 像素填充能力。链接如下:
我们知道SD 855的最高频率是585MHz,按照这个数据,我们是能够推估出来Adreno 640 的基础参数。
48 texels/cycle x 585MHz / 1000 = 28.1 Gtex/s
16 pixels/cycle x 585MHz / 1000 = 9.4 Gpix/s
768 FMA x 2 x 585MHz / 1000 = 898.6 GFLOPS
前面两个都和公布数据完全一致,唯独FMA数量上,公布值比理论值高了6.25%。联想到ARM Mali GPU除了有FMA的计算资源外,还有SFU资源(Special function unit, 计算一些超越函数,如三角函数,指数,对数等)也能计算浮点操作, 一般GPU设计中FMA和SFU的比例大概是在4:1的水平,例如Intel Xe 系列GPU。
ARM Mali G77 ALU设计中包含FMA/CVT/SFU 三路不同计算资源
Intel Xe系列GPU FP ALU 和 EM ALU比例是4:1
这里本人推测高通是应该是算上了独立的SFU计算资源,但根据公布的数值,FMA:SFU 应该是8:1(猜测1)。计算结果如下:
(768 x 2 + 768/8 )x 585MHz / 1000 = 954.7 GFLOPS
完全匹配,Bingo。
这里引出另一个问题,高通公布称FP16的算力是FP32的两倍,但实际上根据烤机测试结果并非如此,详见 @绝地求生盒子君 分析文章和数据。
这里借用下其中的数据:
显然单独的加法和单独的乘法运算,FP32 和 FP16是完全一样的成绩,这个成绩和理论成绩是非常接近的。
768 x 585MHz / 1000 = 449 GFLOPS
利用率 = 438 / 449 = 97.6%
从计算资源上来说,FP32的计算单元是可以复用来计算FP16的,猜测高通在硬件上是支持这么做,以方便宣传之用。但实际却没有开放给用户。(猜测2)
这里提一下,Adreno 640 在计算FP32 FMA时有利用率不高的问题,@绝地求生盒子君 对这个有分析。这里提一下另一种可能,就是在下面的链接中提到了高通描述了它们ALU 执行单元中MUL 和 ADD 是独立分开的,可能会存在调度上的开销。特别是在执行FMAD+ADD这种混合运算时,FMA中的ADD操作和单独的ADD操作就会产生冲突。不像ARM mali GPU 其FMA的MUL和ADD操作是在一个lane里面pipeline 流水执行的,这就不完全不存在调度的开销。
这里给下Kirin 9000 运行烤机程序的数据。
FMAD 测试 | FP32 | FP16 | 算力(GFLOPS) | 1065 | 2119 | Kirin 9000最高频760MHz,FMA计算数量为 32x24=768
FP32 峰值算力为:768 x 2 x 760 = 1167 GFLOPS,烤机效率高达:1065/1167= 91%。
再来看看骁龙865,这一代GPU升级为Adreno 650。按照Anandtech分析,GPU 从2个核换成3个核,ALU数量翻了一倍,这里高通又跟我们玩了一个文字游戏。从上面的分析得到的是A640 ALU中FP32 和 FP16 资源各为768个,1:1 的关系。所谓的提升了50%是指FP32+FP16总数提升了50%,重新将FP32和FP16的比例恢复到了1:2,即FP32:FP16=768 : 1536,那这一点也是从烤机数据中可以得出。
SD 865 | FMAD | FMAD | FMUL | FMUL | FADD | FADD | 精度 | FP32 | FP16 | FP32 | FP16 | FP32 | FP16 | GFLOPS | 610 | 1160 | 440 | 855 | 441 | 852 | 显著的结论是:FP16相对FP32是翻倍的关系。如果是768 ALU,587MHz频率,MUL或ADD的理论峰值算力:
768 x 587 / 1000 = 451 GFLOPS
烤机利用率:441 / 451 = 97.8%
再看看去年发布的骁龙888,宣称35% 渲染能力的提升,这个提升主要是来自频率,骁龙888最高频率达到840MHz,相比865提升43%,这哪里还需要增加ALU啊!所以ALU 硬件资源应该没有变化。
再反过头来看看 845,采用Adreno 630 GPU,也是第一代使用6系架构的GPU,从之前A640的发布已经明确提到FP32&FP16 ALU提升了50%,那也不难猜测A630 的ALU数目是512,并且也是2核设计。
最后再看看A540 中有多少ALU,首先不可能超过其下一代512个ALU,但是比例应该是1:2。下面微博链接中有A540 烤机的数据。
从这个数据看,作者认为A540 有 256个ALU,这里有个问题,就是 MUL 算力比理论值高。
FMUL 理论算力 = 256 x 710 /1000 = 181.8 GFLOPS。
实测算力比理论算力高了约30%。这个原因,在贴吧上有位吧主有详细的解释,详见链接:
简单来说,就是烤机软件的bug导致的(v2.01),烤机程序内定义了一个vec4变量,但其中一个变量始终为1,编译器会优化掉这个乘操作,最后计算算力的时候,是按照vec4去算的,实际上硬件只做了vec3操作。v2.1版本改进后,MUL 和 ADD 的算力是一样的了,见下图(图片有点不清晰)。备注:这里感谢 @绝地求生盒子君 更正这个错误。
就写到这里吧,最后做一个总结。
Texture 能力 和 ROP 能力可以从wiki 中找到一些数据。
相比ARM 的架构演进,在ALU方面是选择了增加单核内EE数量(1EE->3EE)或者加宽SIMD(SIMD4->SIMD8->SIMD16) 来提升单核能力。而高通的架构演进,选择将FP16和FP32 的计算能力分开提升或者统一提升。从历代产品看,高通节奏把控能力还是杠杠的。
以上为11.2日更新。
前面已经看到Kirin 9000 FP32算力是1167 GFLOPS。再看看同时期的A14芯片,我们在M1的宣传中看到其算力是2.6TFLOPS。假设A14和M1是相同的core,相同的频率,推估A14的算力应该是M1的一半, 即 1.3 TFLOPS。三家移动端主流GPU的算力,都同时在2020这一年跨越了 1 TFLOPS算力的门槛,这也是一个信号,移动端GPU 与 PC端GPU的差距越来越小了。
移动端GPU的算力已经达到 1TFLOPS算力级别了,这与入门级别的独立显卡已经是一个量级了,例如MX450算力,也不过2.8TFLOPS算力。Apple M1也用实际行动证明,移动端GPU进军PC领域是势不可挡了,而能效优势方面也是一枝独秀。
以上更新于2021.11.4。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|