GPU 峰值算力及性能优化参考资料汇总

12 篇文章 0 订阅

1、CUDA微架构与指令集(4)-指令发射与warp调度 - 知乎 (zhihu.com)

关于峰值算力的问题

最后要略微展开聊一下峰值算力的问题。NV的GPU经常用CUDA Core这个词来表示算力强弱,这其实是Int32/Float32功能单元的marketing叫法。算力评估常用的单位是FLOPS,表示FLoat OPerations per Second(Flops有时候也用作Flop的复数,注意鉴别)。对于F32而言,FADD/FMUL都是一个指令一个flop,FFMA一个指令同时算乘加所以是两个flop。所以一般NV的GPU的F32峰值算力计算方法为:

SM数 * 每SM的Core数 * 2 * 运行频率

最后结果常用GFlops或是TFlops表示。其中乘以“2”是因为FFMA是两个flop。比如说Maxwell架构每个SM有128个CUDA core,每个SM每cycle可以发射128条Int32Float32指令(两种指令不能同时发射,所以是或)。Maxwell架构的GTX 980有16个SM,共16 * 128=2048个CUDA core,每个cycle能做2048 * 2Flops/FFMA=4096 Flops。980的base clock是1.126GHz,相当于每个cycle是1/1.125G秒,每个Cuda Core每秒可以发射1.126G条指令,整个GPU就是1.126G*4096=4.5TFlops。放在一起算,就是峰值算力等于:

16 SM * 128 Core/SM * 2 Flop/Core/Cycle * 1.126G Cycle/second = 4.5TFlops.

当然,商家为了宣传,常用boost clock算峰值算力,非公版的频率也会有些差别,所以这个值会有些变化。另外,这里用的是F32浮点峰值做例子,如果你的任务不需要浮点运算或是精度不是F32,这个值就意义不大,需要转换成你需要的那个操作。现在AI处理器常常宣传峰值是多少FLOPs,或是多少IOPs,一般也会限定是F32,F16或是I8之类。因为每种操作对应的指令是不一样的,峰值当然也可能不一样。顶级HPC计算卡F64一般是F32的一半,但消费级显卡F64多数会有阉割。如果没有TensorCore而用packed F16(把两个F16塞到一个32bit GPR里同时运算),F16峰值性能通常是F32的两倍。有TensorCore时则要另行计算,要看具体TensorCore的数目和指令带宽,还有能不能和其他指令同时发射等。其实不看Tensor core的话,满血版一般有:F64:F32:F16=1:2:4,正好与占用的GPR成反比,这个其实是与GPR的带宽有很大的关联的,一般满血版的卡的功能单元配比就会尽量按极限的GPR带宽来设计。

这里贴一个Ampere的white paper中V100和A100的几种峰值性能对比:

要达到F32的峰值性能,需要满载发射FFMA指令,这是很苛刻的条件。首先,其他与FFMA共用dispatch port的指令,每发射一个都会挤占FFMA的发射机会。其次,由于多数情况下数据要从memory中来,而memory操作比ALU慢很多,常常导致指令操作数无法就绪,从而有些周期没有FFMA指令可发。同时还有其他一些overhead或是occupancy问题导致有些SM无法满载,从而无法达到峰值。一般说来,实际应用中,较大尺寸的矩阵乘法(GEMM)是难得的能接近峰值性能的程序,有些实现能到98%峰值的效率。但多数实际应用效率都远不及此,很多memory bound程序能到10%就很不错了。超算TOP500排名中,多数HPL效率都是50~60%左右,更接近实际应用的HPCG效率一般都在2~3%左右。虽有规模大导致的互联开销原因,但总体来讲实际应用的峰值性能离极限值还是差距很大的。

每种类型的指令都有一个峰值性能,那是不是能同时达到呢?基本是不能。对于共用dispatch port就不说了,要相互竞争发射机会,发射一条这种指令就少发射一条那种指令,所以显然不能同时到达峰值。如果是不同的dispatch port呢?理论上可以,但是实际上也会比较难。比如说Turing的F32和I32,首先I32的2IOP指令IMAD是和F32一伙的,相互竞争dispatch port,所以两个不能同时到达峰值。剩下的IADD3或是LEA之类的指令理论上可以与F32的并行,倒是有机会冲一冲。只不过多数实际应用中很难做到这么好的运算配比,而且register的bank conflict之类应该也会大大限制这两种指令的同时运行。另外,即使两者配合完美,它还是需要省出一些发射带宽给其他配套指令(比如memory load),不可能完全占满。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值