人人书

杂志

保存到桌面 | 繁体人人书 | 手机版
传记回忆文学理论侦探推理惊悚悬疑诗歌戏曲杂文随笔小故事书评杂志
人人书 > 杂志 > 解析Xeon Phi X200处理器

解析Xeon Phi X200处理器

时间:2024-11-01 03:13:15

在普通用户眼中,处理器核心一般也就四核、八核,但在近日,Intel正式发布了代号为KnightsLanding(加利福尼亚州的一个地名,以下简称KNL)的新一代XeonPhiProcessorx200处理器,这款处理器配备了惊人的72个核心,这么多核心究竟有何用处?和普通PC市场又有什么关系?本文将为你细细道来。

文/图黄博文

KNL的基本情况我们在2014年的《微型计算机》中就有过介绍,在此仅做简单回顾。从Intel绘制的框架图上很容易看出,KNL是一个标准的众核处理器,位于中心大矩形内部的近40个小方块(官方称呼为TILE),除了用以连接PCIe3、MCDRAM、DDR4以外的小方块以外,还剩36个小方块,这36个小方块中的每一个都内建两个处理核心,每个处理核心内部又内建两个向量处理单元,两个处理器核共享一块

2MB大小的二级高速缓存,每一个小方块都配备了一个中继站(官方称为HUB),用以连接其他的核心模块。HUB和各个核心之间的互联(Interconnect)体现出了鲜明的片上网络(NoC)特征。

粗看之下,这样的结构特征与普通人用的个人电脑有着很大的不同,却又有着一些神似。明显的不同点是,一般的处理器不会集成这么多的核心也不会使用这么激进的片上互联网络。以目前Intel顶级的至强多核服务器级芯片为例,目前最高规格也只有约20核心上下,而且不支持任意一个核心到周围相邻核心的点对点互联,而是使用了缩减过的环网(ringbus),这说明KNL的片上互联能力大大强于现有的多核处理器;虽然KNL和普通的个人电脑处理器一样使用乱序多发射核心,但是KNL的乱序多发射能力经过比较大的精简,同时比较倚重于向量执行,因此KNL的单线程性能会显著落后于一般的个人电脑中使用的处理器,但是更激进的向量执行和加大了一倍的每核心超线程数量支持则会使KNL的并行计算能力大幅领先。这里便引发了很多疑问,为什么KNL不使用激进的乱序多发射设计来提高速度?为什么要如此重视众核以及向量执行呢?KNL到底是用来干嘛的?

tips关于片上网络

随着芯片集成度的指数级提高,现在的处理器内部会集成的核心数量以及各种各样的功能单元数量也在增加,如何连接这些核心与组件就成了一个难题。如同计算机网络连接了很多计算机一样,如果把这种宏观上的网络级互联能力搬到纳米尺度的微结构当中,就形成了片上网络。业界公认的下一代片上互联微结构将会是片上网络的舞台,片上网络是目前业界的研究热点之一,并且已经有一些产品将一些初具规模的片上网络付诸实用,例如TILERA多核,Intel的至强融核,以及我国军方研制的用以对抗美国技术封锁的申威26010众核处理器。

PC与超级计算机的渊源

XeonPhi这条产品线自从出现以来,一直活跃在高性能计算市场上。这里的“高性能计算”和我们普通人接触到的高性能手机SoC、高性能PC里面的“高性能”虽然字面相同,但其实已经发展出了截然不同的两种含义。XeonPhi关注的高性能计算,实质上是需要超大规模并行的科学计算领域,而普通人关注的高性能计算,多属于并行度不高的串行计算或者是存在少量并行度的多媒体计算任务。虽然今天它们已经是字面相同而实际含义不同的貌合神离状,然而五十年前,它们却是一家。KNL与一般处理器的相同点和不同点之所以演变成如今的样子,其实有着历史性的原因。

现在个人电脑和智能手机微处理器的基本体系结构,其实与上世纪六十年代的第一代超级计算机有着莫大渊源。有人可能会说,现在所有的计算机都是冯诺伊曼体系结构,而当时的第一代超级计算机直接脱胎于冯氏体系结构的最早期实例之一的ENIAC,把PC和五十年前的超级计算机强行拉关系是不是有些没话找话的味道?其实不然,现代处理器微结构中至关重要的一些技术,例如我们今天要重点关注的单指令多数据、乱序执行、超标量执行等等,都是早期超级计算机发展过程中的产物,乱序执行和超标量执行的初始设计被后世追认到了上世纪六十年代的CDC6600和IBMSystem360上,单指令多数据的前身向量执行(vectorprocessing)则被认为是CDC的部分原班人马所设计的Cray1的遗产。停放于博物馆中的Cray1向量型超级计算机,图片来源于svedic.org。

