异构计算发展现状分析.docx

上传人:b****5 文档编号:8375596 上传时间:2023-01-30 格式:DOCX 页数:35 大小:1.80MB
下载 相关 举报
异构计算发展现状分析.docx_第1页
第1页 / 共35页
异构计算发展现状分析.docx_第2页
第2页 / 共35页
异构计算发展现状分析.docx_第3页
第3页 / 共35页
异构计算发展现状分析.docx_第4页
第4页 / 共35页
异构计算发展现状分析.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

异构计算发展现状分析.docx

《异构计算发展现状分析.docx》由会员分享,可在线阅读,更多相关《异构计算发展现状分析.docx(35页珍藏版)》请在冰豆网上搜索。

异构计算发展现状分析.docx

异构计算发展现状分析

异构(众核)计算发展现状分析

目录

1.1众核计算发展现状3

1.1.1通用计算GPU发展历程4

1.1.2通用计算GPU硬件产品12

1.1.3通用计算GPU编程环境22

1.1.4IntelXeonPhi协处理器27

众核计算发展现状

AMD多核处理器目前最多16个核心,Intel处理器最多18个核心,由于功耗、制造工艺等方面的困难,核数的增加越来越慢。

而众核处理器比多核处理器拥有更多的计算核心,目前主流的众核处理器最少有60个的核心,最多有4992个核心。

目前最流行的众核处理器有三种:

nVidiaGPU、AMDGPU、IntelXeonPhi。

2014年12月10日,NVIDIA正式发布了配置24GB显存的双处理器版TeslaK80,拥有4992个处理核心,双精度浮点计算能力最高可达2.91TFLOPs,内部存储器带宽达480GB/s。

图:

TOP500中使用协处理器的系统越来越多

图:

2014年底HPCTOP500协处理器使用分布图

高性能计算机TOP500名单每年发布两次,它列出世界范围内计算能力最强的500套计算机。

这个名详细单统计入围计算机的排名、所在地点、制造商、计算机型号、国家或地区、安装年份、应用领域、处理器核心数量、LINPACK实测峰值、计算机理论峰值、所用网络设备等详尽信息。

这个名单从1993年开始发布,目的是研究计算机技术的历史演化,为计算制造商、用户提供参考。

从TOP500的统计数据中可以看出,自2007年至2012年12月,使用各类加速卡的超级计算机从1套增加到62套,其中IBMCell2套,ATIRadeon2套,NVIDIAFermi48套,IntelXeonPhi7套,NVIDIAKepler2套。

按装机套数统计,带加速卡的超级计算机比重为12.5%。

在所有加速卡中,NVIDIA公司生产的GPU占绝对优势,份额达到80.6%。

2010年夺得第2名成绩的星云超级计算机和2011年夺得第1名的天河超超级计算机,都使用了GPU加速卡。

2012年名单中的第1名Titan使用18000余块最新NVIDIAGPUK20X。

2013年排名第一的天河二号使用了IntelXeonPhi。

可以预见,在未来几年的超级计算机和高性能计算中,GPU加速仍将扮演重要角色。

IBMCell的份额会持续下降,借助Intel的大力推广,IntelXeonPhi的份额会上升。

由于母公司AMD的变动,ATIRadeon的份额不会有大幅的增加。

未来一两年,众核高性能计算市场是三家争霸。

通用计算GPU发展历程

GPU通用计算不是偶然出现的,它是传统计算机芯片技术发展的必然结果。

CPU处理器经过几十年的发展,逐渐遇到几个非常困难的技术问题。

此时专为视觉计算设计的图形处理单元(GPU)技术已经成熟,GPU的设计体系恰好能够在一定条件下解决CPU的技术难题,先前只用来处理图形的GPU找到了高性能计算这个新的领域,称为通用计算GPU(GeneralPurposeGPU)。

CPU处理器发展历程

计算机诞生的几十年以来,CPU芯片技术一直按照摩尔定律飞速发展,每隔十八个月,单位芯片面积上的晶体管数量就增加一倍,性能提高一倍。

下图统计了1970年至2010年主要型号CPU包含的晶体管数量,可以看出增加速度近似为一条直线。

