gpu浮点计算能力floaps_关于CPU的浮点运算能力计算

gpu浮点计算能⼒floaps_关于CPU的浮点运算能⼒计算
学了IT那么久,只知道CPU主频不断的提升,核数也越来越多,但是如何理论上计算出不同代CPU性能的提升,还真没有认真思考过,我估计⼤多数⼈也不会关注,这次由于要进⾏⾼性能集项⽬遇到,刚好认真的研究了⼀下CPU的浮点计算理论值。记录⼀下过程。
⾸先,FLOAS=核数*单核主频*CPU单个周期浮点计算值。
上述三个参数中,核数,单核主频在CPU型号都会标明,只有CPU单个周期浮点计算值这个要深⼊思考⼀下。
⾸先要了解CPU指令集的概念。
现在服务器的CPU都是AVX-512指令集了,
同时还能查到此款CPU的AVX-512 FMA Units是2,这个意思是可以单个CPU周期可以同时执⾏2条512bit 加法和2条512bit 乘法。
其次是理解单精度和双精度浮点运算概念,简单的理解单精度就是指32bit的指令长度的运算,对应操作系统就是32位操作系统;双精度就是指64bit指令长度的运算,对应操作系统就是64位操作系统。
理解上述⼆个概念,我们就可以算出CPU单周期浮点计算能⼒了,
CPU单周期双精度浮点计算能⼒=2(FMA数量)*2(同时加法和乘法)*512/64
CPU单周期双精度浮点计算能⼒=2(FMA数量)*2(同时加法和乘法)*512/32
可以理解为单个CPU周期能够同时执⾏加法和乘法的指令的条数。
例如上述的Intel 6142 CPU的浮点能⼒可以计算出,6142是16核,每核2.6GHz
FLOAS(双精度)=16*2.6*(2*2*512/64)=1331.2GFLOAs
FLOAS(单精度)=16*2.6*(2*2*512/32)=2662.4GFLOAs
可以理解此款CPU的双精度浮点运算峰值为1.3TFLOAs,单精度为2.6TFLOAs.
对⼀个计算节点,有可能有多个CPU,那么对于计算节点,单个CPU浮点运算峰值要乘以CPU个数才是⼀个计算节点的浮点运算峰值。
常⽤的CPU情况:
Intel Core 2 and Nehalem:
4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication
8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication
Intel Sandy Bridge/Ivy Bridge:
8 DP FLOPs/cycle: 4-wide AVX addition + 4-wide AVX multiplication
16 SP FLOPs/cycle: 8-wide AVX addition + 8-wide AVX multiplication
Intel Haswell/Broadwell/Skylake/Kaby Lake:
16 DP FLOPs/cycle: two 4-wide FMA (fused multiply-add) instructions
32 SP FLOPs/cycle: two 8-wide FMA (fused multiply-add) instructions
AMD K10:
4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication
8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication
AMD Bulldozer/Piledriver/Steamroller/Excavator, per module (two cores):
8 DP FLOPs/cycle: 4-wide FMA
16 SP FLOPs/cycle: 8-wide FMA
AMD Ryzen
8 DP FLOPs/cycle: 4-wide FMA
16 SP FLOPs/cycle: 8-wide FMA
Intel Atom (Bonnell/45nm, Saltwell/32nm, Silvermont/22nm):
1.5 DP FLOPs/cycle: scalar SSE2 addition + scalar SSE2 multiplication every other cycle
6 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication every other cycle
AMD Bobcat:
1.5 DP FLOPs/cycle: scalar SSE2 addition + scalar SSE2 multiplication every other cycle
4 SP FLOPs/cycle: 4-wide SSE addition every other cycle + 4-wide SSE multiplication every other cycle AMD Jaguar:
3 DP FLOPs/cycle: 4-wide AVX addition every other cycle + 4-wide AVX multiplication in four cycles
8 SP FLOPs/cycle: 8-wide AVX addition every other cycle + 8-wide AVX multiplication every other cycle ARM Cortex-A9:
1.5 DP FLOPs/cycle: scalar addition + scalar multiplication every other cycle
4 SP FLOPs/cycle: 4-wide NEON addition every other cycle + 4-wide NEON multiplication every other cycle ARM Cortex-A15:
2 DP FLOPs/cycle: scalar FMA or scalar multiply-add
8 SP FLOPs/cycle: 4-wide NEONv2 FMA or 4-wide NEON multiply-add
Qualcomm Krait:
2 DP FLOPs/cycle: scalar FMA or scalar multiply-add
8 SP FLOPs/cycle: 4-wide NEONv2 FMA or 4-wide NEON multiply-add
IBM PowerPC A2 (Blue Gene/Q), per core:
8 DP FLOPs/cycle: 4-wide QPX FMA every cycle
SP elements are extended to DP and processed on the same units
IBM PowerPC A2 (Blue Gene/Q), per thread:
4 DP FLOPs/cycle: 4-wide QPX FMA every other cycle
SP elements are extended to DP and processed on the same units
Intel Xeon Phi (Knights Corner), per core:
16 DP FLOPs/cycle: 8-wide FMA every cycle
32 SP FLOPs/cycle: 16-wide FMA every cycle
Intel Xeon Phi (Knights Corner), per thread:
8 DP FLOPs/cycle: 8-wide FMA every other cycle
16 SP FLOPs/cycle: 16-wide FMA every other cycle
Intel Xeon Phi (Knights Landing), per core:
32 DP FLOPs/cycle: two 8-wide FMA every cycle
64 SP FLOPs/cycle: two 16-wide FMA every cycle
参考⽂章:
我是受第⼀个链结的⽂章启发的,怕以后不到,我拷贝过来。
简谈CPU峰值性能怎么计算
⽂/Sobereva @北京科⾳2015-Feb-13
CPU峰值性能就是CPU运算能⼒满打满算最最理想情况下的性能,这只有理论意义,实际性能要以软件实测为准。有⼈问寡⼈峰值性能怎么算,这⾥就很简单地说两句。搞计算化学的⼀般只关注浮点性能,所以这⾥只提峰值浮点性能。
峰值浮点性能=CPU核数*CPU频率*每周期执⾏的浮点操作数
Intel Core 2 and Nehalem:
4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication
8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication
Intel Sandy Bridge/Ivy Bridge:
8 DP FLOPs/cycle: 4-wide AVX addition + 4-wide AVX multiplication
16 SP FLOPs/cycle: 8-wide AVX addition + 8-wide AVX multiplication
Intel Haswell:
16 DP FLOPs/cycle: two 4-wide FMA (fused multiply-add) instructions
32 SP FLOPs/cycle: two 8-wide FMA (fused multiply-add) instructions
AMD K10:
4 DP FLOPs/cycle: 2-wide SSE2 addition + 2-wide SSE2 multiplication
8 SP FLOPs/cycle: 4-wide SSE addition + 4-wide SSE multiplication
AMD Bulldozer/Piledriver/Steamroller, per module (two cores):
8 DP FLOPs/cycle: 4-wide FMA
16 SP FLOPs/cycle: 8-wide FMA
根据这些资料,可以容易地计算峰值浮点性能,⽐如E5-2690 v2,基本频率为3.0GHz(这⾥不考虑Turbo boost动态升频),有10个核,每个核每周期可以做8次双精度浮点运算或16次单精度浮点运算,因此:
单精度峰值浮点性能=3.0*10*16=480 GFLOPs
双精度峰值浮点性能=3.0*10*8=240 GFLOPs
这⾥FLOPs (FLoating-point Operations Per Second)是衡量浮点性能的常⽤单位,即每秒做的浮点运算次数。1GFLOPs代表每秒⼗亿次浮点运算。⽬前世界顶尖的⾼性能计算机(HPC)的浮点性能都以PFLOPs来计,1P=1000T=1000000G。
从上⾯列的数据中看似XEON v3 (Haswell)⽐v2的浮点性能⾼⼀倍,这被⼀些商家⽤来忽悠消费者。实际上,同频同核下,v3⽐v2性能提升很⼩。如果v3价格只⽐v2贵⼀点,那么可以买v3,但如果贵得很多,切勿被表⾯上看多⼀倍的峰值性能所冲昏了头脑。适当了解下不同内核以及指令集的特点对理解这个问题是有益的。为了⽅便,这⾥我们只考虑双精度浮点。
第⼀代奔腾⽀持的MMX、奔3开始⽀持的SSE(最后发展到SSE4/4A),以及从Sandy Bridge开始⽀持的AVX等等都是SIMD(单指令多数据)指令集,它允许⼀个指令同时对多个数据进⾏处理以达到很⼤的吞吐量。Sandy Bridge/Ivy Bridge⽀持的AVX指令集可以⼀次处理256bit浮点指令,双精度浮点数长度为64bit,即通过AVX指令⼀次可以做四个双精度浮点运算。如前⾯给出的信息所⽰,Sandy
Bridge/Ivy Bridge⼀个周期可以执⾏⼀次AVX浮点乘和⼀次AVX浮点加,也就是说⼀个周期可以做四个双精度浮点加和四个双精度浮点乘,故⽈每周期可以做8个双精度浮点运算。这只是理论最⼤值,实际上⽔分很⼤,因为前提是必须所处理的完全是AVX 256bit指令,但实际中是做不到的,能利⽤上AVX指令集的只是实际计算程序中的某些部分⽽已(这需要编译器和操作系统的⽀持。如果写的时候专为AVX 来调整代码编写⽅式可以更好地利⽤AVX来达到更好的性能)。另外,不可能总是恰好要算的是⼀条加法指令和⼀条乘法指令,⽐如传来的只有⼀串浮点加指令,那么乘法运算单元就空闲了,浮点性能也就浪费了⼀半。所以,虽然我们从前⾯列的数据中看到Sandy Bridge/Ivy Bridge得益于AVX⽽⽐Nehalem每周期能做的浮点运算次数⾼⼀倍,但这只是最理想的状况⽽已,⽽且这和实际表现出来的
升频性能不是那么的密切。⼀般应⽤中前者⽐后者在同频同核数情况下性能⾼近⼀半,这主要还是因为CPU架构做了多⽅⾯改进带来的,具体说起来就⽐较复杂了,这⾥就不提了。可以说,如果所运⾏的程序对AVX优化较好,Sandy Bridge/Ivy Bridge表现的性能⽐Nehalem提升得会更多。
再来看XEON v3和v2的关系。Haswell相⽐Sandy Bridge/Ivy Bridge的⼀个主要改进是⽀持了AVX 2.0指令集,相⽐AVX有了⼀些改进,其中很关键的是⽀持了FMA3指令,这⾥FMA是Fused Multiply-Add(融合乘加)的缩写,FMA3是⼀种具体实现。原本,做
result=a+(b*c)需要先做⼀次乘法再做⼀次加法,⽽利⽤FMA指令可以在⼀个周期内做完这个运算,所以可以认为做⼀次FMA运算等于做两次常规浮点运算。如前⾯列出的信息所⽰,Haswell的每个内核⼀个周期可以处理两个FMA指令,每条指令包含4个双精度浮点,⼀次FMA浮点运算⼜能当两次普通浮点运算来计,因此每个核每周期内满打满算可以做2*4*2=16次双精度浮点操作。由于⽀持了FMA,表⾯上看XEON v3⽐v2浮点性能⾼了⼀倍,但这种说法实际上⽔分巨⼤:哪可能要做的总是乘加运算?⽐如传来的就是⼀条AVX浮点乘指令,此时v3虽然⽀持FMA却也派不上⽤场,v3和v2都需要⼀个周期来完成,即表现出的性能相等。所以说,如果有⼈说v3⽐v2性能提升⼀倍那纯粹是天⽅夜谭,除⾮跑的是专门炫耀Haswell的程序,⾥⾯的运算全都是乘加。根据实际测试来看,Haswell跑现有的程序也就⽐Ivy Bridge性能⾼不到10%,但这很难说是⽀持FMA的功劳。以后的程序可能会有⼀些针对FMA专门进⾏优化,或在编译时使⽤相应的优化选项(如ifort⾥⽤-fma)⽽使v3有更好的性能,但不要抱太⾼期
待。所以前⾯提到,买服务器时如果v3⽐v2贵⼀点可接受,但贵得太多就算了。
再来说说为什么如今AMD CPU的浮点性能为什么如此之烂。从推⼟机架构开始,即前⾯列的Bulldozer/Piledriver/Steamroller这⼀
类,AMD就⽤了很糟糕的设计,两个核⼼作为⼀个模块,共⽤⼀个浮点单元,⼀个周期只能处理⼀次256bit FMA指令,⽽Haswell⼀个核就能同时处理两条256bit FMA指令,也就是说,论峰值浮点性能,现今AMD的U四个核才顶Haswell⼀个核。不过实际没这么夸张,抛开那些很虚的峰值性能数据,要达到如今XEON v2或v3的N个核的实际性能,同频情况下,如今的Opteron必须要⽤>2N个核。如果程序的并⾏效率很低,那么Opteron实际效能简直惨不忍睹,不管怎么算都远不如XEON划得来。所以说,如今做计算化学买AMD的U只有后悔的份。AMD的U的核数⽐较坑⼈,N个核才有N/2个浮点单元(想来,当年AMD还⽆耻地说Intel的Pentium D是胶⽔粘的,有点⾃⼰打脸的意味),但是整数性能还说得过去,整数单元和核数是相同的,但搞计算化学的⼈才不稀罕整数性能呢。
最后再说⼀下GPU。从峰值性能上看,GPU⽐起CPU弱点在于频率低,不⽀持SIMD,但它的浮点性能之所以胜于CPU在于流处理器数⽬多。以nVidia的⾼端的GTX Titan black为例,基础频率是0.889GHz,有2880个单精度浮点单元和960个双精度浮点单元,每个浮点单元每周期能做⼀次FMA指令,因此
单精度峰值浮点性能:0.889*2880*2=5120GFLOPs
双精度峰值浮点性能:0.889*960*2=1707GFLOPs
可见GTX Titan black峰值性能⽐前⾯举的E5-2690 v2的例⼦⾼了约⼀个数量级,但这⽔分太⼤,显然不能因为FMA就当成实际中有两倍处理能⼒,所以公平来说双精度浮点性能前者是后者4、5倍的样⼦。GPU的单精度浮点性能的确很好,性价⽐远胜于CPU,但⼀定要注意⼤多数消费级GPU的双精度性能其实不咋地。GTX Titan black价格⽐起同样流处理数⽬的GTX 780Ti贵出⼀倍,在我来看贵的主要道理不是因为它是烧包级,⽽是双精度性能能达到单精度的1/3,⽽这个⽐例对于GTX 780Ti仅为1/24!GTX 780Ti的基准频率为
0.876GHz,单精度性能和GTX Titan black基本⽆异,但双精度峰值性能才区区210GFLOPs⽽已,要不把FMA满打满算记⼊峰值性能计算公式,那么还明显不如E5-2690 v2呢。

本文发布于:2024-09-24 13:12:12,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/356430.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:性能   浮点   峰值   精度   计算
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议