IntelPPT中公布的KNL框架图

最新的Intel至强E5V4系列使用的环网互联结构,不难看出节点间的通信需要跨越的跳数远多于完整网状结构的KNL芯片。linpack

Linpack原先是JackDongarra,JimBunch,CleveMoler,GilbertStewart等人为上世纪七十到八十年代的超级计算机编写的一套Fortran语言的线性代数函数库,后来被改编为超级计算机的性能测试基准程序HighPerformanceLinpack(HPL)。尽管linpack在高性能计算的性能测试中广泛使用,但是其度量准确性存在争议。

高性能计算与传统结构的失和

让我们把目光聚焦到高性能计算领域中活跃的linpackbenchmark上面来。

笔者从HPL(超级计算机top500的排名依据)中截取了其中一个性能关键点的源码。这段源码进行的实质工作是进行超大规模的矩阵乘加。这个规模有多大呢?Top500官方推荐的值是,矩阵存储的空间应当占据整个超算系统内存的80%,也就是许多个TB乃至PB级别的数据量。这种计算任务的性质使得乱序执行技术完全失去了用武之地。我们来看看乱序执行的框架会如何处理这个问题。首先需要进行第一对数字的乘加,试图从高速缓存中取出这一对数字,但高速缓存中没有,发生了高速缓存缺失,于是从内存中取用;乱序执行引擎检测到第一对数字的计算发生了停顿,而第二对数字的计算过程并不依赖于第一对的计算结果,而且也有空余的执行资源,于是将第二对数字的计算任务提前开始处理,再试图从高速缓存中取出这一对元素,还是缺失,于是第二对数字也继续访存过程,第三对数字的计算开始……持续到乱序执行引擎达到了所能hold的指令数量上界,亦或缓存子系统或者访存队列达到了同时服务请求数的上界等原因,工作彻底停顿,直到有一对数字从内存中返回,计算过程才得以继续。一般来说乱序执行引擎能容纳的指令数为100~200+条左右(指令融合可以进一步提高这个上界),缓存子系统能够同时服务的并行缺失数比这个更少,一般在几十个左右。

在这个过程中,乱序执行做了很多的无用功,因为在矩阵乘加这样的计算任务里,后续的操作几乎总是不与先前的操作相关,因此总是能够并行执行,并不需要乱序执行机制来发掘并行度。另外,由于所有的高速缓存缺失在时间轴上都是大部分重叠的,在这样的场景下,缓存缺失带来的访存延迟可以尽可能地相互掩盖,因此已经不再重要,最重要的问题是尽可能多地堆叠计算单元来并行执行指令,尽可能多地发出访存请求,让所有的缓存缺失和访存代价相互重叠,将这一优势发挥到极致。一个将这一目标贯彻到底的顺序执行处理器就可以在类似的并行场景下远超过普通的乱序多发射处理器—这就是NVIDIA的GPGPU。NVIDIA的GPU能够同时执行的并行指令数目多达上千个,并行处理的访存请求数亦远超过传统的CPU,虽然每条指令的执行速度、缓存子系统的访问延迟等逊于CPU,但是凭借着几十倍的并行能力,超过普通的处理器并不在话下。Linpack中的一段关键代码,截取自HPLv2.2开源版本的dgemm模块

矩阵乘法示意图。高亮的横行于高亮的纵列参与运算,得到结果矩阵中高亮的一个块。传统框架的极限

所谓前有狼后有虎,一面是围绕并行构建的GPGPU在这一问题上得心应手,另一面是传统的CPU使用的乱序多发射框架已经不再适应高性能计算的需求。从本世纪初到现在,高性能计算使用的性能评测指标从GFLOPS跨越到TFLOPS又到PFLOPS,足足三个数量级,并且开始向上展望E级计算,但是传统框架下的乱序多发射处理器要怎么跟上这样的发展需求呢?高频率+高发射宽度吗?

依赖高频率来抹平差距并不是一个明智选择,暂不谈器件工艺物理极限的问题,这种底层技术对于CPU和GPGPU来说是共通的,CPU使用的高频器件,GPGPU也能用从而很大程度上消弭了优势。那么高发射宽度呢?

