‘壹’ [高性能计算的三大研究领域]高性能计算领域的研究内容
科学计算、海量信息处理与检索以及正在普及的多核个人计算机是高性能计算的主要研究领域,由于领域的不同,对于高性能计算各自都有不同的研究重点。 美国宇航局(NASA)是超级计算机最大的用户之一
从起源来看,计算机系统的原始需求来自军事,如第一台计算机ENIAC是美国军队为了计算弹道而投资研制的。在随后的30年中,计大逗算机主要应用于与国家安全相关的领域,如核武器设计、密码破译等。到20世纪70年代末,高性能计算机开始应用于石油工业、汽车工业等资本密集型工业。随后,高性能计算机开始广泛进入各个行业,协助进行产品设计、用户分析等等。如医药公司使用高性能计算机辅助进行药物设计,可以大大节省新药的研发开支; 超市使用高性能计算机分析用户消费模式,以推出恰当促销措施等等。在这些领域,更高的计算性能就意味着在产品和服务方面的竞争优势。在科学研究领域,数值模拟方法成为现代科学方法的重要组成部分,这里更高的计算性能就意味着更快的科学发现速度。目前,高性能计算技术已成为促进科技创新和经济发展的重要手段,是一个国家综合国力的重要组成部分。本文将就高性能的几个最重要的应用领域进行介绍。
用高性能计算机解决科学挑战
许多重要的科学问题非常复杂,需要功能非常强大的计算机来进行数值模拟,这些问题被视作科学上的重大挑战,可以分为如下几类:
1. 量子化学、统计力学和相对论物理学;
搜纯2. 宇宙学和天体物理学;
3. 计算流体力学和湍流;
4. 材料设计和超导;
5. 生物学、制药研究、基因组序列分析、基因工程、蛋白质折叠、酶活动和细胞建模;
6. 药物、人类骨骼和器官建模;
7. 全球天气和环境建模。
这些重大世仿咐挑战问题大多可以看作传统的高性能计算应用的延伸,其特点是: 大部分是浮点密集型应用程序,并行算法要求多个并行进程之间进行较为频繁的通信和同步,而非简单的多个计算用例之间的并行,因此无法使用多台规模较小的系统来替代一台大规模系统。
这些重大挑战问题对计算能力的需求远远超出了现有的高性能计算机的性能。以量子化学计算为例,需要20T~100Tflops的持续计算能力才能够对目前进行的实际实验结果进行预测。在核聚变研究领域,需要20Tflops的持续计算能力才能够进行全规模的系统模拟。蛋白质折叠的计算需要1Tflops的持续计算速度。另一方面,重大挑战问题对数据的存储也提出了更高的要求,以计算生物学为例,进行蛋白质分析时需要使用的一台质谱仪每天就可以产生100GB的数据,50台质谱仪1天就可以产生5TB的数据。
目前,世界上最快IBM BlueGene/L的处理器个数为131072个,Linpack速度为280.6TFlops,达到了其峰值速度的76.5%(2005年11月数据)。但一般并行算法要比Linpack的通信更加频繁,访存局部性也没有Linpack好,这使得其并行效率相当低,通常仅能达到系统峰值速度的10%,甚至更低。为了能够有效地解决上述重大挑战性的问题,需要研制千万亿次高性能计算机系统,这就需要攻克系统结构、软件工具和并行算法等多方面的难关:
1. 能耗控制
随着现代处理器频率的增加,其功率也大幅度增加,最新处理器的功耗已经超过100W。这使得高性能计算系统本身的耗电问题已经十分严重。同时由于系统散发的大量热量,必须在机房中采用大功率的空调系统才能保持系统机房的正常温度。这两方面的因素造成系统的整体电能消耗非常巨大,维护成本很高。分析结果表明,未来系统主要的维护成本将来自系统的电能消耗。在研制千万亿次高性能计算机系统时,必须重视系统的能耗问题。
目前有几种方法来处理系统能耗问题,一是给处理器设定较低的工作电压,通过并行性来获得高性能,例如BlueGene/L处理器的工作频率仅有700Mhz,因此单个内核的处理能力远远低于其他高频率的处理器。但BlueGene/L通过大量的处理器来弥补单个处理器能力的不足,达到了较高的整体系统性能,并获得了优化的性能/能耗比。另一种方法是通过软件和硬件传感器确定和预测需要使用的部件和不需要使用的部件,然后将不需要立即使用的部分通过某种措施,如降低频率或完全关闭来减少其耗电量,从而达到降低整个系统功耗的目的。这方面的工作根据控制的粒度不同可分为芯片级、主板/BIOS级以及结点级。
2. 高性能计算软件与算法
大规模并行处理硬件系统仅仅为高性能计算提供了一个平台,真正的功能还要通过高性能计算软件来完成。高性能计算软件与算法的主要工作可以分为3类:
(1) 提出具有较低理论复杂度或较好实际性能的串行算法
尽管可以通过并行计算来加快运算的速度,但并行处理往往需要较大的软件开发成本和硬件成本,因此在进行并行算法的开发之前,必须考察是否存在可以解决问题的更好串行算法。以整数排序问题为例,使用并行的冒泡排序算法,其效果还不如使用串行的快速排序算法。因此,高效的串行算法研究是高性能算法研究的重要课题。着名的算法包括线性规划问题的单纯型法、FFT、快速排序、矩阵特征值的QR算法、快速多极算法等。近年来在算法方面的突破使印度学者在素数判定问题上提出了多项式复杂度算法。
(2) 优化现有算法
算法只提供了理论上的性能,要在实际系统上获得高性能,必须对算法的实现进行优化。现代处理器大多使用多级Cache来隐藏访存延迟,因此必须根据目标系统的Cache参数来优化算法的访存行为。此外,许多处理器还提供了SIMD指令,合理使用这些指令可以达到较高的性能。许多优化的数学库,如ATLAS、Intel公司的MKL等已经为不同的体系结构,特别是Cache配置进行了特别优化,可以达到较高的执行效率,为优化算法实现提供了很好的帮助。
(3) 并行算法与并行应用的开发
并行算法的研究与串行算法有联系也有区别。优秀的串行算法并不一定适合并行化,某些时候在串行算法中并非最优的算法在并行实现时却能体现出较大的优势。对于千万亿次计算机而言,其处理器(核)个数在10万以上,并行应用的并行度需要达到数万个并行进程才能有效地利用千万亿次计算机。并行算法的三个主要优化目标是: 通信优化、负载平衡以及最大化并行区。通信优化的目标是尽量减少通信次数和通信量,减少由于处理器之间通信带宽限制引起的性能下降。在大规模并行程序中,负载平衡问题也非常突出,少数负载不平衡的任务会使得整体性能急剧下降。同样的,根据Amdahl定律,应用加速比的上限是串行区所占比例的倒数,即应用中1%的串行区域就会使得整个应用程序的加速比不可能超过100。因此,要在数万个并行进程的情况下取得理想的加速比给并行算法的开发提出了很大的挑战。
3. 系统可靠性与可管理性
随着系统内结点个数的增加,系统失效的可能性也随着增大。并行程序的特点是只要有一个并行进程失败,整个并行程序都执行不成功。对可靠性问题的处理方法之一是设法提高系统的稳定性,这包括硬件系统可靠性和软件系统的可靠性。但目前公认的结论是: 大规模系统的故障是在设计时必须考虑的前提条件,而并非可以通过技术手段加以解决的问题。因此,必须考虑如何在系统结点出现故障的情况下仍然能够保证系统服务质量不发生显着下降。
故障监测技术和动态系统重构技术可以用来减少或消除系统失效对应用的影响,即尽快隔离出现问题的结点,使得用户可以使用状态正常的结点进行计算。与系统动态重构技术类似的技术还有系统动态划分技术,主要用于向不同的用户提供相互独立的结点集,使得整个系统的管理和使用更加有效和安全。
但是上述技术仅能解决系统对新的应用的服务质量问题,无法保证已经执行的应用在某个计算结点出现问题后的处理。某些并行应用,如石油数据处理需要连续运行几十天的时间,一旦某个结点出现错误,会使得前面的计算前功尽弃,需要从头开始计算。并行检查点技术主要提供应用级的容错,即能够自动地定期记录并行程序的状态(称作检查点),在计算过程中某个结点发生失效后,可以从所记录的并行程序检查点恢复执行,避免了重新执行整个程序。
高性能计算与海量信息处理
人类所产生的信息量以指数速度增长,如何存储、检索和利用这些信息为信息技术提出了重要挑战。从20世纪90年代开始,互联网的飞速发展给信息的传播与服务提供了新的机遇。传统的信息服务系统以数据库为中心,典型应用是OLTP(事务联机处理)。而以Google为代表的海量信息检索与处理服务是另一类重要应用,以Google集群系统为代表的系统体现了高性能计算系统的另一个发展方向。
信息检索与处理服务系统的特点与科学计算非常不同,对处理系统也提出了不同的要求:
1. 信息处理与服务应用需要频繁访问动态的数据结构,包含很多不可预测的分支,使得现有超标量处理器中的许多技术,如分支预测、数据预取、乱序和推测执行等功能无法很好地发挥作用,应用的指令级并行性较差。
2. 大部分信息处理与服务应用具有较好的数据并行性,可以很容易地在分布式系统上执行。以信息检索为例,一个信息检索请求可以被分配到多个服务器上进行并行检索,最后再将搜索结果统一处理返回给用户。这个过程中大多数的访问是只读的数据,并行任务之间的通信非常少,并行效率比较高。
3. 系统的性能指标一般不以单个服务请求的响应时间为量度,而更关注系统整体的吞吐率。以搜索引擎为例,信息服务系统更重视在1分钟内能够完成的用户搜索次数,而对单次搜索在0.5秒内完成还是1秒内完成并不特别敏感。
4. 系统需要很高的可靠性和可维护性。可靠性是对服务而言的,即组成的系统必须能够近乎不间断地为用户提供服务。可维护性是指系统的更换与维修可以简单快捷地完成,新更换的结点可以快捷地加入到系统中。
5. 低成本。这包括系统构建成本和总拥有成本两部分。海量信息处理和服务所需的系统规模极为庞大,Google Cluster在2003年就达到了15000台计算机的规模。如此巨大规模的系统,需要尽可能地降低成本。
为了能够有效满足上述信息处理与服务系统的要求,人们对于如何高效地构建相应的服务系统也展开了研究与实践:
1. 使用副本技术通过软件提供可靠性
在大规模系统中,单个系统结点的失效是不可避免的。现有的通过冗余底层硬件提高系统可靠性的方式,比如冗余电源、RAID技术等,成本较高,性价比较差。相反,在信息服务系统中可以广泛使用软件提供服务级别的可靠性。主要的方法是采用副本,即将服务和数据复制到多个系统结点上,即使单个系统结点的可靠性不是很高,多个副本提供了服务所需的可靠性。另一个使用副本技术的优点在于其提高系统可靠性的同时也提高了系统的性能,即保存副本的多个系统结点可以同时向用户提供服务。
2. 注重系统的性能/价格比
由于信息服务系统应用容易并行的特点,采用大量低端系统组合的方法比使用少量高端系统在性能价格比方面更具有优势(此处所指的低端系统是指1~2个CPU的PC机或入门服务器,高端系统是指大规模处理器服务器,如HP 的Superdom服务器、IBM的P690服务器等)。此外,信息服务系统与用于科学计算的高性能系统面临同样的挑战: 能耗问题。在大规模信息处理与服务系统中,电费成本(包括系统本身耗电和空调系统耗电)将占有总拥有成本的很大一部分。因此,在选用系统时,应选择性能/能耗比较高的系统也是一个重要的原则。
(3) 使用多内核处理器
由于信息服务程序的特点,它更适合使用多个简单内核构成的处理器,这些简单内核仅需要按序执行,并使用较短的流水线。由于信息服务应用的指令级并行度较差,按序执行不会造成太多的性能下降,但可以节省复杂的乱序执行单元电路,从而可以降低功耗。另一方面,较短的流水线可以降低分支预测失效的开销。
并行计算与个人计算机
随着半导体工艺的发展,单个芯片上能够集成的元件个数还将在5~10年内遵循摩尔定律继续以指数级增长。但是当前的芯片散热技术已无法支持芯片频率的进一步提高,而通过提高发射宽度、提高分支预测效率以及数据预取等进一步在体系结构上提高单线程执行速度的方法也逐渐失去了有效性。多内核芯片通过在一个芯片内集成多个处理器内核,采用线程级并行提高处理器性能,已成为微处理器的主要发展趋势。IBM公司在几年前就推出了双内核Power芯片,Intel公司和AMD在2005年推出的双内核芯片更是标志着多内核技术进入了普及阶段。支持更多核心的处理器芯片也正在快速涌现,如Sun公司已经推出了8核的Nigeria芯片,用于面向提高吞吐率的服务器应用; IBM则联合索尼和东芝推出了面向娱乐应用的9内核Cell芯片。Intel公司甚至已经在计划100内核以上的处理器。
多核处理器的出现给计算机的使用带来了新的挑战。随着多内核处理器的普及,成千上万的桌面电脑将成为并行计算机。目前在桌面机上执行的应用程序大多数是单线程程序,无法有效利用多内核处理器提供的能力。如何有效地在个人电脑上利用多个处理器内核成为高性能计算领域一个重要的研究课题,从目前的趋势来看主要有以下几个方向:
1.使用多任务带来的并发性
Intel的 双核ViiV家用电脑是这方面的典型例子。ViiV电脑的典型使用模式是一个人在客厅使用ViiV电脑看电影,另一个在自己的房间里使用同一台电脑玩游戏,两个人使用同一台电脑中的不同处理器内核,从而达到了有效发挥双核能力的目的。但这种依靠多个用户同时使用一台电脑的模式具有很大局限性,因为家庭成员的个数是有限的,对于4内核以上的多内核处理器,这种模式无法提供有效的支持。
2.聚合多内核的能力,加速串行程序的执行速度
计算机科学家们正在研究一种称作推测多线程(TLS: Thread-Level Speculation)的技术,该技术可以自动分析串行程序,推测其中能够并行执行的部分,在多个内核上并行执行。但一旦发现并行执行的部分有冲突,就撤销其中一个冲突线程的执行,执行补偿操作并重新执行该线程。推测多线程技术的优点在于无需用户干预就可以在多内核系统上加速现有单线程程序,其缺点在于对于性能提高的幅度有限,大约在4内核系统上仅能比在单个内核上提高性能30%,而且再增加内核数,其加速比也不会显着增加。因此,这种方式也无法支持更多内核的处理器。
另一种有前途的技术是自动并行化技术。自动并行化技术可以在编译时识别程序中的并行性,并将其转化为多线程并行程序。过去的自动并行化技术主要是面向SMP系统的,但不是很成功,原因是对真实应用程序,自动并行化无法得到满意的加速比。一个程序通过自动并行化在4 CPU的SMP系统上得到20%的加速比是不能令人满意的,因为4 CPU的系统通常价格是单CPU价格的10倍以上,自动并行化无法提供性能价格比上的优势。但是对于多内核系统,如果能够在四内核系统上通过自动并行化得到20%的加速比,应该是比较令人满意的结果,因为这些内核是“免费”提供给用户的,即用户无法用四内核处理器1/4的价格购买一个单内核处理器。因此,多内核处理器在家用电脑上的普及,将大大降低人们对自动并行化效果的期望,使得自动并行化技术重新被接受和应用。
3. 并行化现有的桌面应用
既然采用多内核处理器加速串行应用无法充分利用多内核处理器的能力,那么并行化现有的桌面应用就成为了一个重要选择。这方面的研究主要是分析现有的桌面应用,对有代表性的应用进行手工并行化,这些研究试图回答下面的问题: 哪些桌面应用能够被有效并行化,哪些不能?并行化本身的难度有多大?应如何改进现有的编程模型、编程工具以及系统软件来更好地支持应用的并行化?
研究表明,桌面系统上的大部分应用,如图像处理、3D图形运算、多媒体数据编码与解码、数据与文本挖掘、文本与媒体搜索、游戏与博弈等都可以有效地被并行化,并在多内核系统上得到有效的执行。但是,手工程序并行化的开销仍然很大,并行程序员需要了解并行计算的有关知识,并对计算机体系结构、操作系统、编译原理等有一定了解才能写出有效率的并行程序。并行编程模型与并行编程工具还需要提供更好的支持,以帮助并行程序员开发、调试并行程序。
今天,高性能计算技术已成为整个计算机领域的引领技术。多内核处理器的出现,使得并行计算技术将很快普及到我们的每台计算机,渗入到我们生活的方方面面,这是计算机产业发展史上的一个重大变革,对我国而言是一次难得的机会。在“十一五”期间,我国将进一步加强对高性能计算技术研究的支持,注重引导企业应用高性能计算技术促进产业升级和科技创新,同时更加特别重视高性能计算技术的教育培训工作,在高校的理工专业广泛开设并行程序设计课程,培养更多了解和使用高性能计算技术的人才,在此次变革中实现跨越性的发展。
作者简介
陈文光
清华大学计算机博士,清华大学计算机系副教授,863高性能计算机评测中心副主任。曾任Opportunity International Inc.总工程师。主要研究领域为并行计算的编程模型、并行化编译和并行应用分析。
链接:高性能计算发展趋势
随着应用的需求与计算机技术本身的发展,近年来高性能计算的发展体现出一些新的特点,可以用“大,宽,小”来代表这三个特点:
“大”是指高性能计算系统向更大规模发展,处理器个数可达10万个以上,主要用于解决超大规模的数值模拟问题。
“宽”是指在传统的数值计算之外,高性能计算系统正越来越广泛地应用于信息处理和服务领域,为海量信息的存储与检索以及网络服务提供有效的保证。
“小”是指多内核CPU的出现和普及,将使得今后的每台个人计算机都成为并行计算机,如何有效地利用个人计算机的多个内核是对高性能计算技术提出的新挑战。
‘贰’ 什么是并行处理
并行处理是计算机系统中能同时执行两个或多个处理的一种计算方法。并行处理可同时工作于同一程序的不同方面。并行处理的主要目的是节省大型和复杂问题的解决时间。
为使用并行处理,首先需要对程序进行并行化处理,也就是说将工作各部分分配到不同处理进程(线程)中。并行处理由于存在相互关联的问题,因此不能自动实现。
另外,并行也不能保证加速。从理论上讲,在 n 个并行处理的执行速度可能会是在单一处理机上执行的速度的 n 倍。
利用计算机语言进行并行性描述的时候主要有三种方案:
1.语言扩展方案:也就是利用各种语言的库函数来进行并行性功能的扩展。
2.编译制导法:也称为智能编译,它是隐式并行策略的体现,主要是由并行编译系统进行程序表示、由相关分析得到方法库管理方案,由优化分析得到知识库管理方案,从而形成并行程序。
3.新的语言结构法:这是显式并行策略的体现。也就是建立一种全新的并行语言的体系,而这种并行语言通过编译就能直接形成并行程序 。
‘叁’ 编译器优化怎么定义
常见的优化和变新有:函数内嵌(inlining),无用代码删除(Dead code elimination),标准化循环结构(loop normalization),循环体展开(loop unrolling),循环体合并,分裂(loop fusion,loop fission),数组填充(array padding),等等。 优化和变形的目的是减少代码的长度,提高内存(memory),缓存(cache)的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码(serial code)变成并行运算,多线程的代码(parallelized,multi-threaded code)。
机器代码的生成是优化变型后的中间代码转换成机器指令的过程。现代编译器主要采用生成汇编代码(assembly code)策略,而不直接生成二进制的目标代码(binary object code)。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形工作。例如如何分配寄存器(register allocatioin),如何选择合适的机器指令,如何合并几句代码成一句等等。
‘肆’ 并行处理的并行算法的基本策略
在并行处理技术中所使用的算法主要遵循三种策略:
1.分而治之法:也就是把多个任务分解到多个处理器或多个计算机中,然后再按照一定的拓扑结构来进行求解。
2.重新排序法:分别采用静态或动态的指令词度方式。
3.显式/隐式并行性结合:显式指的是并行语言通过编译形成并行程序,隐式指的是串行语言通过编译形成并行程序,显式/隐式并行性结合的关键就在于并行编译,而并行编译涉及到语句、程序段、进程以及各级程序的并行性。
二、并行性描述定义
利用计算机语言进行并行性描述的时候主要有三种方案:
1.语言扩展方案:也就是利用各种语言的库函数来进行并行性功能的扩展。
2.编译制导法:也称为智能编译,它是隐式并行策略的体现,主要是由并行编译系统进行程序表示、控制流的分析、相关分析、优化分析和并行化划分,由相关分析得到方法库管理方案,由优化分析得到知识库管理方案,由并行化划分得到程序重构,从而形成并行程序。
3.新的语言结构法:这是显式并行策略的体现。也就是建立一种全新的并行语言的体系,而这种并行语言通过编译就能直接形成并行程序。
三、并行软件
并行软件可分成并行系统软件和并行应用软件两大类,并行系统软件主要指并行编译系统和并行操作系统,并行应用软件主要指各种软件工具和应用软件包。在软件中所牵涉到的程序的并行性主要是指程序的相关性和网络互连两方面。
1.程序的相关性:程序的相关性主要分为数据相关、控制相关和资源相关三类。
数据相关说明的是语句之间的有序关系,主要有流相关、反相关、输出相关、I/O相关和求知相关等,这种关系在程序运行前就可以通过分析程序确定下来。数据相关是一种偏序关系,程序中并不是每一对语句的成员都是相关联的。可以通过分析程序的数据相关,把程序中一些不存在相关性的指令并行地执行,以提高程序运行的速度。
控制相关指的是语句执行次序在运行前不能确定的情况。它一般是由转移指令引起的,只有在程序执行到一定的语句时才能判断出语句的相关性。控制相关常使正在开发的并行性中止,为了开发更多的并行性,必须用编译技术克服控制相关。
而资源相关则与系统进行的工作无关,而与并行事件利用整数部件、浮点部件、寄存器和存储区等共享资源时发生的冲突有关。软件的并行性主要是由程序的控制相关和数据相关性决定的。在并行性开发时往往把程序划分成许多的程序段——颗粒。颗粒的规模也称为粒度,它是衡量软件进程所含计算量的尺度,一般用细、中、粗来描述。划分的粒度越细,各子系统间的通信时延也越低,并行性就越高,但系统开销也越大。因此,我们在进行程序组合优化的时候应该选择适当的粒度,并且把通讯时延尽可能放在程序段中进行,还可以通过软硬件适配和编译优化的手段来提高程序的并行度。
2.网络互连:将计算机子系统互连在一起或构造多处理机或多计算机时可使用静态或动态拓扑结构的网络。静态网络由点一点直接相连而成,这种连接方式在程序执行过程中不会改变,常用来实现集中式系统的子系统之间或分布式系统的多个计算结点之间的固定连接。动态网络是用开关通道实现的,它可动态地改变结构,使之与用户程序中的通信要求匹配。动态网络包括总线、交叉开关和多级网络,常用于共享存储型多处理机中。在网络上的消息传递主要通过寻径来实现。常见的寻径方式有存储转发寻径和虫蚀寻径等。在存储转发网络中以长度固定的包作为信息流的基本单位,每个结点有一个包缓冲区,包从源结点经过一系列中间结点到达目的结点。存储转发网络的时延与源和目的之间的距离(段数)成正比。而在新型的计算机系统中采用虫蚀寻径,把包进一步分成一些固定长度的片,与结点相连的硬件寻径器中有片缓冲区。消息从源传送到目的结点要经过一系列寻径器。同一个包中所有的片以流水方式顺序传送,不同的包可交替地传送,但不同包的片不能交叉,以免被送到错误的目的地。虫蚀寻径的时延几乎与源和目的之间的距离无关。在寻径中产生的死锁问题可以由虚拟通道来解决。虚拟通道是两个结点间的逻辑链,它由源结点的片缓冲区、结点间的物理通道以及接收结点的片缓冲区组成。物理通道由所有的虚拟通道分时地共享。虚拟通道虽然可以避免死锁,但可能会使每个请求可用的有效通道频宽降低。因此,在确定虚拟通道数目时,需要对网络吞吐量和通信时延折衷考虑。
四、硬件技术在硬件技术方面主要从处理机、存储器和流水线三个方面来实现并行。
1.处理机:主要的处理机系列包括CISC、RISC、超标量、VL1W、超流水线、向量以及符号处理机。
传统的处理机属于复杂指令系统计算(CISC)结构。指令系统大,指令格式可变,通用寄存器个数较少,基本上使用合一的指令与数据高速缓存,时钟频率较低,CPI较高,大多数利用ROM 实现微码控制CPU,而当今的精简指令系统计算(RISC)处理机指令格式简单规范,面向寄存器堆,采用重叠寄存器窗口技术,具有多级Cache,多种流水线结构,强调编译优化技术,时钟频率快,CPI低,大多数用硬连线控制CPU。
CISC或RISC标量处理机都可以采用超标量或向量结构来改善性能。标量处理机在每个周期内只发射一条指令并要求周期只完成从流水线来的一条指令。而在超标量处理机中,使用了多指令流水线,每个周期要发射多条指令并产生多个结果。由于希望程序中有许多的指令级并行性,因此超标量处理机更要依靠优化编译器去开发并行性。
VL1W 结构是将水平微码和超标量处理这两种普遍采用的概念结合起来产生的。典型的超长指令字VL1W 机器指令字长度有数百位。在VLlW 处理机中,多个功能部件是并发工作的,所有的功能部件共享使用公用大型寄存器堆,由功能部件同时执行的各种操作是用VL1W 指令来同步的,每条指令可指定多个操作。VL1W 指令译码比超标量指令容易,但在开发不同数量的并行性时总是需要不同的指令系统。VL1W 主要是开发标量操作之间的并行性,它的成功与否很大程度取决于代码压缩的效率,其结构和任何传统的通用处理机完全不兼容。即使同一结构的不同实现也不大可能做到彼此二进制兼容。VL1W 的主要优点在于它的硬件结构和指令系统简单,在科学应用领域可以发挥良好作用,但在一般应用场合可能并不很好用。
向量处理机对数组执行向量指令,每条指令都包含一串重复的操作。它是专门设计用来完成向量运算的协处理机,通常用于多流水线超级计算机中。向量处理机可以利用循环级展开所得的并行性,它可以附属于任何标量处理机。专用的向量流水线可以在循环控制中消除某些软件开销,它的效果与优化编译器将顺序代码向量化的性能很有关系。从理论上说,向量机可以具有和超标量处理机同样的性能,因此可以说向量机的并行性与超标量机相同。
符号处理机是为AI应用而研制的,已用于定理证明、模式识别、专家系统、知识工程、文本检索、科学以及机器智能等许多应用领域。在这些应用中,数据和知识表达式、原语操作、算法特性、存储器、I/0和通信以及专用的结构特性与数值计算是不一样的,符号处理机也称为逻辑程序设计语言处理机、表处理语言处理机或符号变换器。符号处理并不和数值数据打交道,它处理的是逻辑程序、符号表、对象、剧本、黑板、产生式系统、语义网络、框架以及人工神经网络等问题。这些操作需要专门的指令系统,通常不使用浮点操作。
2.存储器:存储设备按容量和存取时间从低到高可分为寄存器、高速缓存、主存储器、磁盘设备和磁带机五个层次。较低层存储设备与较高层的相比,存取速度较快、容量较小,每字节成本较高、带宽较宽、传输单位较小。
存放在存储器层次结构中的信息满足三个重要特性:包含性、一致性和局部性。所谓包含性,指的是一个信息字的复制品可以在比它高的所有层中找到,而如果在高层中丢失了一个信息,则在比它低的所有层中此信息也将丢失。CPU 和高速缓存之间的信息传送是按字进行的,高速缓存和主存储器间用块作为数据传送的基本单位,主存和磁盘之间又是以页面为基本单位来传送信息的,而在磁盘和磁带机之间的数据传送则是按文件级处理的。所谓一致性要求的是同一个信息项与后继存储器层次上的副本是一致的。也就是说,如果在高速缓存中的一个字被修改过,那么在所有更高层上该字的副本也必须立即或最后加以修改。为了尽量减少存储器层次结构的有效存取时间,通常把频繁使用的信息放在较低层次。维护存储器层次结构一致性一般有两种策略,一种是写直达策略,也就是如果,则立即在所有高层存储器中进行同样的修改;另一种是写回策略,也就是在较低层中对信息进行修改后并不立即在高层存储器中进行相应的修改,而是等到该信息将被替换或将从低层中消失时才在所有高层存储器中进行同样的修改。甚至可以将写直达和写回策略的优点结合起来,形成写一次协议来维护存储器的一致性。
存储器的层次结构是在一种程序行为——访问的局部性基础上开发出来的。主要有时间局部性、空间局部性和顺序局部性。时间局部性指的是最近的访问项很可能在不久的将来再次被访问。它往往会引起对最近使用区域的集中访问。空间局部性表示一种趋势,指的是一个进程访问的各项其地址彼此很近。顺序局部性指的是在典型程序中,除非是转移指令,一般指令都是顺序执行的。
在多处理机系统中一般使用共享存储器。对共享存储器的组织一般采用低位交叉、高位交叉、高低位交叉三种方法。低位交叉又称并发存取,它是把相邻的地址放在相邻的存储器模块中,在访问时不容易产生冲突,并行性较好,但可靠性容错能力和扩展性均较差。高位交叉又称允许同时存取,它是把相邻地址分配到同一个存储器模块中,可靠性、容错能力和扩展性均较强,但访问时易产生冲突,带宽较窄,并行性较差。高低位交叉存取又称C—s存取,它是结合了高位交叉和低位交叉两种方法的优点,既解决了冲突问题,又能有效地提高容错能力和并行性,最适合于向量处理机结构。
3.流水线:流水线技术主要有指令流水线技术和运算流水线技术两种。
指令流水线技术主要目的是要提高计算机的运行效率和吞吐率。它主要通过设置预取指令缓冲区、设置多功能部件、进行内部数据定向、采取适当的指令调度策略来实现。指令调度的策略主要有静态和动态两种,静态词度是基于软件的,主要由编译器完成,动态词度是基于硬件的,主要是通过硬件技术进行。
运算流水线主要有单功能流水线和多功能流水线两种。其中多功能流水线又可分为静态流水线和动态流水线。静态流水线技术只用来实现确定的功能,而动态流水线可以在不同时间重新组合,实现不同的功能,它除流线连接外,还允许前馈和反馈连接,因此也称为非线性流水线。这些前馈和反馈连接使得进入流水线的相继事件的词度变得很不简单。由于这些连接,流水线不一定从最后一段输出。根据不同的数据流动模式,人们可以用同一条流水线求得不同功能的值。
并行计算机发展简述
40 年代开始的现代计算机发展历程可以分为两个明显的发展时代:串行计算时代、并行计算时代。每一个计算时代都从体系结构发展开始,接着是系统软件(特别是编译器与操作系统)、应用软件,最后随着问题求解环境的发展而达到顶峰。创建和使用并行计算机的主要原因是因为并行计算机是解决单处理器速度瓶颈的最好方法之一。
并行计算机是由一组处理单元组成的,这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。因此,并行计算机的两个最主要的组成部分是计算节点和节点间的通信与协作机制。并行计算机体系结构的发展也主要体现在计算节点性能的提高以及节点间通信技术的改进两方面。
60 年代初期,由于晶体管以及磁芯存储器的出现,处理单元变得越来越小,存储器也更加小巧和廉价。这些技术发展的结果导致了并行计算机的出现,这一时期的并行计算机多是规模不大的共享存储多处理器系统,即所谓大型主机(Mainframe)。IBM360 是这一时期的典型代表。
到了60 年代末期,同一个处理器开始设置多个功能相同的功能单元,流水线技术也出现了。与单纯提高时钟频率相比,这些并行特性在处理器内部的应用大大提高了并行计算机系统的性能。伊利诺依大学和Burroughs 公司此时开始实施IlliacIV 计划,研制一台64 个CPU 的SIMD 主机系统,它涉及到硬件技术、体系结构、I/O 设备、操作系统、程序设计语言直至应用程序在内的众多研究课题。不过,当一台规模大大缩小了的16CPU 系统终于在1975 年面世时,整个计算机界已经发生了巨大变化。
首先是存储系统概念的革新,提出虚拟存储和缓存的思想。IBM360/85 系统与360/91是属于同一系列的两个机型,360/91 的主频高于360/85,所选用的内存速度也较快,并且采用了动态调度的指令流水线;但是,360/85 的整体性能却高于360/91,唯一的原因就是前者采用了缓存技术,而后者则没有。
其次是半导体存储器开始代替磁芯存储器。最初,半导体存储器只是在某些机器被用作缓存,而CDC7600 则率先全面采用这种体积更小、速度更快、可以直接寻址的半导体存储器,磁芯存储器从此退出了历史舞台。与此同时,集成电路也出现了,并迅速应用到了计算机中。元器件技术的这两大革命性突破,使得IlliacIV 的设计者们在底层硬件以及并行体系结构方面提出的种种改进都大为逊色。
1976 年CRAY-1 问世以后,向量计算机从此牢牢地控制着整个高性能计算机市场15 年。CRAY-1 对所使用的逻辑电路进行了精心的设计,采用了我们如今称为RISC 的精简指令集,还引入了向量寄存器,以完成向量运算。这一系列全新技术手段的使用,使CRAY-1 的主频达到了80MHz。
微处理器随着机器的字长从4 位、8 位、16 位一直增加到32 位,其性能也随之显着提高。正是因为看到了微处理器的这种潜力,卡内基- 梅隆大学开始在当时流行的DECPDP11 小型计算机的基础上研制成功一台由16 个PDP11/40 处理机通过交叉开关与16 个共享存储器模块相连接而成的共享存储多处理器系统C.mmp。
从80 年代开始,微处理器技术一直在高速前进。稍后又出现了非常适合于SMP 方式的总线协议,而伯克利加州大学则对总线协议进行了扩展,提出了Cache 一致性问题的处理方案。从此,C.mmp 开创出的共享存储多处理器之路越走越宽;现在,这种体系结构已经基本上统治了服务器和桌面工作站市场。
同一时期,基于消息传递机制的并行计算机也开始不断涌现。80 年代中期,加州理工成功地将64 个i8086/i8087 处理器通过超立方体互连结构连结起来。此后,便先后出现了Intel iPSC 系列、INMOS Transputer 系列,Intel Paragon 以及IBM SP 的前身Vulcan 等基于消息传递机制的并行计算机。
80 年代末到90 年代初,共享存储器方式的大规模并行计算机又获得了新的发展。IBM将大量早期RISC 微处理器通过蝶形互连网络连结起来。人们开始考虑如何才能在实现共享存储器缓存一致的同时,使系统具有一定的可扩展性(Scalability)。90 年代初期,斯坦福大学提出了DASH 计划,它通过维护一个保存有每一缓存块位置信息的目录结构来实现分布式共享存储器的缓存一致性。后来,IEEE 在此基础上提出了缓存一致性协议的标准。
90 年代以来,主要的几种体系结构开始走向融合。属于数据并行类型的CM-5 除大量采用商品化的微处理器以外,也允许用户层的程序传递一些简单的消息;CRAY T3D是一台NUMA 结构的共享存储型并行计算机,但是它也提供了全局同步机制、消息队列机制,并采取了一些减少消息传递延迟的技术。
随着商品化微处理器、网络设备的发展,以及MPI/PVM 等并行编程标准的发布,机群架构的并行计算机出现。IBM SP2 系列机群系统就是其中的典型代表。在这些系统中,各个节点采用的都是标准的商品化计算机,它们之间通过高速网络连接起来。
今天,越来越多的并行计算机系统采用商品化的微处理器加上商品化的互连网络构造,这种分布存储的并行计算机系统称为机群。国内几乎所有的高性能计算机厂商都生产这种具有极高性能价格比的高性能计算机,并行计算机就进入了一个新的时代,并行计算的应用达到了前所未有的广度和深度。
并行计算机随着微处理芯片的发展,已经进入了一个新时代。目前并行计算机的性能已经突破20PFLOPS,正在向百亿亿次发展。我国并行计算机的研制已经走在世界前列。2003年由联想公司生产的深腾6800 在2003 年11 月世界TOP500 排名中位列第14 名,2004 年曙光公司生产的曙光4000A 在2004 年6 月的世界TOP500 排名中位列第10 名,这是我国公开发布的高性能计算机在世界TOP500 中首次进入前十名,这标志着我国在并行计算机系统的研制和生产中已经赶上了国际先进水平,为提高我国的科学研究水平奠定了物质基础。2013年国际超级计算机大会最新发布的世界超级计算机500强排名中,国防科技大学研制的天河二号超级计算机系统,以峰值计算速度每秒5.49亿亿次、持续计算速度每秒3.39亿亿次双精度浮点运算的优异性能位居榜首。
从TOP500 的前10 名来看,美国仍然是超级计算机的最大拥有者。按照世界TOP500 的统计数据来分析,美国在计算能力上占有近全世界的一半,在TOP500 中的所有计算机中拥有的数量超过50%。