提高CPU性能的主要手段为提高时间频率,从下图可以看出,在2005年以前,时间频率基本上线性增加

在此过程中解决了一个又一个的技术难题,如时钟频率、超标量架构、流水线技术等。

20世纪80年代精简指令型CPU诞生了,精简指令型CPU不仅精简了指令系统,还采用了一种叫做“超标量和超流水线结构”,大大增加了并行处理能力。

流水线是Intel首次在486芯片中开始使用的。

流水线的工作方式就象工业生产上的装配流水线。

在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。

经典奔腾每条整数流水线都分为四级流水,即指令预取、译码、执行、写回结果,浮点流水又分为八级流水。

超标量是通过内置多条流水线来同时执行多个处理器,其实质是以空间换取时间。

而超流水线是通过细化流水、提高主频,使得在一个机器周期内完成一个甚至多个操作,其实质是以时间换取空间。

例如Pentium4的流水线就长达20级。

将流水线设计的步(级)越长,其完成一条指令的速度越快,因此才能适应工作主频更高的CPU。

然而,超过一定点之后,不断的加速时钟频率就会开始进入收益递减的阶段。

这就是为什么一千兆赫的芯片的运行速度达不到500兆赫的两倍那么快的原因。

时钟在从头至尾的工作中必须协调芯片上数百万个晶体管的工作,这产生了它自己的耗费。

时钟的频率越高,耗费就越大。

并且伴随着功耗的不断增加和仿存能力的限制,CPU处理能力已经存在了一定的瓶颈。

2005年之后CPU时间频率没有显著提高。

这是因为CPU芯片技术遇到难以解决的困难:

内存墙和功耗墙。

内存延迟和内存墙:

计算机的内存是用动态存储电路(DRAM)实现的。

DRAM存储一位信息只使用一个晶体管。

DRAM的好处是密度大,坏处是有很大的延迟。

静态存储电路(SRAM)存储一位信息使用六个晶体管,好处是基本没有延迟,但是密度很小,容量做不上去。

所以,现在的计算机内存使用的都是DRAM。

DRAM的延迟是个物理极限,除非有革命性的突破,很难减小。

内存延迟是指内存在接到访问命令后,要等一段时间,才能传回数据。

这个延迟在100纳秒左右。

过去30年,DRAM内存的传输速度(仅仅是传输数据的速度)有所提高,但是DRAM的延迟始终没有什么改善,反而有继续扩大的趋势。

最新的内存标准DDR3,在延迟上比老的DDR2标准还要大一点。

虽然DDR3标准的内存条工作电压低于DDR2,但是功耗却明显比DDR2要高,以至于需要散热片。

CPU速度按照摩尔定律提高并不意味着CPU的实际性能也有相应的提高。

过去40年,内存的速度提高不大,延迟没有降低。

内存延迟已经成为制约CPU实际处理能力的瓶颈,这个问题被称为内存墙(MemoryWall)。

早在十几年前,少数顶尖科学家就非常重视“内存墙”(MemoryWall)的问题。

尽管“内存墙”问题非常严重,但是,大家对于如何解决“内存墙”问题毫无头绪,还是只在CPU核心做文章。

结果就是把CPU核心做得越来越复杂,越来越烫,也越来越多。

现在的主流通用CPU功耗基本上都在100瓦以上,甚至高达200瓦以上。

CPU的高耗电已经成为一个巨大环境问题。

一台PC服务器最少200瓦,一年的耗电就有1千7百千瓦时。

据估计,Google的服务器群电费每年最少有5亿美元。

高功耗是“内存墙”问题导致的副产品:

因为无法提高性能,所以迫不得已使用高功耗的高速电路。

因为“内存墙”,目前通用CPU工业的发展已经陷入了停滞状态。

Intel推出的许多款新CPU,有更多,更快,也更烫的CPU核心,但是实际处理性能几乎没有任何进步。

“内存墙”是全世界学术界和工业界研究的重点。

解决“内存墙”问题的传统技术是使用CPU缓存。

30年来,CPU缓存一直也是研究的重点,但是少有新发现。

