并行计算的未来

时间:2022-08-15 03:48:11

并行计算的未来

随着双核心处理器逐渐成为个人电脑的主流配置以及第一代四核心桌面系统的出现,我们正迅速朝着多核心的时代迈进。但同时,学术界已经开始担心,在遇到架构和软件问题之前,目前的处理器发展趋势到底还能走多远。

加州大学伯克利分校电气工程和计算机科学系的一队研究人员花了将近两年的时间来研究多核心以及将来的“很多核心”处理器可能的影响。在最近的一篇报告中, 他们指出了我们将面临的问题和机遇。

这一报告来得正是时候,今年2月,英特尔展示了一款其所开发的80核处理器芯片,该芯片是英特尔万亿次计算研究计划的一部分,每秒可以进行1万亿次浮点运算。尽管该芯片可能永远都不会投入量产,但是,它可以用来检测多核心计算的基本理念,从而有助于探索大规模并行计算的软件开发中的相关问题。

处理核心的增长

这可能跟一般的PC用户没有什么关系。将一个双核或者甚至是四核处理器装到PC的主板上,即使不做任何软件改动,也能产生额外的吞吐能力,这是因为操作系统负责为各个核心安排具体的任务,哪个核心有处理能力可用,它就会自动开始新的线程。对于普通用户,更多的处理核心仅仅意味着更好的性能。不过,随着处理核心增加到8个乃至16个,在常规的程序设计模型下所看到的多核心的好处就开始减少。无论你在什么时候同时运行Windows和几个应用程序,总有上百个线程处于活动状态,但其中的大多数并未做什么工作,因此,并行运行多个线程实际上并不能显著提升性能。例如,要想充分发挥8核或16核处理器的优势,就需要对一个游戏引擎进行相当大的重写,同时还需要一个独立的图形协处理芯片。

让未来的多核心处理器充分发挥性能并不像我们过去想的那样简单。

伯克利分校的研究报告从这样一个前提开始多核心芯片的开发不是由技术研究,而是由传统单核心处理器在设计的实用效率和经济上的限制推动的。 随着芯片几何尺寸的缩小,以及它们的复杂性和时钟频率的提升,功耗逐渐成为一个大问题,此外,还出现了其他一些难以解决的问题(比如由宇宙射线造成的软错误,以及由布线造成的信号延迟影响),这些都使得芯片的开发和调试缓慢而又困难。这也是为什么在很长一段时间里,处理器的性能都是每18月提高一倍,而在过去的五年中,处理器的性能收益呈现递减态势的原因。由于单核处理器的开发受阻,如果以目前的开发速度,单核处理器的性能每5年才能提升一倍。

与其前辈一样的芯片

多核心设计绕过了很多问题。使用更为简单,完全相同的处理核心使得处理器设计更容易也能可靠地进行构建。同时,也使得在不需要过多功率消耗的情况下,让性能改善成为可能。此外,多核心使得细微动态电压调整成为可能,这样就可以节省电能消耗。通过考察现有的研究,伯克利的研究小组得出结论,6到9阶段按序执行指令流水线可以使一般应用程序在性能和电力消耗上达到最佳平衡点,这就意味着可以使用30纳米制造工艺在单个芯片上集成~千个核心。这也许并不遥远,现在英特尔已经使用45nm工艺制造处理器,此外,思科公司已经使用1 30nm制造工艺制造出了一个188核心的专用通信芯片。在250MHz时,其功耗仅为35W,但却可以提供每秒500亿条指令的吞吐量。

混合和搭配

那么,一块拥有1000个相同的处理核心的芯片真能实现对硅的最有效利用,产生最大的吞吐量吗?事实是,到目前为止,我们只制成了双核或四核处理器,很快就将制造出8核的。将来,我们也许可以从大型计算机先驱吉恩・阿姆达尔在40多年前制定的理论中获得一些启示。他指出,所有软件都包含一些无法从并行处理中受益的串行处理,因此,添加一个大的处理器来加速顺序码处理,将产生较之10个小的并行处理核心更高的吞吐量。比如说,我们假设在一个100核处理器上,一个程序有10%并没有获得额外的速度提升。

用一个专门给那10%代码加速的单核心替换其中的10个核心,我们就可以得到一个效率要高得多的91核心处理器。

不过,现在这种异构型处理器还只是个研究计划,还未成为现实。因为,相同的处理核心在设计和构建上要容易得多,而且还能为软件提供一个标准的平台。 在异构型环境中,对多个执行线程进行优化太过困难以至于无法实现有效管理。 即便如此,阿姆达尔定律仍然对在微软和苹果公司的操作系统开发人员有一些启示,特别是在处理核心增加到8个以上以后。

