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

       学了IT那么久,只知道CPU主频不断的提升,核数也越来越多,但是如何理论上计算出不同代CPU性能的提升,还真没有认真思考过,我估计大多数人也不会关注,这次由于要进行高性能集群项目遇到,刚好认真的研究了一下CPU的浮点计算理论值。记录一下过程。

首先,FLOAS=核数*单核主频*CPU单个周期浮点计算值。

上述三个参数中,核数,单核主频在CPU型号都会标明,只有CPU单个周期浮点计算值这个要深入思考一下。

首先要了解CPU指令集的概念。

现在服务器的CPU都是AVX-512指令集了,

对应CPU能处理什么样的指令集,可以查intel官方的Specifications.比如我想查Intel® Xeon® Gold 6142 Processor这款CPU的支持哪种指令,可以查如下链结https://ark.intel.com/products/120487/Intel-Xeon-Gold-6142-Processor-22M-Cache-2-60-GHz-

同时还能查到此款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

参考文章:

http://bbs.keinsci.com/thread-786-1-1.html

https://stackoverflow.com/questions/15655835/flops-per-cycle-for-sandy-bridge-and-haswell-sse2-avx-avx2

https://ark.intel.com/products/120487/Intel-Xeon-Gold-6142-Processor-22M-Cache-2-60-GHz-

https://baike.baidu.com/item/%E6%8C%87%E4%BB%A4%E9%9B%86/238130?fromtitle=CPU%E6%8C%87%E4%BB%A4%E9%9B%86&fromid=3728424&fr=aladdin


我是受第一个链结的文章启发的,怕以后找不到,我拷贝过来。

简谈CPU峰值性能怎么计算

文/Sobereva @北京科音2015-Feb-13

CPU峰值性能就是CPU运算能力满打满算最最理想情况下的性能,这只有理论意义,实际性能要以软件实测为准。有人问寡人峰值性能怎么算,这里就很简单地说两句。搞计算化学的一般只关注浮点性能,所以这里只提峰值浮点性能。

峰值浮点性能=CPU核数*CPU频率*每周期执行的浮点操作数

时下普通的CPU的单精度(SP)浮点性能是双精度(DP)浮点性能的两倍。目前常见的几类CPU内核的每周期浮点操作数以及细节如下(引自网络,见http://stackoverflow.com/questions/15655835/flops-per-cycle-for-sandy-bridge-and-haswell-sse2-avx-avx2

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 

时下搞计算化学的人最常用的XEON E3/E5中,v3对应Haswell,v2对应Ivy Bridge,不带后缀的对应Sandy Bridge。更老的,比如XEON 5500系列对应Nehalem。如果不清楚,建议查阅笔者编纂的《硬件资料库》(http://pan.baidu.com/s/1hq7PLeG

根据这些资料,可以容易地计算峰值浮点性能,比如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呢。

PS:这篇文章观点有点意思,大家不妨看看《GPU运算即将退潮 CPU浮点性能革命》(http://www.cgan.net/cganself/founder/?p=2681

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容