简谈CPU峰值性能怎么计算[转载]
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.01016=480 GFLOPs
双精度峰值浮点性能=3.0108=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+(bc)需要先做一次乘法再做一次加法,而利用FMA指令可以在一个周期内做完这个运算,所以可以认为做一次FMA运算等于做两次常规浮点运算。如前面列出的信息所示,Haswell的每个内核一个周期可以处理两个FMA指令,每条指令包含4个双精度浮点,一次FMA浮点运算又能当两次普通浮点运算来计,因此每个核每周期内满打满算可以做24*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.88928802=5120GFLOPs
双精度峰值浮点性能:0.8899602=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)
转自:http://bbs.keinsci.com/thread-786-1-1.html
简谈CPU峰值性能怎么计算[转载]的更多相关文章
- Linux按照CPU、内存、磁盘IO、网络性能监测【转载】
本文转载地址:https://my.oschina.net/chape/blog/159640 系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监 ...
- 从虚拟机视角谈 Java 应用性能优化
从虚拟机视角谈 Java 应用性能优化 周 祥, 软件工程师, IBM 简介:Java 的普及和广泛应用,以及其基于虚拟机运行的机制,使得性能问题越来越重要.本文从 Java 虚拟机的角度,特别是垃圾 ...
- CPU使用率原理及计算方式
本文转载自CPU使用率原理及计算方式 CPU:超线程和多核 超线程(Hyper-Threading ) 超线程是Intel最早提出一项技术,最早出现在2002年的Pentium4上.单个采用超线程的C ...
- MPI简谈
MPI简谈 MPI是分布式内存系统,区别于OpenMP和Pthreads的共享内存系统.MPI是一种基于消息传递的并行编程技术,是如今最为广泛的并行程序开发方法. MPI前世今生 MPI(Messag ...
- 浅谈Android应用性能之内存
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/ jaunty [博主导读]在Android开发中,不免会遇到许多OOM现象,一方面可能是由于开 ...
- .NET简谈构件系统开发模式
转自[王清培] http://www.cnblogs.com/wangiqngpei557/archive/2011/06/14/2080416.html 在本人的“.NET简谈插件系统开发模式”一文 ...
- cpu,io密集型计算概念
I/O密集型 (CPU-bound) I/O bound 指的是系统的CPU效能相对硬盘/内存的效能要好很多,此时,系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存) 的读/写,此时 CP ...
- .NET简谈——跨进高级编程门槛的必经之路
我们继续C#基础知识的学习,这篇文章对前面基础知识学习的朋友有着举足轻重的作用:为了延续基础知识学习的热情,我编写了这篇特殊的文章. 本篇文章的中心是想借“.NET简谈反射(动态调用)”一文继续发挥下 ...
- Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播。
Linux是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播. Linux是众多操作系统之一 , 目前流行的服务器和 PC 端操作系统有 L ...
- .NET简谈接口
自从面向对象开发方式的出现,抽象的概念就开始日新月异的发展,面向对象编程.面向接口编程.面向组件编程等等:这一系列的概念都是软件工程所追求的思想范畴,高类聚低耦合. 今天我要简谈的是面向对象里面非常重 ...
随机推荐
- ChatGPT保姆级注册教程
ChatGPT保姆级注册教程 最近几天OpenAI发布的ChatGPT聊天机器人火出天际了,连着上了各个平台的热搜榜.这个聊天机器人最大的特点是模仿人类说话风格同时回答大量问题. 有人说ChatGPT ...
- YonBuilder移动开发平台App拉起第三方应用
在App的开发过程中,有一种常见场景,就是拉起第三方app,那么使用YonBuilder移动开发做app的时候,是怎么拉起第三方App的呢,下边我们讲一下步骤. 我们以安卓应用打开支付宝为例进行说明: ...
- springcloud微服务搭建demo
软件 版本 IDEA 2022.3.1 <兼容maven 3.8.1及之前的所用版本> JDK 1.8_64 Maven 3.8.2 本demo只使用了服务发现与注册.Feign调用及负载 ...
- Python学习常见问题及其解决方案(1)
1.ModuleNotFoundError: No module named 'urllib2' 解决方案: 1)https://blog.csdn.net/weixin_45598506/artic ...
- catkin_make设置编译并行数
export ROS_PARALLEL_JOBS='-j2 -l2'
- JZOJ 1082. 【GDOI2005】选址
\(\text{Problem}\) 很久以前,在世界的某处有一个形状为凸多边形的小岛,岛上的居民们决定建一个祭坛,居民们任务祭坛的位置离岛的顶点处越远越好. 你的任务是求凸多边形内一点,使其与各顶点 ...
- CCRD_TOC_2008年第4期
中信国健临床通讯 2008年第4期 目 录 类风湿关节炎 1. 大型系统评价分析:生物制剂与传统DMARD联用是MTX难治性RA患者的最佳治疗策略 Donahue KE, et al ...
- 基于官方Chrome、Firefox软件包得到便携版
1. 前言 安装好操作系统后,一般系统都带有浏览器,比如,Windows 10 自带Edge.Ubuntu 自带Firefox等等.有的时候我们想使用一下别的浏览器或者是别的版本(如,开发者版),可是 ...
- 线程join detach 僵尸线程
进程死亡后,由父进程负责回收PCB资源,不回收则会出现僵尸进程 对于线程来说,任何一个线程都可以回收另一个线程的资源 在子线程终止后,通常在主线程中通过pthread_join来回收子线程的资源,获取 ...
- MSF后渗透常用命令
一.在meterpreter命令行下常用的操作 ps # 查看当前活跃进程 migrate pid # 将Meterpreter会话移植到进程数位pid的进程中 execute -H -i -f cm ...