翻阅上世纪八十年代末期至九十年代中期的论文,便不难发现,当时学术界与工业界热衷于具备宽发射、长流水,乱序执行、分支预测能力的CPU,认定这将是未来的发展方向,这些技术的研究热火朝天,有的学者甚至乐观地展望,未来将出现每周期15发射以上的惊人前端发射宽度,这样激进的宽发射CPU当然并未成为现实,作为对比,Haswell架构的发射宽度为4(因为可以发射融合微指令,所以实际等效发射宽度稍高),安腾2架构在编译器调度的帮助下也只能做到12发射。这种乐观预期的存在很好地反映了当年的时代局限。九十年代微架构设计的主流观点是,若想提高计算速度,加强CPU核心的执行能力是重点。在这样的指导思想下,著名的IntelP6微架构诞生了,双发射+长流水+乱序执行+分支预测一应俱全,核心频率越来越高,逻辑越来越复杂,直至NetBurst架构的高频奔腾4芯片折戟沉沙。

重新审视当时的失败原因,主要有两个。

其一,功耗墙(powerwall)。用以加强CPU核心执行能力的这些技术将大幅推高功耗,以乱序执行为例,每一条指令的发射和执行都需要经过一整套逻辑的检查以确保流程正确,并占用额外的寄存器,这意味着每一条指令的执行都需要更多功耗。这种愈发激进的CPU设计在Netburst架构时代迎来顶峰,随后狠狠地撞上了功耗天花板。前Intel副总裁PatrickGelsinger曾在2001年的国际固态电子电路会议上发表主题演讲,警告说CPU的功耗密度如果继续提高,不出几年就将摆脱现有一切冷却手段的束缚,彻底失去控制。更加不妙的是,仿真结果揭示,即便倾尽全力,给定无限多的芯片面积预算去设计一个发射宽度远超当下,配备极强的乱序执行能力和分支预测器的CPU,其整数指令发射能力也不过提高区区几倍,这样的设计思路下,改进潜力已经不大。

其二,访存墙(memorywall)。愈发激进的CPU设计将CPU核心的执行速度提得很高,存储器系统已经越来越力不从心。提供足够大的存储容量和提供足够快的响应速度在本质上是矛盾的,冯诺依曼早在1945年就断言容量和速度的需求无法同时满足,这位大师级人物不幸再度言中,存储器系统越来越难以用足够快的速度交付和接受指令与数据,引发了架构设计者们的担忧。DEC公司Alpha架构的首席架构师理查德·赛特斯在1996年的《微处理器报告》上撰写了一篇标题为《瓶颈在内存,愚蠢!》的惊世雄文,据他披露的测试结果,当时最出色的乱序超标量处理器若是管线填满,理论上每周期可以完成两条左右的指令,而实际执行时每四到五个周期才会有一条指令完成,落差几乎达到十倍,花费学术界与工业界无数心血研究测试的超标量乱序执行并未如想象中那样强大,优势几成泡影。这项测试非常有力地证明,整个执行模式存在极其严重的瓶颈,制约了整个CPU的性能,而这个瓶颈就在于访存速度。花费如此大的精力设计的高性能CPU,却花费了90%的时间等待存储器系统的响应,这不能不说是一种莫大的讽刺。赛特斯不无悲观地认为,在未来的处理器微架构设计中,存储器系统将成为唯一的关键因素。

显然,发射宽度不可能像核心数目一样快速向上扩展。面对这些挑战,业内已有一些较有远见的架构师开始讨论另一种全新的架构设计方式,他们设想抛弃高能耗的复杂乱序执行核心,转而采用设计精巧简单,功耗较低的小核心,将设计重点放在提高对存储器系统的延迟容忍上,依靠多核心多线程并行执行来躲避存储器系统的延迟——这同样是后来NVIDIAGPGPU的核心设计理念之一。无独有偶,XeonPhi也有相同的考虑。DEC公司于1992年时所期望的CPU发展进程,当时预期2017年会出现20发射的CPU,而现在已经无望变成现实,宽发射乱序推测推测执行的传统设计思路需要引入变化。XeonPhi的意义和革新

