MCPLive > 杂志文章 > 英特尔的融核野心Xeon Phi全解析

英特尔的融核野心Xeon Phi全解析

2013-02-04张平《微型计算机》2013年1月下

在高性能计算领域,人们常听到的就是CPU使用了英特尔Xeon家族的产品。如果是异构计算的话,那么用于执行大规模并行计算的GPU很可能来自于NVIDIA的Tesla家族。但是从2012年开始,在超级计算机的榜单上,又加入了一个新的伙伴,英特尔全新的品牌—融核,英文名为Xeon Phi,内部集成了多达60多个微小的x86核心,也用于执行并行加速计算。Xeon Phi,这个神秘的品牌背后有什么故事?它的优势在哪里?相比NVIDIA的Tesla,Xeon Phi是蓄谋已久还是匆忙出击?

英特尔已经掌控了PC和超级计算机的绝大部分内容。作为业内主要的规则制定者,英特尔的触角伸向了几乎所有的部件,CPU、主板芯片、USB接口、PCI-E接口、内存规范、SATA规范、Direct X规范等。不过只有一个领域,英特尔一直都加入自己的势力,但却只能在低端市场徘徊。没错,这就是GPU——别急,这并不跑题,Xeon Phi的故事才刚刚开始。

英特尔的融核野心Xeon Phi全解析

众核的诞生悲凉的Larrabee

GPU和CPU作为PC系统内部两大重要的性能来源设备,一直都是计算机顶级技术的代表。英特尔虽然在CPU业界大发雄威,但两次“进攻”高性能GPU市场都铩羽而归,终只能依靠定位入门级市场的集成芯片获取市场份额,并逐渐成为了PC市场上大也是低端的图形芯片提供商。集成GPU市场利润低薄,高端GPU市场利润肥厚——这一直是英特尔眼馋的对象。在上个世纪末的1998年,英特尔虽然出的首款独立显卡i740上市后取得了一定的成绩,但随后的i752在和NVIDIATNT系列产品的竞争中失败,于是英特尔彻底退出了独立显卡市场。

直到2004年4月,在当年的IDF上,英特尔当时的CTO做了题为“TheEraofTera”的演讲(意为“万亿次计算时代”),其中提到了一种重要的设计思想,叫做“众核”。在2004年,主流处理器还是单核心,架构也几乎没有为多核心扩展做出优化。在这个时候,英特尔提出的思想实在是太超前了:如果有2个CPU核心,可以称为双核;4个、8个到16个,可以称为多核;如果有32个以上的CPU核心在一起执行并行计算———这就是众核。当然,这里的众核指的并非传统意义上完整、庞大而复杂的x86核心,而是一些精简的小核心,大量的微型x86核心在一起并行计算。

2004年下半年,英特尔专门为众核产品的可行性进行了评估,并在2005到2009年之间正式推出了全新的英特尔独立GPU计划,代号为“Larrabee”。

Larrabee的设计思想和传统的GPU完全不同。传统的GPU脱胎于图形加速计算,其技术基础是为速3D计算而生,因此拥有诸如顶点渲染、像素渲染、ROP单元、纹理单元等编程性较弱、功能性较强的部件。并且,由于GPU执行图形计算的特性,部分部件属于功能型部件,只能执行指定任务,完全没有可编程性。因此每次DirectX升级,NVIDIA和AMD都要重新设计架构以适应新的DirectX带来的全新功能,并进一步扩大计算规模来应对接下来即将到来的巨大的图形计算压力。英特尔则不是这样,英特尔的CPU本身是完全自由的可编程设备,因此英特尔很想将这个特性也带入GPU。于是,英特尔开始考虑用砌x86核心的方法来设计GPU。

Larrabee实际产品图
Larrabee实际产品图

英特尔的想法是利用古老的PentiumP54C核心为基础设计单个执行核心,每个核心为双发射的顺序执行架构(这样设计可以节约大量的晶体管从而降低能耗),支持64bit指令,加入四路超线程单元和16路矢量ALU单元。矢量ALU的加入使得Larrabee不但可以执行图形计算,也可以执行单精度或者双精度计算。英特尔算,可以支持DirectX 8.0~11.1、未来的DirectX 12以及任意DirectX或OpenG版本——这是因为Larrabee是完全可编程架构,几乎不存在任何固定功能单(如果供电部分和接口不算的话)。在英特尔强大的编译器支持下,Larrabee可以无限升级到任何版本的DirectX。

