对Top500超级计算机排名"非议"
2003年世界最快超级计算机日本的地球模拟器每秒运算次数高才35.8万亿次,其成本也高达2.5亿美元,现在仅仅过去7年,单单单个NVIDIA的GPU每秒运算次数就超过万亿次,成本只有几百美元,科技尤其是半导体科技发展太快了
没什么不同,当然是个计算机爱好者都知道CPU擅长整数计算,GPU擅长浮点并行计算,现在的GPU比CPU复杂多了,超级计算机的发展就是关键核心CPU和GPU的发展,其他都是浮云,现在就是家庭里的个人PC比起十几年前的超级电脑速度快多了,就像现在的什么天河1A世界第一好像很牛B,十几年后可能连普通家庭PC都比不上。换句话说,人人都在用超级电脑,只要你懂得让它干什么。用超级电脑当年磁带机的时候还可以吹一吹,现在科技大爆炸时代在摩尔定律下实在没什么好吹的(以下一点科普知识)
-------------------------------------------------------
CPU发展趋势:不断的整合功能模块
通过前面详细的介绍我们可以发现,CPU的发展趋势就是不断去整合更多的功能和模块,从协处理器、到缓存、再到内存控制器甚至整个北桥。
目前AMD和Intel的所有主流CPU都已经整合了内存控制器,Intel最新的Lynnfield(Core i7 8XX和i5 7XX)已经整合了包括PCIE控制器在内的整个北桥,而Clarkdale(Core i5 6XX和i3 5XX)更是将GPU也整合了进去。
★ GPU发展趋势:不断的蚕食CPU功能
至于GPU,从某种意义上来说,它本身就是一颗协处理器,主要用于图像、视频、3D加速。之所以这么多年来没有被CPU所整合,是因为GPU实在太复杂了,以现有的制造工艺限制,CPU不可能去整合一颗比自身规模还要大很多的GPU,它顶多只能整合一颗主流中低端的GPU,而这样的产品只能定位入门级,无法满足游戏玩家和高性能计算的需要。
GPU从诞生至今一步步走来,就是在不断蚕食着原本属于CPU的功能,或者说是帮助CPU减负、去处理哪些CPU并不擅长的任务。比如最开始的T&L(坐标转换与光源)、VCDDVDHDBD视频解码、物理加速、几何着色。而今后和未来,GPU将夺走一项CPU最重要的功能——并行计算、高精度浮点运算
GPU前途似锦:浮点运算的未来
我们知道,CPU第一个整合的就是专门用来加速浮点运算的协处理器,此后历代SSE指令集也都是为了加强CPU的SIMD(单指令多数据流)浮点运算性能。而GPU打从一开始就被设计成为了SIMD架构(至今Cypress也还是这种架构),拥有恐怖浮点运算能力的处理器。当今GPU的浮点运算能力更是达到多核CPU的几十倍甚至上百倍!
CPU永远都赶不上GPU的发展速度,因此最适合进行浮点运算的显然是GPU,CPU继续扩充核心数目已经变得毫无意义,因此整个业界都在想方设法的发掘GPU的潜能,将所有的并行计算任务都转移到GPU上面来。即便是Intel也看到了GPU广阔的前景,因此着手研发GPU。
此前由于API和软件的限制,GPU在并行计算方面的应用举步维艰、发展缓慢,NVIDIA孤身推广CUDA架构虽然小有成就但孤掌难鸣。好在OpenCL和DirectCompute两大API的推出让GPU并行计算的前途豁然开朗,此时ATI和NVIDIA又重新站在了同一起跑线上,那么很显然谁的架构更适合并行计算,那么谁就能获得更强的性能和更大范围的应用,通过本文的分析可以看出,ATI的架构依然是专注于传统的图形渲染,并不适合并行计算;而NVIDIA的架构则完全针对通用计算API和指令集优化设计,确保能发挥出接近理论值最大效能,提供最强的浮点运算性能!#p#page_title#e#
★ CPU面临拐点:强化整数性能,浮点运算交给GPU
AMD同时拥有CPU和GPU,而且AMD在技术方面往往能够引领业界,因此其未来发展规划非常值得大家思考。根据AMD最新的产品路线图来看,其下一代的高端CPU核心Bulldozer(推土机),它最大的亮点就是每一颗核心拥有双倍的整数运算单元,整数和浮点为非对称设计:
在一个推土模块里面有两个独立的整数核心,每一个都拥有自己的指令、数据缓存,也就是scheduling/reordering逻辑单元。而且这两个整数单元的中的任何一个的吞吐能力都要强于Phenom II上现有的整数处理单元。Intel的Core构架无论整数或者浮点,都采用了统一的scheduler(调度)派发指令。而AMD的构架使用独立的整数和浮点scheduler。
据AMD透露,目前存在于服务器上的80%的操作都是纯粹的整数操作,因此AMD新一代CPU大幅加强了整数运算单元而无视浮点运算单元。而且,随着CPU和GPU异构计算应用越来越多,GPU将会越来越多的负担起浮点运算的操作,预计未来3-5年的时间内,所有浮点运算都将会交给最擅长做浮点运算的GPU,这也就是推土机加强整数运算的真正目的。
当然,AMD和Intel都会推出CPU整合GPU的产品,不管是胶水还是原生的解决方案,其目的并不是为了消灭显卡和GPU,而是通过内置的GPU为CPU提供强大的浮点运算能力。但由于制造工艺所限,被CPU所整合的GPU不是集成卡就是中低端,只能满足基本需求。所以想要更强大的游戏性能和并行计算性能的话,专为浮点运算而设计的新一代架构的GPU产品,才是最明智的选择。
所以说,CPU和GPU,谁也不可能取代谁,双方是互补的关系,只有CPU和GPU协同运算,各自去处理最擅长的任务,才能发挥出计算机最强的效能。CPU会整合GPU的,但仅限中低端产品;GPU会取代CPU进行浮点运算的,但它仍然需要CPU来运行操作系统并控制整个计算机。只有当制造工艺发达到一定程度时才有可能将CPU和GPU完美融合在一起,到时候是CPU整合GPU还是GPU整合CPU都很难说,但谁被谁整合已经不重要了
Linpack测试简介
Linpack是国际上使用最广泛的测试高性能计算机系统浮点性能的基准测试。通过对高性能计算机采用高斯消元法求解一元N次稠密线性代数方程组的测试,评价高性能计算机的浮点计算性能。Linpack的结果按每秒浮点运算次数(flops)表示
-----------------------------------------------------
就是个单纯的浮点测试,说它测试不全面也没错,现在有超级GPU超恐怖浮点计算能力的加入,可以想见超级计算机的Linpack测试速度一日千里
什么玩意!这个计算机排名也超过十年了吧.怎么从来没有什么质疑.偏偏中国第一了就来质疑了?奥运会金牌排名几十年没有疑问.偏偏中国得到第一.就弄出来个什么“奖牌排名”?是不是不要脸到了极点了?质疑吧.质疑吧.质疑到你没有遮羞步的时候.看你还质疑什么
------------------------------------
搞笑,这个排名早就有人质疑了,国内没有报道,天涯没有人发帖给你知道而已,现在中国第一了,大家感兴趣了有人发个帖,如果以前发个Linpack质疑帖你会关心么?(给个帖提醒一下,对Linpack质疑远在什么天河1A之前,看以下报道的日期)
#p#page_title#e#
Linpack:旧有评价体系的注定死亡
DoSERV服务器在线 3月29日原创报道:大约在35年前,同样也是一个四月,美国Argonne国家实验室应用数学所主任Jim Pool提出,应该建立一套专门解决线性系统系统问题的数学软件及其模型——直到现在,在一系列关于Linpack的纪年表中,Jim Pool的名字仍然高居榜首。随后,他在当年六月的一次学术会议上正式提出了自己对线性系统软件包(Linear system package),也就是Linpack的想法。在此之后,Linpack这一想法正式被美国国家科学基金会所采纳,Cleve Moler及其同时在没改过国家科学基金会的资助下,开发了Linpack和EISPACK的Fortan子程序库,这两个程序库作为解决线性方程和特征值问题的“法宝”代表了上世纪七十年代矩阵计算软件的最高水平。
国际上一般就是把用Linpack基准测试出的最高性能指标作为衡量机器性能的标准。之所以选择Linpack,主要是因为它使用广泛而且它的指标几乎可以在所有参加测试的系统上得到。虽然这些指标并不反映给定系统的全部系统性能,但可以作为对系统峰值性能的一个修正。
至目前为止, LINPACK 还是广泛地应用于解各种数学和工程问题。 也由于它高效率的运算, 使得其它几种数学软件例如 IMSL、 MATLAB 纷纷加以引用来处理矩阵问题, 所以足见其在科学计算上有举足轻重的地位。
但是,在高性能计算界已经有人对其提出了不同的看法,而这些质疑声音正在变得越来越强大,并正在动摇Linpack在高性能计算界的影响力。
Linpack的原理与特色
Linpack的出现基本上可以称之为力学(Mechanics)分析软件的鼻祖,并建立了数学软件的比较机制,与此同时,提供软件链接库, 允许使用者加以修正以便处理特殊问题,兼顾了对各计算机系统的通用性, 并提供高效率的运算——基本上来说,Linkpack代表了线性计算评价标准的最高水平。
事实上,Linpack现在在国际上已经成为最流行的用于测试高性能计算机系统浮点性能的benchmark。通过利用高性能计算机,用高斯消元法求解一元N次稠密线性代数方程组的测试,评价高性能计算机的浮点性能。
Linpack测试包括三类,Linpack100、Linpack1000和HPL。Linpack100求解规模为100阶的稠密线性代数方程组,它只允许采用编译优化选项进行优化,不得更改代码,甚至代码中的注释也不得修改。Linpack1000要求求解规模为1000阶的线性代数方程组,达到指定的精度要求,可以在不改变计算量的前提下做算法和代码上做优化。HPL即High Performance Linpack,也叫高度并行计算基准测试,它对数组大小N没有限制,求解问题的规模可以改变,除基本算法(计算量)不可改变外,可以采用其它任何优化方法。前两种测试运行规模较小,已不是很适合现代计算机的发展,因此现在用较多的测试标准为HPL,而且阶次N也是linpack测试必须指明的参数。
HPL是针对现代并行计算机提出的测试方式。用户在不修改任意测试程序的基础上,可以调节问题规模大小N(矩阵大小)、使用到的CPU数目、使用各种优化方法等来执行该测试程序,以获取最佳的性能。HPL采用高斯消元法求解线性方程组。当求解问题规模为N时,浮点运算次数为(2/3 * N^3-2*N^2)。因此,只要给出问题规模N,测得系统计算时间T,峰值=计算量(2/3 * N^3-2*N^2)/计算时间T,测试结果以浮点运算每秒(Flops)给出。#p#page_title#e#
Linpack的局限:浮点与线性计算
Cleve Moler所为人熟知的原因并非他对Linpack计算所作出的努力,几乎每一个数学系毕业的学生(包括我本人这个数学系毕业的不才学生),几乎对Cleve Moler的名字都十分熟知,因为他开发了对数学计算,尤其是计算数学产生重大影响的MATLAB:
到70年代后期,身为美国New Mexico大学计算机系系主任的Cleve Moler,在给学生讲授线性代数课程时,想教学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序。Cleve Moler给这个接口程序取名为MATLAB。
MATLAB时至今日已经是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,在数值计算方面无比强大,可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域——但是,在初期,无论是Linpack和MATLAB都是以线性计算为基础的,这从Linpack的原名即可得知。
另一方面,Linpack专注于浮点运算,首先,我们要明白,数和计算通常是按“整数”或“浮点数”进行划分的。整数计算使用计算的所有位(如32位)记录整数“值”。而浮点计算则使用计算的一部分位表示“值”(如23位),另一部分位表示指数(8位)。由于一部分位用来表示指数,所以浮点计算得出的值可以比整数计算得出的值大很多或是小很多。换句话说,对于给定数量的位,浮点计算的精度没有整数计算高,但浮点计算结果的范围却比整数计算大很多——后面我们随提及为何整数计算并非如人们所传言无所大用。
这也就是说,Linpack几乎可以被人做是一个面向数学计算领域的线性计算方法及评价标准,这也就意味着,尽管Linpack数据具有极强的评价能力,却正显得有些不合时宜了。
对于大部分高性能计算用户来说,HPC被用来进行大量的科学计算,所以对于诸如石油勘探、地质勘测、天气预报等用户来说,非常注重服务器的浮点计算能力,而对于整数运算能力却并不太关心,整数运算能力是指系统对于16位以内数据的计算精确度和速度,而浮点运算能力代表的是一个计算机系统对于16位以上数据的计算速度和结果精确度。所以,对于高性能计算机的用户来说,在采购服务器的时候,对于厂商提供的SPECfp2000浮点运算基准测试要给予重点关注,而对于一般的商业用户来说,一个计算机系统的浮点运算能力强或者弱,并没有太大的实质意义,这个用户群体更应该关注诸如TPC-C等在线事务交易处理性能。
另一方面,Linpack的出现主要是因为上世纪七十年代线性代数方程组在各个领域的应用十分广泛,所以该软件包就很自然地称为测试各种机器性能的测试程序,但是随着科学计算的深入,更多数学方法出现在人们面前,即使是线性计算方面的计算方法也获得了强大的发展。
更有甚者,尽管Linpack作为数学型的测试程序现在仍很有生命力,但作为实际求解线性代数问题的软件包甚至都已经开始落伍了:
1992年出现了代替Linpack以及EisPACK(特征值软件包)的LAPACK,它使用了数值线性代数中最新、最精确的算法,同时采用了大型矩阵分解成小矩阵的方法从而可有效地使用存储器。LAPACK是建立在BLAS1 ,BLAS2,BLAS3的基础上的,其中BLAS2执行矩阵-向量运算,BLAS3执行矩阵-矩阵运算。
随后出现的是ScaLAPACK,其被称为LAPACK的增强版,主要为可扩放的,分布存储的并行计算机而设计的。ScaLAPACK支持稠密和带状矩阵上各类操作,诸如乘法,转置和分解等。在国际上,ScaLAPACK例程可以加入多个并行算法,并且可根据数据分布,问题规模和机器大小选择这些算法,然而用户却不必关心这些细节。
高性能计算的更多基准测试方法
相较于Linpack,更多的高性能计算基准测试方法正在逐步应用到测试中,以更加可观的衡量和对比不同高性能计算系统在各种不同应用上面的性能特征。
以SPECfp_rate_base2006为例,其是一项计算密集型性能指标评测,用于衡量计算机系统在运行大量并行任务时的浮点吞吐性能。性能指标评测包括从实际最终用户应用开发而来的一组十四个浮点工作负载。通过将性能指标评测的拷贝数量设置成操作系统可识别的逻辑硬件内核数量而同时运行多个性能指标评测拷贝来测量系统吞吐率。报告的性能得分是按工作/小时测量的系统吞吐率的衡量标准。得分越高表示性能越好。
从分类上来说,综合型、核心型、数学计算型、应用型和并行计算型等,上面所说的SPEC计算与Whetstone和Dhrystone即属于综合型,不过在综合型中,后两种基准测试方法由于编译程序较为敏感,造成了对用户程序性能预测的不确定性,因此已经基本上被不同类型的SPEC计算所取代,SPEC最早是作为NCGA(National computer graphics association)的一个小组20世纪80年代创立的,第一组基准测试程序叫SPEC89,包含10个程序; SPEC92扩从到20个程序,6个整数程序,和14个浮点程序分别称为SPECint92,SPECfp92。随后SPEC又发布了一些新的基准测试程序(如SPEC95,SPEChpc96,SPECweb96, SPEC2000等)。SPEC原主要是测试CPU性能的,现在强调开发能反映真实应用(如实际负载等)的基准测试程序,并已推广至客户/服务器计算,商业应用,I/O子系统等。
数学计算型基本上可以等同于Linpack计算+FFT(FFT有浮点的(就是普通的FFT),有整数的(就是离散化的FFT)),而核心型的主要包括Livemore、Fortran Kernals、NASA NAS等,而并行的主要为NPB和PARKBENCK,具体的测试方式介绍在此就不在赘述,可以从http://www.netlib.org/liblist.html查到,可以在其中的“Benchmark Programs and Reports”页面看到比较全面的测试介绍