PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

安培CUDA数量是图灵的3倍,为何性能只是2倍?

[复制链接]
橙黄鼠标 发表于 2020-9-4 13:24 | 显示全部楼层 |阅读模式
点击数:2259|回复数:5

9月2日凌晨0时,英伟达正式发布了RTX 30系列显卡。一如既往的,在30系列显卡正式发布前,就已经有了大量的规格和数据曝光,但这一次,所有人都猜错了规格中的流处理器数量。RTX 3090官方标注的CUDA数量为10496个、RTX 3080 CUDA数量为8704个、RTX 3070的CUDA数量为5888个。这个数量超乎了大家的想像,甚至成为了一些自媒体的狂欢。

“有生之年终于看到过万CUDA了,没想到来着的这么快”,“NV牛逼,过万的CUDA核心”等等。。。。。


我不得不给大家泼一下冷水,RTX 30的CUDA数量并非大家想的这么牛逼。RTX 2080 Ti CUDA核心有4352个,功耗达到250W左右;RTX 3090,CUDA数量10496个,是RTX 2080 Ti的2.4倍,功耗仅仅提升了40%,英伟达采用的是三星的8nm工艺,8nm工艺真的这么牛逼吗?2.4倍的流处理器数量,代价仅仅是40%的功耗提升?戈登摩尔都震惊了。



事实上,就连NV的AIC伙伴都没料到RTX 30的CUDA核心是这样计算的。



在凌晨的发布会上,除了驱动引擎和软件部分的升级;有6个新东西在RTX 30显卡上推出,全新的流处理器、第二代RT核心、第三代Tensor张量核心、英伟达RTX IO技术、GDDR6显存以及三星8nm英伟达定制工艺。



其中全新的流处理器架构是英伟达CUDA核心数量提升的关键。



在图灵架构中,SM单元才是逻辑上的最小计算模块,FP32单元是最小计算核心之一,但并不能独立完成计算过程,所谓CUDA核心其实是一种营销术语,实际上并没有CUDA核心这种东西。在图灵架构中,英伟达将CUDA核心的数量与FP32浮点单元相提并论,计算的方式是1:1计算,也就是说CUDA核心数量计算的是SM计算单元里的FP32单精度浮点单元。



FP32单精度浮点单元虽是SM单元中的计算单元,但并非全部。以前的CUDA单元其实还包括了整数单元,直到Volta架构和图灵架构开始,才进行了整数和浮点单元的分离,这也是从图灵这代显卡开始,CUDA核心和以前的CUDA核心不再相同的原因。

一个CUDA核心可以在一个时钟周期中执行一条单精度浮点运算指令,如果需要计算的指令刚好是FMA(Fused-Multiply-Add乘积、加法混合计算),单精度浮点单元的管线就会刚好用完,这时候单精度浮点单元的使用率是最大的,同时效率也最高。




但并不是所有指令都是FMA指令,现代的图形计算基本都是混合计算,全浮点计算只有可能用在科学计算中,而且多数要求双精度浮点运算。图形领域,GPU可能用到的指令足有几十条,NV对此也十分清楚,在公开的开发者文档中清楚的记载了什么算法应该用到什么指令以及涉及到的运算力。换句话说,单精度浮点单元并不等于图形性能,单精度浮点性能也不能和图形性能画等号。



回到我们刚刚的话题,在过去CUDA作为NV衡量性能的规格之一,采用了和FP32计算单元1:1的比例进行换算。在安培架构中,每个SM单元里的FP32计算单元数量进行了翻倍提升,按照上一代图灵显卡的1SM=64个FP32单元的计算方式推算,现在安培架构应该是1SM=128 FP32单元,但英伟达这次并没有更改CUDA的计算方式,仍然保持了1:1的算法,所以造就了3090高达10494的CUDA核心数量。



这种提升方式其实让我第一时间想到了AMD当年的推土机,只是刚好反过来,一个堆整数单元,一个堆浮点单元。。。。



在发布会中,英伟达介绍GA102核心拥有280亿晶体管,比TU102的186亿晶体管多出50%。这50%的晶体管很大概率都拿来做FP32单精度浮点单元去了。




按照英伟达在发布会公布的性能级别,RTX 3080的性能是RTX 2080的2倍,RTX 3070和RTX 2080 Ti相同,不得不说,这个性能的提升幅度确实是历来最大的。因为通常英伟达是一代升一级,RTX 3080应该和RTX 2080 Ti平级,提升幅度在百分之30-50就差不多了,这次竟然翻倍,确实比较猛。

不过RTX 3080的CUDA核心有8704个,是RTX 2080 2944CUDA核心数的3倍,但性能提升只能达到X 2的水平。


这可能就涉及到了另外一个问题:线程的调度


SM单元里有4个方块,我们姑且称它为计算区块,计算区块里又包含了更多的计算单元,比如刚刚提到的FP32单精度浮点计算单元、INT32整数计算单元,他们就好像CPU里的一个个核心一样,是需要调度和分配任务的,而做这个调度的就是顶上橘黄色的部分:调度器。

英伟达叫他Warp调度器,1个Warp调度器,每个时钟周期可以并行运行32个线程,每个线程其实就对应了每个计算核心(16 FP32+16 INT32),不单止CUDA核心哟。。。。。

CUDA编译器用的是PTX指令集,这个指令集用的不是常规的SIMD指令集,而是SIMT指令集,翻译过来叫单指令多线程,所以每个Warp里运行的一定是相同的指令来做工,但相同的指令未必有等量的数据恰好满足32线程的倍数关系,因此Warp里经常会有inactive的未激活核心。