但是问题并没有这么简单。Larrabee首先遇到的麻烦是研发速度过慢:要制造一颗以x86核心为基础、完全可编程的G PU需要耗费的时间实在是太惊人了,特别是英特尔几乎没有任何现代GPU的设计经验,因此Larrabee在软件和硬件的研发上相比之前的计划已经大大迟。到了2009年,英特尔经过全面的考量,认为使用Larrabee这样的x86众核架构来构造一颗全功能、高性能的GPU难度已经超乎想象。特别是对大量旧有图形标准的兼容以及本身架构在功耗和性能上的调整,让英特尔终决定放弃Larrabee成为一款GPU的构想。

Larrabee的放弃说明了至少在目前的情况下,如果要制造一颗完全可编程的GPU,在工艺、制程以及设计上的难度依旧不可想象。Larrabee在硬件上给人们留下后的印象是一款功耗超过300W、芯片封装面积大约在500平方毫米、理论双精度浮点性能大约在1TFlops、存在无数BUG的一款产品。当然,它的确可以运行一些游戏,但实在是太慢、功耗太高,面积也太大了。

英特尔的敏锐感知

虽然Larrabee的失败给英特尔沉重的一击,但是这并不意味着英特尔在Larrabee上投入的所有心血都白费了。Larrabee只是在试图成为GPU的道路上夭折了而已,但Larrabee本身的很多设计思想是很出色的。

众所周知,目前的超级计算机实际上并没有很强大的单线程性能,发挥超级计算机无与伦比性能的方法是并行——上万颗性能优秀的多核心C PU通过强大的互联总线连接在一起成为一个并行计算体系,然后再由软件针对这个并行计算体系进行优化,终就能获得令人惊讶的超级计算能力。NVIDIATesla想要做的事情是将这种并行计算过程纳入GPU中,GPU本身就是很好的并行计算处理器,只是一直以来可编程效率太差,性能难以充分释放。NVIDIA通过多年的努力,终于建立起了以CUDA为核心的并行计算架构。CUDA可以在CPU的管理下,比较出色地发挥GPU强大的并行计算力量。

NVIDIA可以做的事情,英特尔为什么不可以呢?Larrabee大的问题是在实现GPU的功能和特性的研究方面,Larrabee的众核架构还是具备了其应有的实力:终实际产品拥有1TFlops的单精度计算能力(理论数据可以提升到2TFlops)虽然同期的Radeon HD 5970的理论大单精度浮点计算能力达到了4.6TFlops,但Larrabee存在完全可编程的特性,如果编译得当那么理论性能和实际性能差距并不会太大。而HD 5970由于架构限制,实际性能在某些场合下甚至会萎缩到理论性能的1/10。因此Larrabee本身的计算能力是存在利用空间的。

更值得注意的是,Larrabee使用的CPU内核是x86架构,虽然Larrabee不能脱离CPU独立执行x86指令,但既然都使用x86架构,那么这就意味着在软件和编程上,Larrabee至少和x86存在某些共通性。

英特尔敏锐地察觉到了这个市场。在传统的超级计算机异构市场中,NVIDIA Tesla是绝对主力,大量超级计算机客户一次采购上万片Tesla加速卡,给NVIDIA带去了丰厚的利润。不过这并不是主要问题,如果这些客户长期、稳定地使用Tesla加速计算卡,长此以往,会形成一个以CUDA为核心的、Tesla为主要产品的产业生态圈,这是英特尔不愿意看到的事情。因此,英特尔借由Larrabee的研发成果,利用同为x86优秀的可迁移性,推出一款全新的众核产品,这就是中文被命名为“融核”的英特尔计算加速卡——XeonPhi。

Xeon Phi来了——硬件架构解析