全世界所有CPU缓存的设计都大同小异,都是20年前的技术。

我们很幸运地发现了一个内存访问的新规律,并发明了一个新CPU缓存算法和电路。

新的CPU缓存可以降低网络应用的缓存失误率高达50%,降低三维动画和数字视频的失误率超过30%。

这是30年来计算机体系结构领域最大的突破。

CPU核心和缓存:

通用CPU一般由两部分组成:

CPU核心和CPU缓存。

CPU缓存是一小块高速存储模块,使用静态存储电路SRAM制造,做在和CPU核心同一块硅片上。

CPU缓存延迟短,速度快,但是容量很小。

从CPU缓存中读取数据一般只需要1到10个周期,也就是四分之一纳秒到5纳秒不到。

相比之下,从内存读入数据,最少需要120纳秒,一般要150纳秒以上。

CPU缓存容量相对于内存是非常小的。

CPU缓存只能存储整个内存数据的很小一部分。

当数据在缓存中发现,被称为缓存命中(CacheHit);当数据不在缓存中,被称为缓存失误(CacheMiss)。

缓存命中时,CPU核心就不需要去内存取数据,因此可以高速执行。

缓存失误时,CPU必须从内存读取数据。

由于内存的延迟,CPU核心必须停下来等待数据。

CPU缓存的性能是用失误率(missrate)或者命中率(hitrate)来衡量的。

不同的程序,CPU缓存的失误率不一样,一般在1%或者2%左右。

科学计算程序的缓存效果好,失误率低,可以低于1%。

三维动画,多媒体,数字视频和网络程序的CPU缓存效果差,失误率有时甚至超过2%。

因此,这些程序的运行速度慢。

CPU缓存减少内存访问次数的效果是很明显的,90%以上的数据读取都可以在缓存中完成。

但是,因为内存延迟相对于CPU核心的速度差实在太大,以至于1%的CPU缓存失误率依然会导致CPU核心在50%以上的时间里是空闲的。

一次内存访问的耗时相比于CPU核心的运算速度的比率叫做CacheMissPenalty(缓存失误惩罚比)。

这个Penalty,目前已高于500,很快就会到1000以上。

也就是说,一次缓存失误相当于执行几百到一千条指令。

根据IBM研究所的数据,平均每执行60条指令,就会有一次缓存失误,也就是一次内存访问。

一个低端的1GHz的单核CPU执行60条指令只需60纳秒,而内存访问最少耗时120纳秒。

那么,CPU将在三分之二的时间里是空闲的。

当内存端口满负荷时,CPU核心大部分时间都是空闲的。

更快,更多的CPU核心,也只是空闲更多而已,对提高CPU的实际性能完全没有任何意义。

现在的CPU都是尽可能地设计更多的内存端口,使用上千根管脚。

但是,由于芯片封装的限制,继续大幅增加CPU的管脚数目是很困难的。

依靠增加内存通道数来提高CPU性能这条路走不通。

CPU缓存是对CPU性能影响最大的部件。

缓存的容量越大,失误率越低。

但是,增加缓存的容量并非一个可行的办法。

首先,CPU缓存已经占据了CPU芯片面积的50%以上,晶体管的80%以上。

某些高端CPU,缓存使用的晶体管更是高达90%。

继续增加CPU缓存的容量已经不太可能。

更重要的是,加大缓存的容量,失误率降低并不多。

Intel的Atom芯片的缓存只有512KB,而i7芯片的缓存高达8MB,是Atom芯片的16倍。

由于加大缓存容量,性能提高不明显,使得学术界和工业界在CPU设计的思路上,陷入了一个两难的处境。

CPU的设计思路分为对立的两派:

一派认为应该设计更大的CPU缓存,一派则是更多更快的CPU核心。

两派的想法都有各自的道理,却都解决不了问题。

支持更大缓存的一派的出发点是,CPU核心大部分时间是空闲的,增加CPU核心没有意义。

支持更多CPU核心的一派的逻辑基础是,增加CPU缓存,并不能改善缓存的失误率。

Intel是属于加大缓存的一派,Intel的CPU核心相对于AMD一直比较少。