这个设计从费米时代延续至今,而费米时代的SM单元恰恰也是包含128个CUDA核心,和这一代的安培显卡相同,但是当时并没有专用的INT32整数单元,所以费米到麦克斯韦架构的每个Warp的32个线程其实是对应CUDA核心的,也就是 32 x 4 =128个CUDA单元,Warp里的线程也是32 x 4=128个线程;而图灵是16个CUDA核心+16个整数单元,Warp的线程还需要调度整数单元。


调度器的线程数涉及到CUDA长久以来使用的指令集代码的语法,更改调度器不太可能,所以这3倍的流处理器提升,只有2倍的性能提升来源可能有两个。
1.        是CUDA带来的浮点性能并不完全等于图形性能,英伟达也未公开这性能比例是如何测试的。
2.        是英伟达SM单元中每个Warp的调度器线程数不变,计算核心增加,也许会通过特殊的运算方式运行,在进行多指令集的复杂运算时,有大量核心处于inactive未激活状态,所以在CUDA核心3倍的情况下,只有2倍的性能提升,同时功耗也只提升40%左右。


2020年9月4日更新------------
9月4日英伟达内容与技术副总裁Tony Tamasi在Reddit的回复证实了我的猜测

“[Tony Tamasi] One of the key design goals for the Ampere 30-series SM was to achieve twice the throughput for FP32 operations compared to the Turing SM. To accomplish this goal, the Ampere SM includes new datapath designs for FP32 and INT32 operations. One datapath in each partition consists of 16 FP32 CUDA Cores capable of executing 16 FP32 operations per clock. Another datapath consists of both 16 FP32 CUDA Cores and 16 INT32 Cores. As a result of this new design, each Ampere SM partition is capable of executing either 32 FP32 operations per clock, or 16 FP32 and 16 INT32 operations per clock. All four SM partitions combined can execute 128 FP32 operations per clock, which is double the FP32 rate of the Turing SM, or 64 FP32 and 64 INT32 operations per clock”

安培的SM单元里的计算区块,是在图灵的基础上在又加了16个FP32浮点单元,并且将他们分成两种运算模式,一种是16个FP32浮点单元+16个FP32浮点单元同时运行,这样一个完整的计算区块就将提供32个FP32浮点单元的计算吞吐量,另一种则是和图灵一模一样的16个FP32浮点单元+16个INT32整数单元的运算模式。

我再说得形象一点,以安培RTX 3090为例,虽然它拥有10496个CUDA核心,但SM计算单元数量=10496/128=82个SM单元,这82个SM单元因为每个计算区块里的Warp调度器工作规律,最多只能同时使用16个+16个计算单元,如果是运行在16个FP32浮点单元+16个FP32浮点单元的工作模式,这个SM单元的名字叫安培;如果是运行在16个FP32浮点单元+16个INT32整数单元的工作模式,这个SM单元的名字叫图灵。

这就是为什么CUDA核心3倍提升的情况下,只有2倍性能提升的原因,同时功耗也只提升40%左右。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
Ivanonline 发表于 2020-9-5 12:34 | 显示全部楼层
知识性文章,太有用了。我来总结一下吧:

CUDA核心营销术语:英伟达定义CUDA核心=FP32浮点单元有多少FP32浮点单元就是有多少CUDA核心

举个例子:你之前经常去KFC【SM单元-逻辑上的最小计算模块】买吃的,因为KFC提供你非常喜欢的
A套餐:炸鸡【FP32浮点单元】
B套餐:汉堡【INT32整数单元】
而且你每次去总是要A+B两种套餐各一份。去的次数多了,KFC的老板【2080】都认识你了。

这次KFC【SM单元-逻辑上的最小计算模块】换了老板【3080】。因为炸鸡卖的太火了。这次KFC多提供了一种套餐C:
A套餐:炸鸡【FP32浮点单元】
B套餐:汉堡【INT32整数单元】
C套餐:炸鸡【FP32浮点单元】

因为你每次都能吃掉两种套餐【Warp调度器工作规律】。这时候你的选择是什么呢?
第一种选择:A+B或者C+B(炸鸡+汉堡)【FP32浮点单元+INT32整数单元】【图灵SM-工作模式】
第二种选择:A+C(双份炸鸡)【FP32浮点单元 x 2】【安培SM-工作模式】


你买不买炸鸡 KFC 都在那里。。。。(未调用的核心我感觉肯定耗电啊)


RTX 2080 2944 CUDA 核心
RTX 3080 8704 CUDA 核心


RTX 3080工作在图灵模式:实际工作CUDA核心为4852 = 1.5倍 RTX 2080
RTX 3080工作在安培模式:实际工作CUDA核心为8704 = 3.0倍 RTX 2080




工作在图灵模式下仅仅从CUDA核心规模来比较的话:3080要比2080强1.5倍这个是没跑的了。至于说UP TO 2x 2080 我感觉 要从频率,显存等其他方面考虑了。

等更具体的规格说明书再分析吧。

pphiuyt 发表于 2020-9-12 19:39 | 显示全部楼层
能效比 以 150W GTX1070为准  到时候算算提升多少   看来itx 止步3060了
武英仲 发表于 2020-9-16 20:34 | 显示全部楼层
和中国证监会一样,指数拉不动就改指数成分和计算规则...
用心铭记 发表于 2020-9-17 18:19 | 显示全部楼层
感觉 跟因特尔学的 优化
airman 发表于 2020-9-18 19:18 | 显示全部楼层
这个我看了咱们站的视频了,讲得真不错,现在明明白白的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部