在Larrabee被彻底宣告失败之前,英特尔就已经开始考虑使用Larrabee的众核思想来研发其他产品了。英特尔曾经推出过一款代号为“Knights Ferry”产品,初被人们认为可能是Larrabee计划的具体产品代号,随后英特尔很快宣布Knights Ferry是面向软件开发人员的产品,其目的是让软件开发人员在期就开始熟悉在众核架构上编程的一些要点和经验。

有了前期,那么一定有后期。随后在2012年6月18日,英特尔正式发布了代号为“Knights Corner”的超级计算机加速卡,其品牌为Xeon Phi。英特尔也顺势推出了Xeon Phi的具体产品。

英特尔的众核思想从提出到终呈现实际产品,耗费了长达数年的时间。
英特尔的众核思想从提出到终呈现实际产品,耗费了长达数年的时间。

英特尔在展会上展示的Xeon Phi芯片,和普通CPU大小相当。
英特尔在展会上展示的Xeon Phi芯片,和普通CPU大小相当。

目前已经上市的Xeon Phi产品详细信息
目前已经上市的Xeon Phi产品详细信息

英特尔展示的Xeon Phi的内部互联结构简图
英特尔展示的Xeon Phi的内部互联结构简图

Xeon Phi中x86核心设计简图
Xeon Phi中x86核心设计简图

Xeon Phi实际的性能提升大约在1.7~2.53倍左右
Xeon Phi实际的性能提升大约在1.7~2.53倍左右

一套源代码,经过编译器处理后,可以在不同架构的设备上运行。
一套源代码,经过编译器处理后,可以在不同架构的设备上运行。

Xeon Phi性能展示及对比
Xeon Phi性能展示及对比

英特尔首发的Xeon Phi共有五款,此外英特尔还会为特殊客户定制生产Xeon Phi。从外观上看,Xeon Phi和普通的显卡差不多,它的零售版本有主动散热风扇和没有主动散热风扇的区别,没有视频输出接口,使用PCI-E2.0接口,供电接口则是6pin+8pin。在核心方面,Xeon Phi的封装外壳呈长方形,置大约50亿个晶体管,拥有至少50个x86核心,使用了22nm 3D TriGate术,板载8GB GDDR5内存。

在介绍完一些基础内容后,下面一起来看看XeonPhi芯片的内部结构计。英特尔没有太多详细的公开资料说明Xeon Phi的内部结构设计情况。不过英特尔也给出了一些简单的图例用于大概介绍Xeon Phi的结构设计等内容。

首先是比较宏观的芯片内部互联架构。从Nehalem开始,英特尔就使用环路总线将CPU内部的各个部分串连在一起。环路总线的优势在于布线简单,环路总线上所有部件都可由总线一次串联,避免了传统交叉总线复杂的布线要求——特别是在内部有大量核心需要数据交换的情况下(传统的GPU中多用交叉总线来解决数据通路问题。比如NVIDIA在GT200、GF100以及G K110的GPU中都设计了体积庞大的总线单元用于内部数据通讯)。英特尔传统的环路总线是双向设计的,每个方向是32bit,每个周期单方向可以传输32bit数据。任何一个核心的数据可以根据执行需要挂在环路总线上,并经过数据来源判断快速传递到目标核心。

在Xeon Phi中,英特尔并没有将所有模块都通过环路总线连接在一起。特别是x86核心,如果它们全部挂接在总线上,会给总线极大的数据输压力。因此在XeonPhi中,英特尔只是将L2缓存挂接在总线上,并通过L2缓存的一致性设计来保证数据传输和更新的有效性。当然除了缓存外,PCI-E控制模块、多达八个GDDR内存控制器等重要部件必须挂接在总线上。这样可以大限度地降低设计难度,同时在内部数据传输性能、功耗、晶体管耗费等方面取得很好的平衡。

除了内部互联结构设计外,英特尔还展示了XeonPhi中每一个x86核心的内部结构简图。这张图中透露出了很多信息。本文分列如下:

XeonPhi的每个内核可以执行4个同步线程,但是在理想的情况下,每次只能处理其中的2条线程。所谓的4线程并行,很可能是一种降低内存延迟带来的性能损失的手段而已。