在XeonPhi问世之前,虽然业界包括Intel自身已经意识到了问题存在,但是出于经济上的考虑,单独为市场空间并不太大的高性能计算单独开发芯片对于Intel来说处于模棱两可之间。从经济上来说最佳的处理方式(同时也是技术上来说妥协的方式)就是继续使用针对传统市场开发的旧体系结构下的芯片去应对已经分化出去的高性能计算市场。而XeonPhi是Intel为了对抗NVIDIA在高性能计算领域的强势进攻、同时也为了自家产品在高性能计算领域的变革和转型推出的全新产品线,它的问世标志着Intel认为已经来到了需要认真对待高性能计算市场的拐点。

从体系结构的角度来说,它的基本设计理念与GPGPU非常相似,以KNL来说,72核心的设计,正如同GPGPU大量堆积SM阵列、CUDA核心数目一样是大幅度提高并行度的设计之一,从基本执行框架的角度看,CUDA所使用的单指令多线程模式其实也与Intel的单指令多数据同宗同源。放在这个背景上,弱化单核心性能、放弃激进的乱序多发射,提高超线程支持数目也就有了逻辑一致的解释。但基本框架的相似性也就带来了下一个问题:一山是否能容二虎?作为后来者的XeonPhi在高性能计算领域并不是不可或缺的地位,更多的是给高性能计算提供了平行于GPGPU以外的另一种选择。相对于体系结构领域半个多世纪的发展时间来看,GPGPU和Intel的至强融核设计都只能说是尚未成熟的青少年,仍有许多问题需要进一步的研究,例如片上资源的划分和平衡,抢占式调度,片上网络的结构,硬件支持一致性的必要性以及可扩展性等等,都不是能够轻易给出答案的。在近期这段时间里,GPGPU和至强融核将作为高性能计算领域里面对同一类型问题的两种选择而并列存在,有可能其中一个被淘汰,也有可能二者进一步分化出不同的使用范围,胜负还言之尚早。

此外,作为XeonPhi产品线的最新成员,KNL也具备一些颇为亮眼的特性。其一,KNL可以承担主处理器的任务,能够完整地负责启动操作系统,这意味着,从理论上来说,使用KNL能够单独地构建起一套计算系统,像神威·太湖之光那样在系统层面实现同构而芯片内部采用异构。其二,背靠x86发展起来的XeonPhi在编程上会占据一些优势,同时秉承传统处理器的硬件高速缓存一致性维护,软件的实现代价也可以得到降低。其三,作为老牌结构设计大家Intel的作品,KNL的体系结构也有许多值得玩味之处。例如文章开头的KNL架构图中展现的片上网络互联就需要大量的研究,例如PCIe3和DDR4内存控制器的接口在片上网络中的布置、片上网络的转发和寻路策略,众核一致性总线的实现等等,无一不是心血的结晶。

除了以上三点以外,必须单独提及的一点就是HMC的加入。这一点本来可以归属为体系结构的改进,但是HMC的意义足够令它自己单独得到一份关注。所谓HMC就是HighbandiwidthIn-PackageMemory的缩写,也就是高带宽片上内存。这种内存已经有比较长时间的研究历史,并产生了多个变种技术,AMD在自家的旗舰级显卡FuryX中使用的HBM就是一个例子。传统的内存以内存条的形式插在主板上,通常需要200个周期左右的访问延迟,速度慢不说,更加要命的是,从内存搬运一个双精度浮点数进入处理器内部需要的能耗,大约为进行一次双精度计算的几百倍,这意味着一次搬运数据的能耗需要几百倍的计算量才能扯平,这样一来大量的能耗就被浪费在数据的搬入搬出上面。HMC、HBM等技术就是在处理器片内集成一部分内存,相当于L4cache的存在,其访问带宽、延迟、能耗表现均大大优于片外内存。HMC的引入标志着Intel开始继续吸纳片上堆叠内存以及近内存计算领域的研究成果,它的意义远不止多加了本地的8-16GB存储容量这么简单。HMC的引入将有可能推动高性能计算的操作系统的任务调度部分重新调校,也为高性能计算领域的编程带来了新的维度,程序员需要考虑把数据尽可能地保持在HMC当中,这一任务也可能随着技术的进步转移给操作系统、编译器或者是运行时的软硬件协同来完成。HMC的引入是另一项可以在不远的将来反哺回普通处理器上的技术成果,在高性能计算领域探索成熟的HMC将有可能部署回其他普通民用产品线例如个人电脑上面,来帮助未来的系统进一步完善。

KNL中新加入的高带宽片上内存
   

热门书籍

热门文章