GPU(图形处理器)是属于后一派,GPU有成百上千个核心。

IBM则是两边都下注,IBM既有多核但缓存小的CPU比如Cell芯片,又有只有双核,但是带很大缓存的,比如Power6芯片。

提高CPU缓存性能的希望在于设计更“聪明”的缓存替换算法,王去非博士提出PrincipleofShortLifetime,并据此设计的WLRU算法能极大地提高CPU的性能。

功耗墙:

25年间Intel八代微处理器的时钟频率和功耗的增长趋势。

两者的增长几乎保持了将近20年,但近几年来突然缓和下来。

其原因在于两者是密切相关的,而且功耗已经到达了极限,无法再将处理器冷却下来。

占统治地位的集成电路技术是CMOS(互补型金属氧化半导体),其主要的功耗来源是动态功耗,即在晶体管开关过程中产生的功耗。

动态功耗取决于每个晶体管的负载电容、工作电压和晶体管的开关频率:

功耗=负载电容×电压2×开关频率

为什么时钟频率增长为1000倍,而功耗只增长为30倍呢?

因为功耗是电压平方的函数,能够通过降低电压来大幅减少,每次工艺更新换代时都会这样做。

一般来说,每代的电压降低大约15%。

20多年来,电压从5V降到了1V。

这就是功耗只增长为30倍的原因所在。

目前的问题是如果电压继续下降会使晶体管泄漏电流过大,就像水龙头不能被完全关闭一样。

目前40%的功耗是由于泄漏造成的,如果晶体管的泄漏电流再大,情况将会变得无法收拾。

为了解决功耗问题,设计者连接大设备,增加冷却,而且将芯片中的一些在给定时钟周期内暂时不用的部分关闭。

尽管有很多更加昂贵的方式来冷却芯片,而继续提高芯片的功耗到300瓦特,但对桌面计算机来说成本太高了。

由于计算机设计者遇到了功耗墙问题,他们需要开辟新的路径,选择不同于已经用了30多年的方法继续前进。

这就进入多核时代。

GPU通用图形处理器的发展

GPU计算是指利用图形卡来进行一般意义上的计算,而不是传统意义上的图形绘制。

时至今日,GPU已发展成为一种高度并行化、多线程、多核的处理器,具有杰出的计算功率和极高的存储器带宽,如图所示。

图:

CPU和GPU的每秒浮点运算次数和存储器带宽

CPU和GPU之间浮点功能之所以存在这样的差异,原因就在于GPU专为计算密集型、高度并行化的计算而设计,上图显示的正是这种情况,因而,GPU的设计能使更多晶体管用于数据处理,而非数据缓存和流控制,如图所示。

图:

GPU中的更多晶体管用于数据处理

更具体地说,GPU专用于解决可表示为数据并行计算的问题——在许多数据元素上并行执行的程序,具有极高的计算密度(数学运算与存储器运算的比率)。

由于所有数据元素都执行相同的程序,因此对精密流控制的要求不高;由于在许多数据元素上运行,且具有较高的计算密度,因而可通过计算隐藏存储器访问延迟,而不必使用较大的数据缓存。

数据并行处理会将数据元素映射到并行处理线程。

许多处理大型数据集的应用程序都可使用数据并行编程模型来加速计算。

在3D渲染中,大量的像素和顶点集将映射到并行线程。

类似地,图像和媒体处理应用程序(如渲染图像的后期处理、视频编码和解码、图像缩放、立体视觉和模式识别等)可将图像块和像素映射到并行处理线程。

实际上,在图像渲染和处理领域之外的许多算法也都是通过数据并行处理加速的——从普通信号处理或物理仿真一直到数理金融或数理生物学。

在上述领域,GPU计算已经获得了成功的应用,并取得了令人难以置信的加速效果。

而且,随着大数据存储技术的成熟和深度学习模型理论上的突破,GPU加速计算在基于深度神经网络模型的图像分类、人脸识别、语音训练等新型领域也表现得越发活跃,有着不错的加速。

图:

GPU的应用加速效果

图:

GPU加速计算的创新领域

GPU计算得到了业界的广泛支持,NVIDIA、AMD、INTEL等都对芯片市场的微妙变化和GPU计算的技术发展前景都极为关注,并展开了激烈的技术竞赛。

NVIDIA最早提出了GPU计算概念。

2007年2月,NVIDIA正式发布了CUDA架构(ComputeUnifiedDeviceArchitecture统一计算设备架构),这也是NVIDIA确定的GPU计算产品的正式名称。

CUDA是GPU计算产品的一个新的基础架构,一个完整的GPU计算解决方案,它采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案;它提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。

CUDA是世界上第一个针对GPU的C语言开发环境的GPU计算产品,其工具集的核心是一个C语言编译器,利用它可以最大限度地提升流处理单元浮点运算能力。

CUDA架构的成功尝试,为业界GPU计算的研发提供了宝贵的借鉴。

早在2006年收购ATI之初,AMD就做出了一个重大举动,这就是它所发布的GPU计算“StreamProcessor”(流处理器),率先将GPU计算技术引入普通应用阶段。

AMD也提出了以Fusion为研发代号的硅芯片整合计划。

Fusion提供基于融合处理器的GPU计算平台融合,二个Fusion处理器一起连接可以达到并行GPU的关系,更适合CPU的代码将在Fusion处理器当中的CPU部分被执行,而更适合GPU的代码也将在Fusion处理器的GPU部分被执行。

作为全球最大的CPU供应商,Intel早已经敏锐地意识到,GPU通用计算将给PC带来革命性的变化。

Intel采取了与NVIDIA以GPU为核心的截然不同的研发理念,将GPU计算纳入了CPU的发展轨道。

业界普遍对Intel首款Larrabee芯片充满了期待。

Larrabee在硬件设计上,采用微内核设计,内核逻辑采用顺序执行结构(InOrder),可同时执行4个线程。

在指令体系上,Larrabee最大的优点就是与IA架构(X86)处理器的互换性,它使用经过调整的X86指令,使现行X86计算程序可以直接被Larrabee运算执行。

GPU计算的发展前景一片光明,也必将在更多的领域内得到更广泛的支持和应用。

通用计算GPU硬件产品

目前,GPU厂商分成两大阵营,NVIDIA公司作为全球专业的GPU生产厂商,力推其Tesla系列的高性能计算产品,以新发布的Fermi为其拳头产品。

AMD并购ATI以后,致力于把GPU推上高性能计算的发展道路,其推出的Fusion的产品APU,主张把CPU与GPU融合,与NVIDIA公司一决高下。

NVIDIAFermi架构

Fermi架构在即G80架构之后的又一重要的GPU架构。

G80架构在时NVIDIA公司最初的通用计算GPU架构,既可以做图形计算,也可以用来做并行计算。

GT200架构扩展了G80架构的特点和功能。

对于Fermi而言,是NVIDIA公司总结G80和GT200架构以后,几乎是重新设计的专门针对于通用计算的GPU架构。

Fermi的设计采纳了用户在使用G80和GT200架构时候给出的建议。

Fermi的主要设计针对于以下几点:

单精度的计算大概是桌面CPU的10倍的时间左右,并且一些应用需要GPU提供更强的双精度运算。

●ECC的添加,使得内存有容错的能力。

●有些并行计算并不一定能使用到sharedmemory,所以更多的需求是在内存访问中加上缓存。

●有些CUDA程序需要超过16KB的SMsharedmemory来加速他们的运算。

●用户需要更快的应用程序和图形显示之间的资源切换。

●用户需要更快的原子读写操作来加速并行程序运算。

TeslaGPU的20系列产品家族基于代号为Fermi的下一代CUDA架构,支持技术与企业计算所必备的诸多特性,其中包括C++支持、可实现极高精度与可扩展性的ECC存储器以及7倍于Tesla10系列GPU的双精度性能。

TeslaC2050与C2070GPU旨在重新定义高性能计算并实现超级计算的平民化。

尺寸规格

9.75英寸PCIex16规格

TeslaGPU的数量

1

CUDA核心数量

448

CUDA核心频率

1.15GHz

双精度浮点性能

515Gflops