Xeon Phi属于顺序执行处理器,没有任何乱序执行能力。如果要完全发挥CPU的能力,那就需要在程序编制的时候充分考虑顺序执行架构本身的特点。不过考虑到并行计算本身也没有太多需要乱序执行的内容,这一点是可以接受的。

Xeon Phi的x86核心内部实际上是双发射设计,这一点也是完全继承Larrabee的。指令经过解码单元解码后会进入0号管线或者1号管线,接下来会被送入指令所需要的单元进行处理。Xeon Phi虽然使用了多个x86核心并行计算,但是其强大的浮点性能并非来自于x86核心,而是来自于英特尔为Larrabee准备的、在x86核心中新加入的512bit SIMD阵列。这在图中被称为VPU(Vector Processing Unit)矢量处理单元。如果看过本刊对AMD RadeonHD7970的评测也就是对GCN架详细分析的读者应该会知道,MD的GCN架构的每个CU就内含了4组16-wide的SIMD单元,这也是GCN的小执行单元。英特尔的V PU和AMD的CU从性能角度可以简单认为,两者在相对应的计算架构体系中都处于类似的地位。在Larrabee中,VPU和与之相配的寄存器虽然在图中只占据了一小部分,但在实际生产中至少占据了Larrabee晶圆1/3的面积。在Xeon Phi上,这个数据会由于缓存的增加而略有减小,但不会缩减太多,粗略估计至少有1/4的Xeon Phi核心都纯粹被SIMD阵列和寄存器使用。

Xeon Phi的VPU中包含的矢量ALU可以高效率地执行16wide×32bit的数据或者执行8wide×64bit的数据。在数据类型上,VPU可以支持Int32(单精度整数)、FP32(单精度浮点)和F P6 (双精度浮点)的计算。此外,VPU还支持load/store指令,能够对一些复杂或者少见数据格式进行颇有效率的转换。之前英特尔曾经为Larrabee的VPU开发了新的指令集,名为LNI。在Xeon Phi上,应该也会支持类似或者基本相同的指令集来加强计算效能。

除了VPU单元外,英特尔还特别加入了x87浮点单元(x87是一个浮点计算的指令集,并行化计算效率一般,PhysX很多CPU部分的命令需要x87的辅助),对一些特殊的浮点数据进行处理。此外,标量处理单元和ALU单元等也一应俱全。

在L1缓存部分,英特尔为每个x86核心配备了32KB的L1数据缓存和32KB的L1指令缓存。同样的设计在Pentium P54C上是8KB+8KB,英特尔的新设计恰好应对了其可以同时处理四线程的内容。

在L2单元部分,Xeon Phi的每颗核心目录式一致性高速512K B缓存。在Larrabee上,同类型的缓存大小为256KB,在Xeon Phi中英特尔加大了L2缓存的容量,以提高计算性能,降低由于缓存不足带来的延迟等问题。此外,英特尔在缓存设计方面有充足的经验,Xeon Phi中每一个x86核心都在任何一个CPU的L2缓存中都拥有相对应的区域,确保数据的一致性。

在整个Xeon Ph i中,x86核心(除去L2部分)占整个芯片的面积不足2 %。面积大的计算部分是其中的VPU单元以及其寄存器。

总的来看,Xeon Phi的x86设计是相当精简的,基本上继承了Larrabee在计算方面的绝大部分内容。其余部分只有图形计算才使用的如纹理单元、光栅化单元等在介绍中没有出现,英特尔很可能将这部分内容彻底从Xeon Phi中删除了,毕竟一组不提供任何性能仅仅占用晶体管的部件留着也没有太大意义。

能运行操作系统? XeonPhi计算方式初探

在介绍了一些简单的硬件设计内容后,大家关心的一个问题就来了:Xeon Phi能执行x86指令吗?能直接运行操作系统吗?

答案是非常遗憾的。Xeon Phi作为以x86为核心设计的产品,可以接受x86、x86 - 6 4以及英特尔特殊设计的VPU指令集,这一点几乎是完全继承Larrabee的。但并不如人们想象的那样,Xeon Phi对指令集的支持(也就是对x86架构的兼容性)是有限的。

