《计算机组成与体系结构(原书第4版)》 —1.10 并行处理器和并行计算
1.10 并行处理器和并行计算
今天,并行处理解决了许多大问题,所用的方法与美国西部移民并排使用多头牛解决大问题的方法差不多。如果他们使用一头牛移动一棵树,这头牛不够大或不够强壮,他们绝对不会尝试养一头更大的牛,而是使用两头牛。如果我们的计算机不够快或不够强,那么为什么不简单地使用多个计算机替代开发一台更快、更强的计算机呢?这正是并行计算所要做的。第一个并行处理系统建造于20世纪60年代后期,仅有两个处理器。20世纪70年代已经有32个处理器的超级计算机的介绍,20世纪80年代产生了第一个有1000多个处理器的系统。1999年,IBM宣布为开发一个名为蓝色基因系列的超级计算机架构提供资金。蓝色基因/L是这个系列中的第一台计算机,是一个大规模并行计算机,包含131000个双核处理器,每个处理器有自己专用的存储器。除了允许研究人员研究蛋白质折叠的行为(通过使用大量的模拟)外,这台计算机还允许研究人员在并行架构和并行架构软件方面探索新的想法。IBM持续不断地为这个系列开发计算机。2007年发布了蓝色基因/P,它有四核处理器。蓝色基因/Q是这个系列中最新设计的计算机,使用16核处理器,每个机架有1024个计算节点,可扩展到512个机架。Nostromo(在波兰用于生物医学数据)、Sequoia(在劳伦斯利弗莫尔国家实验室用于核模拟和科学研究)和Mira(用在阿贡国家实验室)等处安装了蓝色基因/Q计算机。
双核和四核处理器(以及更多核的处理器,就像我们在蓝色基因/Q中看到的)是多核处理器。但是,什么是多核处理器呢?从本质上讲,它是一种特殊类型的并行处理器。并行处理器通常划分为“共享存储器”处理器(其中处理器共享相同的全局存储器)或“分布式存储器”计算机(其中每个处理器都有自己私有的存储器)。第9章将详细介绍并行处理器。以下讨论仅限于个人计算机中使用的共享内存多核架构。
多核架构是允许多个处理单元(通常称为核)位于一个芯片上的并行处理器。双核(dual core)意味着有2个核,四核(quad core)意味着有4个核,等等。但是,什么是核?在集成电路中“插入”多个独立的核(就像典型的冯·诺依曼机)并且并行运行,而不是一个处理单元。每个处理单元都有自己的ALU和寄存器组,但所有处理器共享内存和一些其他资源。“双核”不同于“双处理器”。双处理器机器有两个处理器,但是每个处理器插在各自的主板上。要注意的重要区别是,在多核机器中所有的核都集成到同一个芯片中。这意味着你可以用一个双核处理器(条件是你的计算机有适合新芯片的插槽)芯片替换计算机中的单核(单处理器)芯片。今天许多计算机宣称为双核、四核或更多的核。双核通常被认为是当今计算机的标准。大多数台式机和笔记本电脑的核是有限的(少于8),当然,也可以用合适的价格买到有几百个核的机器。
尽管你的计算机可以有多个核,但这并不意味着它会更快地运行你的程序。编写的应用程序(包括操作系统)必须利用多个处理单元(这一般适用于并行处理)。多核计算机对于多任务处理非常有用,即当用户一次做多件事情时。例如,你可能同时在阅读电子邮件、听音乐、浏览网页和刻录DVD。在操作系统能够同时处理许多任务的条件下,这些“多任务”可以被分配到不同的处理器上并且并行执行。
除了多任务处理,多线程也能增加任何有内在并行性的应用程序的性能。程序被划分成线程,可以把线程想象成微小的进程。例如,一个网页浏览器是多线程的,一个线程可以下载文本,而每个图像都由不同的线程控制和下载。如果一个应用程序是多线程的,那么不同的线程可以在不同的处理单元上并行运行。我们应该注意,即使在单处理器上,多线程也能改善性能,但是这个话题最好留到以后讨论。更多的信息见参考文献Stallings(2012)。
概括地说,并行处理涉及多种不同的架构,从多个独立的计算机一起工作,到多个处理器共享存储器,再到多个核集成到同一个芯片上。由于并行处理器不是顺序处理指令,所以在技术上没有归类为冯·诺依曼机。然而,许多人认为并行处理计算机包含CPU,使用程序计数器,并且程序和数据都存储在主存中,这使得它们更像是对冯·诺依曼架构的扩展,而不是背离它,所以这些人把并行处理计算机看作一组冯·诺依曼机通力合作。在这种观点中,也许说并行处理显示了“非冯·诺依曼特性”更恰当。无论并行处理器如何分类,并行计算都可以让我们用多任务的方式解决更大、更复杂的问题,并在各种软件工具和程序设计中驱动着新的研究。
然而,并行计算也有其局限性。随着处理器数量的增加,把任务分布到处理器上的管理开销也会随之增加。一些并行处理系统需要额外的处理器来管理其余的处理器和分配的资源。无论我们在系统中放置多少个处理器,或者分配给它们多少资源,一定都会因为某种原因在某个地方形成瓶颈。然而,我们能做的最好的事情是确保系统中最慢的部分是使用最少的部分。这是后面要介绍的阿姆达尔定律(Amdahl’s Law)所描述的观点。这个定律描述为:如果性能的增强与一个改进的特征有关,那么性能增强的量受到这个改进特征使用量的限制。基本的前提是每个算法都有串行部分,而串行部分会限制用多处理器执行算法获得的加速。
如果并行机和其他非冯·诺依曼架构给处理速度和性能带来了如此巨大的增长,为什么不是每个人随时都使用它们呢?答案在于它们的可编程性。在操作系统中能够利用多个核的技术进步,已经使这些芯片用到了我们今天可以买到的台式机和笔记本电脑中。然而,真正的多处理器编程比单处理器和多核处理器的编程更加复杂,要求人们以不同的方式思考问题,要采用新的算法和编程工具。
这些编程工具之一是一组新的程序设计语言。我们的程序设计语言大多是为冯·诺依曼架构创建的冯·诺依曼语言。许多通用语言已经用特殊的库扩展为适用于并行程序设计,而且专门为并行编程环境设计了许多新的语言。适用于其余类型的(非并行)非冯·诺依曼平台的程序设计语言非常少,而且真正了解如何在这些环境中有效地编写程序的人很少。非冯·诺依曼语言的例子包括为数据流机使用的Lucid语言、为量子计算机使用的量子计算语言(QCL),以及用于FPGA编程的VHDL或Verilog语言。我们在下一节中会看到,即使在并行机编程中存在固有的困难,这个领域也正在取得重大进展。
- 点赞
- 收藏
- 关注作者
评论(0)