关于多核心处理的其他一些关键问题包括,各个核心间的互连以及保证它们的数据提供的内存架构。

英特尔的万亿次研究芯片使用高带宽将它的80个核心连接起来,每秒可以将万亿比特数据从一个地方传输到另一个地方,然而,旧M的大规模并行蓝色基因/L巨型计算机将用于点对点通信的高带宽环形网络与适用于所有核心的集中通信树形网络结合在一起。此外,伯克利的研究团队还指出,还需要进一步研究以找出最优的通信架构,他们认为,可能会需要一个可重构的网络体系,以动态地适应当前运行的应用程序的通信要求。

多核心计算机的缓存

说到存储,芯片上嵌入的高速缓存对于多核心设计至关重要。英特尔的酷睿2双核(Core 2 Duo)处理器使用一个共享的高速缓存,可以根据需要动态分配给两个核心,而AMD的双核处理器则是为每一个核心配备了专用的高速缓存。伯克利的研究报告指出,未来可能需要将这两种不同的设计适当地结合在一起。

因为,某些应用程序可能需要为某个核心配备专用的高速缓存,而在多个核心间同时共享的可动态改变大小的高速缓存可能更适用于其他某些应用程序。然而,在任何情况下,都需要制定改进的缓存一致性协议,确保内存存取独立,同时,使处理核心的运算保持同步。

一个可能的解决方案就将是所谓的事务型内存,在这种安排下,多核心更新共享内存,但只在特定的事务完成后且不与其他处理器发生冲突的情况下,才执行该更改。如果事务失败或者发生冲突,那么,更改就被复原,同时共享内存被恢复到该事务执行前的状态。这一架构使得编程变得简单,但却是以执行时间和复杂的硬件实现为代价的。与此同时,在另一个领域的研究也正在继续。

在多核心处理器外部的RAM架构也取得了一些进展。随着处理器吞吐量的提升,芯片外RAM存取的性能损失也随之恶化到了几百个时钟周期。然而,你看看512M RAM(随机存取存储器)芯片的内部,那里有数百个存储体,每个都有几千比特宽。

使用新的封装技术,比如3D堆栈式封装,我们就可以提高RAM到处理器的传输带宽,甚至还可能将相当数量的RAM直接安装到处理芯片上,而不是像现在这样,将它们放到由相当缓慢的低速存储总线连接的不同的芯片封装中去。这一点对于多核心处理器的未来发展意义重大,因为,未来可能会需要几千个核心的处理器,这远远超出了当前的存储芯片的性能。

多核心处理器的编程

毫无疑问,任何硬件平台的性能都超不过运行在它上面的软件,因此,伯克利研究报告中有很大篇幅是关于现在还在发展阶段的多核心设计的软件开发。正如此前一样,其中还涉及到“不透明性”、从硬件中提取软件架构,这样,编程人员就不再需要知道处理器的复杂细节和“可见性”,这就使得所有硬件元件都可以对开发人员可见,从而,更容易开发出最优的软件。有趣的是,研究人员还指出,我们必须充分注意为并行多核心系统建立程序模型时的人的心理因素;减少错误;使开发方式符合人的思维,而不是适合硬件或一个系统平台的功能性模块。

如果不需要考虑计算任务到处理器的显式映射,编程人员就能将工作做的更好。因此,该报告建议,编程模型应当独立于目标系统中的物理处理器的具体数量,尤其是在处理核心不断翻倍的情况下。如果他们可以通过定点和浮点选择使用多种数据类型,比如单比特布尔型和大于128位的整型,那么他们就能更高效地工作。

对于操作系统,该报告建议,不必为大规模并行运算重写整个操作系统,而应该更多地发挥虚拟机和弹性图书馆的作用,这样可以确保只载入那些需要的应用程序。英特尔似乎已经意识到这一点,在其万亿次计划研究报告中就大量提到虚拟计算机。

伯克利的研究报告不针对初学者,其资料引用情况也表明,他们的研究重点是科学计算问题和数据捣弄而不是主流的商业应用和游戏。而且,人们也都承认,没有人会希望在桌子上放一台万亿次多核心系统。万亿次并不单单指的是浮点运算:它同时也指数据,也就是连接到互联网的计算机可能存取的万亿字节。多核心并行运算非常适合用于有效地处理大量数据、快速分类和数据挖掘,通过对处理器进行调整,从而得到更有效的结果。

在这个海量数据的时代,当然需要大型的处理器。面对多核心处理器的蓬勃发展,希望软件开发商能跟上硬件厂商的步伐。

上一篇:Puma移动平台再战迅驰 下一篇:格式导致的星球大战