根据英特尔的文档,Xeon Phi本身只能支持英特尔x86-64指令集中的一部分子集,其余的如常见的指令MMX、XMM、YMM等寄存器操作指令无法支持。此外,Xeon Phi中使用的极度精简的x86核心也无法支持诸如MMX、SSE、AVX等多媒体指令集中绝大部分内容。并且英特尔特别强调,Xeon Phi无法脱离现有的CPU而存在,它只能作为一个协处理器存在。退一步来讲,假如英特尔的确有能力让Xeon Phi独立运行操作系统,从前文的介绍来看,Xeon Phi本身内置的x86核心的单核心处理能力也是极其低下的,甚至比Atom的单核心处理能力还要略差。在这种情况下,如果遇到一些无法并行化的代码(实际上这类代码是人们日常使用中常见的类型),依靠Xeon Phi低下的单核心性能,所需要的操作时间将大幅度增加,反而会对整个系统性能产生重大拖累。

总的来说,Xeon Phi本身和英特尔桌面x86处理器在二进制代码上实际上并不兼容,其实际设计目的和应用场合也不会要求诸如Xeon Phi等类似的产品有完全兼容桌面x86处理器的需求。那么Xeon Phi是否能够很轻松地为编程人员带来超强的浮点性能呢?

答案是否定的,原因也很简单。如果应用程序本身并没有为多线程做出优化,那么将不存在任何设备可以将没有优化过的源代码直接“优化”为可以在大规模并行计算上获取佳性能的应用。Xeon Phi不能自动将那些没有并行能力的软件进行并行化——这是完全不可能的事情,NVIDIA也撰文表示了类似的观点。目前并行计算的关键性问题还是如何更有效率地让程序并行化,并行化越好的程序就越能够充分发挥异构计算的潜力。英特尔的Xeon Phi在并行化上无法做出太多的改善,只能面对现实。

除了Xeon Phi在指令方面的一些内容外,英特尔还公布了自己测试的一些内容。在这些测试中,英特尔表示,Xeon Phi在实际计算中,对已经有充分并行化的的程序能够获得差不多1.7~2.53倍的性能提升,表现好一些的程序能够获得2.2~2.9倍的性能提升,只有金融服务方面能够获得大约10倍的性能提升。这样的数据实在不太令人满意,按照一般的想法,并行计算相比串行计算能够获得大幅度的性能提升,其提升幅度至少都是十几倍,为什么在Xeon Phi这里只能提升几倍呢?

英特尔也对这种“几百倍”的宣传手法做了展示。首先英特尔给出一段Fortran代码,先不做任何优化单线程处理得到数据结果,然后充分优化让XeonPhi进行处理,这时的性能差距达到了300倍之多。

从英特尔的实验来看,至少在英特尔自家的Xeon Phi上,性能增幅的确存在,但远远没有人们想象中那样夸张。原因主要是目前的CPU基本上都是多核心、多线程产品,厂商在编写软件时,至少会为多线程CPU运行进行并行化的优化。在软件经过并行化优化的同时又运行在多核心CPU的情况下,本身就获得不错的性能提升。相比之下,Xeon Phi等类似产品能带来的性能优势就变得不太明显了。

性能提升是意料之中的事情,英特尔还有软件环境方面的一些优势。英特尔在CPU界纵横驰骋赖以成名的底气除了来自硬件设计、制造的顶尖技术外,编译器也是英特尔的绝活之一。只是一直以来普通玩家接触不到英特尔的编译器产品,往往忽视这方面的内容。简单来说,编译器的主要用途是将编程中使用的高级语言翻译成机器能够直接识别运行的机器语言。编译器的优劣直接影响到了CPU的执行效率,也就是性能。