单精度浮点性能

1.03Tflops

专用存储器总容量

TeslaC2050

3GBGDDR5

TeslaC2070

6GBGDDR5

存储器频率

1.5GHz

存储器接口

384位

NVIDIAKepler架构

NVIDIATesla并行计算架构从G80架构,Fermi架构到目前Kepler架构,每一代架构更新都带来产品工艺、计算能力、存储带宽等方面的巨大提升,与CPU相比GPU发展更快,具有更强大的计算能力。

2012年NVIDIA推出的Kepler架构,KeplerGK110由71亿个晶体管组成,是当时速度最快,架构最为复杂的微处理器,GK110应用于TeslaK20产品,开启了2496个流处理器。

KeplerGK110架构三个重要特点:

SMX新一代流式多处理器

KeplerGK110GPU的核心是SMX单元,集成了几个架构创新,这不仅使其成为有史以来功能最强大的流式多处理器(SM),而且最省电最具编程性。

SMX:

192个CUDA核、32个特殊功能单元(SFU)和32个加载存/储单元(LD/ST)

DynamicParallelism动态创建工作

在设计KeplerGK110架构的总体目标之一是使开发人员更容易更轻松地利用GPU的巨大处理能力。

为此新的DynamicParallelism功能,使KeplerGK110GPU能通过应用不返回主机CPU的数据而动态创建新的线程。

这使得多个程序能直接在GPU上执行,因为现在内核有能力独立承担所需的额外工作量。

任何内核可以启动另外一个内核,并创建额外的工作所需的必要流程、事件和依赖,而无需主机CPU的介入。

这种简化的编程模式更易于创建、优化和维护。

它还通过为GPU维持与传统CPU内核启动工作负载相同的语法,创建了一个程序员友好环境。

DynamicParallelism拓宽了目前在各领域利用GPU可以完成的应用程序。

应用程序可以动态启动中小型并行工作负载,这在以前系统开销是非常大的。

没有DynamicParallelism的情况下,CPU启动GPU上的每个内核。

有了该新功能KeplerGPU可以启动嵌套内核,不需要与CPU进行通信

Hyper-Q最大化GPU资源

Hyper-Q允许多个CPU核同时在单一GPU上启动工作,从而大大提高了GPU的利用率并消减了CPU空闲时间。

此功能增加了主机和KeplerGPU之间的连接总数,允许32个并发、硬件管理的连接,与Fermi相比,Fermi只允许单个连接。

Hyper-Q是一种灵活的解决方案,允许CUDA流程和消息传递接口(MPI)进程的连接、先前被假设依赖限制的现有应用程序,可以在不改变任何现有代码的情况下达到32倍的性能提升。

Hyper-Q在基于MPI并行计算机系统中使用会有较明显的优势。

通常会在为多核CPU系统中运行而创建基于MPI的传统算法。

由于以CPU为基础的系统可以有效处理的工作负载通常比使用GPU处理的要小,所以一般每个MPI进程中通过的工作量是不足以完全占据GPU处理器。

虽然可以一直发出多个MPI进程同时运行在GPU上,但是这些进程可能会由于假依赖会成为瓶颈,迫使GPU低于最高效率运行。

Hyper-Q消除了假依赖的瓶颈,并大幅提高了从系统CPU将MPI进程移动到GPU的处理速度。

Hyper-Q必定会是MPI应用程序性能提高的驱动。

Hyper-Q允许使用一个单独的工作队列同时运行所有的流程。

在Fermi模式下,由于单一的硬件工作队列引起的流程内的依赖,并发受限。

目前主流的TeslaKepler架构产品及相关指标如下所示:

主流NVIDIATeslaKepler架构产品线

TeslaK80

TeslaK40

TeslaK20X

TeslaK20

StreamProcessors

2*2496

2880

2688

2496

CoreClock

562MHz

745MHz

732MHz

706MHz

BoostClock(s)

875MHz

875MHz,810MHz

N/A

N/A

MemoryClock

5GHzDDR5

6GHzDDR5

5.2GHzDDR5

5.2GHzDDR5

MemoryBusWidth

2x384-bit

384-bit

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1