文/图 黄博文
计算性能问鼎排行榜榜首的神威·太湖之光超级计算机江南计算所和太湖之光
对于圈内人来说,看到无锡这个地名,首先联想到的就是1951年成立的江南计算技术研究所(与位居北京、1956年成立的中国科学院计算技术研究所遥相呼应)。中国科技领域的政府最高奖励——国家最高科学技术奖仅授予过两位计算机领域的专家,一位是发明激光汉字照排系统的王选院士,另一位就是江南计算所的神威超级计算机系统的总设计师金怡濂院士。
依托江南所研制的神威系列超级计算机系统并不算是石头缝里蹦出来的,江南研究所在公众媒体上一直保持低调,其实力仅为圈内所知。其实在“太湖之光”的超级计算机top500排行榜成绩正式公布前至少半年,就已经有很多与江南所有联系的圈内人士得知“太湖之光”可以超越天河2号,但直到今年6月的国际超级计算大会,这一消息才正式公布。太湖之光在linpack上的持续计算速度达到了93 PetaFlops(93千万亿次),遥遥领先国防科大牵头研制的上一代的天河2号超级计算机近3倍,对比美国目前在役的超级计算机系统“泰坦”和“红杉”达到5倍以上。同时在关注功耗效率的Green500和关注大规模图计算的Green 500上,太湖之光也挤进了前三甲。令人更加欣喜的是,“太湖之光”不仅自身实力过硬,也同时带动了国内高性能计算应用的突破性进展。高性能计算应用领域的最高奖戈登贝尔奖自1987年以来没有纯本土的应用入围,运行在太湖之光上的典型应用首次以纯本土开发的高性能计算应用的身份杀入了戈登贝尔奖的提名,而且一次性入围了三个。这三个应用分别是中科院软件所与清华大学、北师大合作的“全球大气非静力云分辨模拟”;国家海洋局海洋一所与清华大学合作的“高分辨率海浪数值模拟”;中科院网络中心的“钛合金微结构演化相场模拟”。在这样的成绩背后,作为基础支撑的处理器部分却不再是过往的Intel至强系列处理器或是NVIDIA的加速卡,而是国产的SW26010。这款芯片的正式面世距离美国商务部对超级计算机相关芯片产品,即对中国四家超级计算中心宣告禁运的政策执行才过了一年,这其中的意义不言自明。
当笔者第一次看到SW26010的结构设计框图时,就为之感到震惊。这是迄今为止笔者所知的任何公开设计都截然不同的结构框架,也很可能是目前所有的处理器微结构里面最激进的异构众核设计。这一张框图所带来的意义尤为深远,只有放在当前的时代背景下才能够透彻理解。
让我们首先来看看太湖之光的前辈“天河一号”、其强力竞争对手“美洲虎”及后继升级型号“泰坦”。首度问鼎超级计算机top500榜首的本土超算天河一号采用了CPU + GPGPU的异构计算结构,但和“天河一号”的CPU+GPGPU异构体系结构不同,“美洲虎”使用Cray XT5架构,是一个完全由CPU构成的同构体系结构的超级计算机,被天河一号拉下马之前,这224162个AMD皓龙处理器核心组成的庞大系统在长达两年的时间里守住了超级计算机top500排行榜三甲的位置,但是功耗也逼近七百万瓦特。作为对比,“天河一号”使用了186368个Xeon至强处理器核心,搭配7168个NVIDIA Tesla M2050 通用计算GPU,以及2048个国产FeiTeng 1000处理器,在Linpack测试中跑出了2.566PFLOPS的平均计算速度,在领先“美洲虎”的同时,功耗只有四百万瓦特。NVIDIA宣称“天河一号”架构中的GPGPU起到了关键作用,如果单纯使用CPU来达到这种程度的性能,就需要超过30万个核心,以及两倍的占地面积和四倍的功耗。这里的GPGPU和后来的至强融合计算卡,都是使用SIMD并行作为基本设计理念。
神威·太湖之光超级计算机的运算节点板与机身上的监控面板
神威·太湖之光采用大规模高流量复合网络体系结构设计,实现了全系统高带宽、低延迟通信。
在国际超算大会上,神威·太湖之光夺得第一的获奖证书。
SW26010框架图在同一种体系结构下,满足较强的SIMD并行执行能力+乱序多发射的串行执行能力并不容易,因此使用以宽SIMD并行为主的加速器(如GPGPU)+ 强乱序多发射为主的CPU成为了高性能计算机体系结构的一个新趋势。2007年初,整个top500榜单上没有一台超级计算机使用额外的加速器,但是SIMD与传统架构融合而成的异构加速模式带来的好处是如此地显而易见。到了2011年中,采用混合加速体系结构的top500超级计算机数量就从0开始增长到已经接近60个。在这一形势下,“美洲虎”就启动了新一轮升级计划,改用CPU + GPGPU的异构体系结构,升级成了后来重回榜首的“泰坦”。截止到太湖之光正式面世前的最后一份top500榜单也就是2015年11月的榜单上,前十台超级计算机有四台使用了CPU+GPGPU的异构体系结构,到了2016年6月,基于异构体系结构的超级计算机已经完全把持了前三甲的位置。
但在SW26010面世之前,CPU+GPGPU的异构计算框架存在的问题仍然尤为突出。从这套框架的耦合性上来说,CPU+GPGPU的耦合方式仍然非常松散,CPU和GPGPU之间的数据交互要通过PCIe总线和内存来进行,效率低下。而且CPU和GPGPU并不在一个die上,而是跨越了PCIe总线和内存,加上二者的访存特征有着本质上的不同,面对的应用场景也截然不同。因此目前还没有一个完好的硬件一致性方案来在这两种截然不同的体系结构之间提供数据一致性,所以维护一致性的工作就落在了上层软件栈的身上。另一方面,从能耗效率的角度上来说,CPU+GPGPU的方案或许能胜过纯CPU的组合,但是距离理想的异构计算的完全体还存在着很大的差距。模拟数据显示,如果将一个双精度数据从片外搬移进芯片内,那么执行这个任务的功耗将数十倍乃至数百倍于在芯片内进行一次双精度数据计算的功耗,因此松散的异构体系结构耦合方式也就导致更大的功耗浪费在无谓的片外-片内数据搬移上。
TIPS 关于SIMD
SIMD是单指令多数据(Single Instruction Multiple Data)的简称,是目前的GPGPU和CPU发掘数据级并行度的主要方式。其设计思想也非常简单,举例来说,如果有这样两个数组,数组a为1,2,3,4,数组b为6,7,8,9,任务是把这两个数组当中的数字逐个对应相加。在SIMD出现以前,传统CPU的做法是依次计算1+6,2+7,3+8,4+9,至少需要四条指令,每条指令负责计算一组数据。而SIMD的做法是使用同一条指令去控制多个ALU,但多个ALU分别去操作不同的数据,把多个操作并行起来,从而提高性能。在这个例子里面,支持SIMD的CPU会将一条加法指令发送给四个ALU,这四个ALU会分别读取1和6,2和7,3和8,4和9这四组数据,各自同时相加。在上面这个例子里,以每个整数32-bit计算,四个整数需要占用128-bit的SIMD通道。这样的SIMD并行场景在许多并行计算任务中反复出现,因此现在的CPU里面一般都加入了SIMD的设计。CPU的SIMD宽度在过去的设计中保持着提高的趋势,从SSE的128-bit到AVX的256-bit乃至512-bit,并且GPGPU也使用了这样的设计,SIMD宽度的增长速度比CPU还要快。
SW26010激进的异构融合
对于上述这两个关键问题,SW26010的结构设计给出了一份令人满意的答案。SW26010的片上集成了多达260个核心,其中4个核心被称为MPE,基于申威自主定义的64bit RISC指令集,具备乱序多发射能力,能够发掘传统的指令级并行度来提高单线程性能,与此同时它也支持256-bit的向量指令,可运行标准linux内核。从这个角度上来说,单独的一个MPE类似于现在的PC处理器,同时具备乱序多发射+窄SIMD的能力(但具体设计实现以及最终性能上存在很大区别)。每一个MPE又伴随着64个CPE核心,这64个CPE核心共同组成了一个CPE阵列,申威将这个阵列称为CPEs或CPE“集群“。这些核心同样是64-bit RISC,并且核心设计相对简单,设计重点以支持256-bit的SIMD操作为主,只能运行轻量级的非标准操作系统,不支持核心态运行、不支持中断等基本功能,但64个核心一共可以提供16384-bit的宽SIMD并行处理能力。与此同时,CPE阵列里的核心也并未过度牺牲单线程性能,CPE核心的设计框架为乱序双发射+静态分支预测,支持256-bit SIMD指令的乱序执行。
以一个乱序多发射+256-bit SIMD的MPE核心 + 64个以256-bit SIMD为主的CPE核心为一个基本单元,整个SW26010有四个这样的基本单元,因此一个SW26010处理器总共有4个乱序多发射的MPE核心和256个CPE核心,总计提供了(4+64×4)× 256-bit = 66560-bit的恐怖SIMD宽度。截止这里我们已经可以说,SW26010实现了第一个创举,集成了MPE传统乱序多发射和注重SIMD并行能力的CPE两种核心,把两种体系结构的核心做到了一个die上。但是光有这个还是不够的,SW26010的第二个创举是在这两种体系结构的核心之间提供了基于硬件的数据一致性。
这一设计彻底移除了上层软件维护一致性的负担,截止到目前为止Intel和NVIDIA的芯片都尚未做到申威这样规模的片上异构。而NVIDIA的GPGPU还不提供片上的高速缓存硬件一致性,因此可以肯定地说这个异构设计既领先Intel当前这一代的CPU和加速卡,又领先NVIDIA的GPGPU方案,真正地做到了国际领先水平,不能不为之拍手叫好。但需要明确的是,SW26010提供的一致性解决方案是否需要经过片外存储还尚不清楚,至少在2015年发表的关于SW26010的论文当中,其一致性仍然需要对外访问内存才能实现,留下了一个遗憾。如果SW26010能够做到完全形态的片上高速缓存一致性,就能削减数据在片内片外搬移的功耗,进一步提高能耗效率也降低了对内存带宽的需求。
实现两种体系结构之间的一致性是需要长期研究和大量实验支撑的前沿问题。举例来说,两年前笔者听过AMD中研院的一个公开报告,AMD的工程部门力图在他们的APU上实现乱序多发射核心与集成GPU之间的数据一致性,结果发现引入CPU和GPU之间的硬件一致性以后会在高速缓存上造成瓶颈。这是因为CPU和GPU两者的访存特征截然不同,GPU上可以同时运行成百上千个线程,这些线程会产生巨量的访存请求,以每个线程发出一个访存请求、高速缓存命中能够过滤其中一半来计算,每个周期渗透到CPU-GPU一致性层面上的请求达到几百个并不是难事。作为对比,即便是最激进的乱序多发射CPU每个周期也只不过产生寥寥数个访存请求。GPU生成的这些访存请求(特别是写请求)就要去询问负责GPU-CPU数据一致性的部件(一般是目录也就是Directory)来更新最新的数据状态信息以及获取可能需要的一致性访问许可,这就会对负责GPU-CPU数据一致性的部件造成很大压力。而得到一致性访问许可、更新数据最新状态信息以前,访存请求是必须等待、不能继续处理的。如果一致性处理的部件应付不过来,就会将CPU的高速缓存和核心内部的访问队列以及GPU高速缓存和核心内部的访问队列都堵死,一致性如果实现不好就会导致CPU性能和GPU性能的双双退步。既然实现数据一致性这么难,那么为什么还要实现这个技术呢?
总共拥有260个核心的SW26010处理器,工作频率为1.5GHz,超级计算机神威·太湖之光内置了总共40960颗SW26010处理器。数据一致性的硬件和软件维护
让我们还是以数组来举例,假设现在有一个任务是将一个包含20亿个整数的数组{4,6,8,5,2……6,1,3,9,2}进行排序,然后从中挑选前100个素数。允许利用GPGPU来加速的情况下,一个直观的解法是,将这20亿个数字从CPU传递给GPGPU,用GPGPU的宽SIMD并行能力进行排序,排序完成后再传递回CPU进行挑选素数的处理。在不支持CPU-GPGPU硬件一致性的体系结构下,程序员需要自行手动、或者提供编译制导等方式,让CPU将数据搬移至GPGPU的显存,GPGPU排序完成后,再通过显存经PCIe总线搬运回来。而在支持CPU-GPGPU硬件数据一致性的体系结构上,GPGPU完成排序后,CPU开始做素数筛选时,CPU的高速缓存子系统会发出装载数据的访存请求,负责CPU与GPU高速缓存一致性的部件会接到这个请求,随即指示GPU的高速缓存把排好序的数字直接推送至CPU的高速缓存,这个过程对上层软件栈透明。
总体来看,SW26010勇敢地迈出了硬件一致性这一步,但其量产时使用的具体实现方案目前没有透露。当然,在未来申威处理器的设计团队或许能公开发表文章讲述其内部设计实现的具体细节。
SW26010 2015年的论文中介绍的CPE与MPE之间的一致性维护方式,CPE读取MPE端的最新数据需要通过内存中转。超前的设计亮点与缺憾
除了硬件一致性的支持之外,SW26010其余的设计也可圈可点。整体上来说可以认为SW26010的结构领先目前Intel的加速卡和NVIDIA的GPGPU半代左右的水平。领先特征可以概括为如下两个方面:
其一是片上网络。SW26010在CPE核心阵列内使用了mesh结构的片上网络,多个CPE核心阵列与MPE核心之间更是使用了第二层的片上互联网络,使之成为了一个样式标准的众核+多级片上网络结构,片上网络上还挂载了支持中断处理和同步处理的mesh控制器。具备一定规模,有一定拓扑性质的片上网络在目前的处理器/GPGPU中都较少见到,SW26010在这一点上可以毫不愧疚地迈入国际第一梯队的行列。
其二是CPE阵列内部的寄存器通信。为了尽可能地把数据保持在本地,SW26010在CPE阵列内部也引入了快速寄存器通信机制,支持多播和广播两种通信方式。其设计的通信接口和MPI类似,通过专有指令进行,不保证一致性。这种通信方式可以绕过片上缓存,直接在各个核心的寄存器之间交换数据。目前暂不清楚一个CPE阵列的64个核之间是否支持点对点的低延迟寄存器通信,即便不是最强的点对点通信,在64个核之间直接实现对流水线上资源的注入,其所需要的低延迟核间连线也是一项非常值得深入探究的设计。
另外,SW26010的设计中也有一些令人疑惑的地方。对于片上高速缓存子系统,每个MPE核心具备32KB一级数据缓存和32KB一级指令缓存,以及256KB的二级缓存;而在CPE核心阵列当中,每一个CPE核心有各自独立的16KB指令缓存,以及一块由程序员直接控制的64KB SPM(Scratch Pad Memory),未提及其他硬件高速缓存,且SPM之间不提供硬件一致性。SPM和普通的高速缓存的区别在于,普通的高速缓存是由硬件来决定换入换出,也就是说存储什么内容是由硬件依据访问历史、访问频率、步长等信息自主决定的,但SPM则把这一工作交给了上层软件,这一做法和NVIDIA在GPGPU中提供一级高速缓存+SPM的配置类似,其坏处是加大了上层软件的调优难度,好处是如果SPM能够用好,可以收到超过普通高速缓存的效果。笔者猜测SW26010没有在CPE阵列上配置传统的硬件高速缓存,可能是因为目前异构众核高速缓存硬件一致性的方案太过超前,目前还不完全成熟,亦或是成本原因难以在256核心的片上再配置大容量的硬件高速缓存。
CPE阵列的框架图 左侧为需要经过核内甚至核外存储的传统核间通讯方式,右侧为SW26010的核间快速寄存器通信方式。作者注:本文所有技术框架图、数据和技术介绍来源于
[1] Cooperative Computing Techniques for a Deeply Fused andHeterogeneous ManyCore Processor Architecture. 计算机科学与技术学报,2015.
[2] The Sunway TaihuLight supercomputer: system and applications. 中国科学·信息科学,2016.
[3] Jack Dongarra教授对太湖之光系统的公开报告
结语:无惧技术封锁
SW26010的推出意义深远,在仅仅一年之后就宣告中国打破了美国的超级计算机相关芯片产品的禁运,问鼎top500的同时又携带三个戈登贝尔奖入围的真实应用,对于中国的超算行业来说可谓一针实打实的强心剂。记得在2015年4月,美国商务部发布公告,决定禁止向中国4家国家超级计算机机构出售“至强”芯片之时,业内人士还曾担心禁售短期内可能造成“天河二号”升级计划拖延,但长期来看“这是倒逼中国推进超算国产化战略的重要机遇”。很多人显然完全没想到国产处理器可以发展得这么快、并且夺得世界冠军。毫无疑问,美国的芯片禁运反而缩短了中国的研制周期,使我们搞出了完全自主的高性能处理器和完全自主可控的超级计算机,西方的芯片禁运对中国可谓利大于弊。因此仅仅想通过几款芯片的禁运,就来阻挡中国这样拥有大量尖端人才的科技大国的发展,显然太天真了一点。