在Xeon Phi上市之前,英特尔就开始利用Knights Ferry让程序员熟悉在众核架构上编译程序的一些特点。在Xeon Phi正式上市后,英特尔推出了大量能够降低程序员工作、简化代码编译操作的编译器系列产品。Xeon Phi这时的优势在于:那些使用x8 6架构的现有并行计算软件不需要太大的改动,仅仅需要在编译器和Rntime上进行一些调整就可以使用Xeon Phi进行加速。其中包含了常用的C语言、C++语言和F ortran语言的相关产品,还有比较成熟的Debug、Profiling软件。根据英特尔的说明,对传统多核心优化过的软件,可以不需要太多改进,经过英特尔编译器的处理后就可以直接在Xeon Phi上运行。不仅如此,由于软件环境几乎没有改变,程序员不需要太多的学习就能够直接对程序进行Debug、并行化优化等操作,非常方便、简单。相比之下,NVIDIA方面,编程人员需要对CUDA本身的编程方法、并行方法进行一定程度的学习。且CUDA编程后的一些如Debug等操作依旧不够完善。

另一方面,在2002年11月的新超级计算机Top500排行榜中,有62套使用了加速卡或者协处理器,即使用了CPU+GPU的混合系统。其中英特尔的Xeon Phi一出世就吸引了多达7套系统使用,快的一套是排名第七的“惊跑Stampede”,其余的系统中有50套使用了NVIDIA的Tesla,3套使用AMD的加速卡或者Radeon HD系列,2套使用IBM的Power XCel8i。总体来看,采用纯CPU方案的超级计算机仍然是当前的主流配置。但从各大科研机构的未来计划来看,几乎都将砝码压在了混合系统上。未来,它们都将推出性能更出色的采用混合系统的超级计算机,这是大势所趋。

Xeon Phi 这仅仅只是开始

英特尔推出了一款不错的产品,它在Larrabee研发过程中投入的资源可能很快就会在XeonPhi上产生回报。XeonPhi是英特尔的首次尝试,虽然在它前期的研发过程中走了太多的弯路,但现在看起来结果还算不错。

Xeon Phi的高可编程性、高性能以及英特尔提供的友好的软件环境是它的优势。它的出现,让本来就在超级计算机中占据C PU优势的英特尔进一步巩固了自己的产品阵线,顺便为英特尔开辟了一个新的利润增长点(可能暂时还没有太好的收益)。Xeon Phi的设计思想是独特而领先的,它利用简单的x86核心搭配庞大的SIMD阵列,带来了一种新的计算模式,能够大幅度提升部分特定程序的计算速度。在未来,英特尔很可能还会沿着这条道路继续前进下去,推出更为强大的Xeon Phi系列产品。

Xeon Phi现在面临的大对手就是NVIDIA Tesla。现在使用Xeon Phi的客户还不够多,它的业内影响力也不够强大。反观NVIDIA,早在五年前甚至更早就开始培育异构加速计算场。CUDA目前是并行计算中成熟的方案,部分大学和研究机构已经开始基于CUDA研究并行计算。特别是学校的课程也早已开始基于CUDA进行教学,CUDA也已经积攒了大量比较成熟的应用案例和加速计算软件。此外,CUDA在民用级别的GPU上也是可以运行的,英特尔的Xeon Phi则很难出现在个人PC的机箱内。硬件方面,Xeon Phi目前的功耗表现依旧不够令人满意,它的每瓦特理论性能和每晶体管理论性能都要小于NVIDIA已经推出的基于开普勒架构的GK110产品。

但这些都不算太困难的事情。因为Xeon Phi只是英特尔第一代产品,不出意外的话,英特尔会在Xeon Phi的架构上继续改进,提升每瓦特性能并大幅度提高Xeon Phi的基础性能。此外,英特尔丰富的编译器和软件经验也会帮助Xeon Phi的销售和推广,英特尔甚至已经开始研究将Xeon Phi和系统中的主要处理器并列在一个SMP系统中,共享虚拟内存。这在编程上的意义完全等于SMP多核心,用户几乎不需要任何额外的操作就可以获得不错的性能提升。如果英特尔继续坚持下去,那么应该感到麻烦的是VIDIA。这样一个强大的对手加入异构计算市场后,NVIDIA苦心经营多年的CUDA是否还会有足够的优势?我们只有拭目以待了。f

分享到:

用户评论

共有评论(1)

用户名:

密码: