并行计算机体系结构:硬件/软件结合的设计与分析(原书第2版)
作者 : David E.Culler, Jaswinder Pal Singh, Anoop Gupta
译者 : 李晓明 钱德沛 程旭 崔光佐
丛书名 : 计算机科学丛书
出版日期 : 2003-01-01
ISBN : 7-111-07888-8
定价 : 78.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 776
开本 : 16开
原书名 : Parallel Computer Architecture: A Hardware/Software Approach
原出版社: Morgan Kaufmann Publishers
属性分类: 教材
包含CD :
绝版 : 已绝版
图书简介

本书共有12章。第1章给出了并行体系结构的一个概貌。第2章介绍了并行程序设计。描述了一组具有启发性的多处理器系统应用的例子,在本书的其他部分也将用到它们。第3章给出了好的并行程序设计人员用于从底层体系结构中改进性能的基本技术。第4章讨论了在进行设计权衡时采用工作负载驱动评估方法的难题。第5、6章是关于基于总线的对称共享存储多处理器(SMP)的一个完整介绍。 第7章展现了一类机器的硬件组织和体系结构,它们能够扩展到很大的配置。第8章将前面几章的结果综合起来,展现了如何在可扩展系统上通过自动硬件复制和高速缓存一致性,来实现一个共享的物理地址空间。第9章考察了针对共享地址空间系统的一系列备选方案,它们扩展了硬件/软件权衡的边界以获得更高的性能,降低硬件的成本和复杂性,或两者兼得。第10章讨论可扩展的高性能通信网络的设计。第11章考察了一组交叉问题,它们涉及如何包容多处理器系统中出现的显著的时延而不至于影响总体性能。最后,第12章考察了那些有可能决定这个领域未来的技术、体系结构、软件系统和应用方面的发展趋势。

图书前言

并行计算已经成为20世纪90年代计算技术的一个至关重要的组成部分。在接下来的20年里,它所产生的影响将有可能和微处理器在前20年里产生的影响相当。事实上,这两种技术有着深刻的联系,高度集成的微处理器和存储器芯片的发展使得多处理器系统日益具有更大的吸引力。多处理器系统已经代表着几乎所有计算市场层面的高性能端部分,从最快的超级计算机、最大的数据中心到部门级服务器,到单个的台式机。若干PC、工作站,甚至多处理器系统紧密集成起来,所形成的机群正作为可扩展因特网服务器出现。过去,计算机厂家在它们的产品系列中利用不同的技术和处理器体系结构来满足不断增加的系统性能要求。今天,产品中处处用到的都是相同的微处理器。在一个相当大的范围内,性能提高的基
  本手段是增加处理器的个数。这种性能扩展的经济效益使其极具吸引力。很快地,若干处理器将会集在一个芯片上,多处理器系统将会比今天更加流行。
  尽管并行计算的学术历史在时间上不算短,在内容上也很丰富,但从根本上改变这一学科现状的是和商用技术的紧密结合。对新颖体系结构和特殊技术的强调已经让位于定量的分析,让位于在相同处理节点上实现不同的程序设计模型,让位于仔细的工程性权衡。我们写此书的目的就是让设计人员掌握这一类新型的多处理器系统的设计,从中小规模的并行台式计算机到高度并行的信息服务器和超级计算机,使他们理解根本的体系结构和软件问题,以及在设计中进行权衡的相关技术。同时,我们也希望为软件系统和应用的设计人员展示体系结构的可能发展方向,那些将决定硬件设计特定路线的动力,以及那些发展对面向性能程序设计上的影响。近年来,在并行计算机体系结构领域最令人激动的进展是传统上完全不同的各种做法的融合,把共享存储、消息传递、数据并行和数据驱动等的计算都融合在一种公共的机器结构上。这种融合的原因部分在于共同的技术和经济力量的驱动,部分在于对并行软件的更好理解。它使得我们能开发一种公共的框架,在其中来理解和评估体系结构方面的权衡,而不是将注意力集中在各种奇特的设计和分类法上。再者,流行的并行程序设计模型在许多机器类型上都适用,这使得并行程序设计更加可移植,从而使我们得以发展有意义的标准测试和评估方法。这种领域的成熟使得硬件和软件相互作用的定量和定性的分析研究成为可能。事实上,领域的发展本身也要求我们这样做。针对一组对所有并行体系结构都很关键且涉及现代
系统设计整个范围的基本问题——数据访问、通信性能、协同工作、有用语义的正确实现等。本书给出了旨在解决它们的硬件和软件技术,并考察了各种技术是如何相互作用的。仔细选择的、深入的案例分析提供了一种关于一般性原理的具体说明,展示了不同机制间的具体相互作用。
  写这本书的动机之一是由于缺乏一种足够好的教材,供我们在伯克利、普林斯顿、斯坦福等校教学使用。有些教材以一种泛泛的方式将材料呈现出来,综述各种体系结构和研究成果,但没有深入分析它们,也没有提供一种现代工程的框架。另外一些教材集中在专门的项
  目上,但没有介绍在各种不同设计方案中体现的基本原理。在这个领域的研究报告提供了大量想法和试验数据,但没能够提炼到一种有机构成的境界。在技术和体系结构融合的背景下,通过将注意力集中在最重要的问题上,而不是集中在将我们带到如今的丰富多彩的历史中,我们希望能够提供一种关于这个激动人心且迅速变化领域的更深刻、更清晰的理解。这是一个协作努力的结果,它反映在本书封面上我们的名字次序上。
  本书的读者
  本书的内容对多方面的读者都是很重要的,包括在计算机体系结构、系统软件和应用领域工作的研究人员、学生和工程技术人员。鉴于多处理器系统日益提高的重要性,这些内容和计算机系统结构设计师的相关性是明显的。芯片设计者必须理解什么能成为一个多处理器系统的有效基本模块。支配总线和存储系统设计的往往也是一些和并行性相关的问题。I/O系统的设计必须考虑具有可扩展性的高速网络、机群的构成,以及那些被多个处理器共享的设备。
  系统软件——包括操作系统、编译器、程序设计语言、运行系统、性能调试工具——需要考虑新的情况,也将在并行计算机中获得新的发展机会。这样,理解体系结构的演化以及那些导致这种演化的力量是很重要的。在编译器和程序设计语言的研究与开发方面,针对并行计算的工作已经有相当一段时间。然而,体系结构和商用技术新的融合也许意味着编译和语言问题应该得到重新审视,需要在一个更一般的背景下讨论。硬件、操作系统和用户程序之间的传统边界也正在并行计算的意义下变化,为了更好的性能,程序经常要有对资源更直接的控制。
  应用领域,诸如计算机图形学和多媒体、科学计算、计算机辅助设计、数据库、决策支持和事务处理,都可能出现一种巨大的转变。这种转变将是廉价的并行计算能够提供强大的计算能力的结果。然而,开发健壮的并行应用,在当前和未来多处理器系统上都能表现出好的加速比,是一个挑战性任务,而且它要求对系统相互作用和体系结构发展方向有深刻的理解。本书试图提供这样一种理解,促进应用领域和计算机系统结构之间的交流,从而使我们能设计出更好的体系结构——使程序设计更容易,性能更高和更健壮。
  本书的组织
  本书共有12章。第1章给出了并行体系结构的一个概貌。根据当前在工艺、体系结构和应用方面的趋势,它首先讨论了为什么并行计算机系统越来越重要。它简要介绍了那些影响了这个领域的各种多处理器体系结构(共享存储、消息传递、数据并行、数据流和脉动阵列),展现了工艺和体系结构的发展趋势是如何导致了一种领域的共识,即并行计算机系统应是由一种通信体系结构互连起来的一组通用处理节点。这种融合并不意味着创新的结束,恰恰相反,我们将看到一个迅速进展的时期。设计人员开始有了共同语言,相互交流,而不是路遇而无视之。为了理解多种通信体系结构和实现,第1章建立了一种层次式框架(包括程序设计模型、通信抽象、用户/系统界面和硬件/软件界面)。从这个框架中看这个领域的合流,第1章的最后部分展开了那些必须在各层界面中都要考虑的根本设计要点:命名、定序、复制和通信性能(开销、时延和带宽)。这些要点形成了一种贯穿本书其余部分的基本主线。第1章最后给出了若干历史文献。
  第2章介绍了并行程序设计。描述了一组具有启发性的多处理器系统应用的例子,在本书的其他部分也将用到它们。第2章展现了基于各种主要程序设计模型的并行程序,其中含有系统必须支持的基本成分。我们用案例分析的方法解释了在并行程序设计中进行分解、分配、协作和映射的步骤,且指出了这些步骤中关键的性能目标。  
  第3章给出了好的并行程序设计人员用于从底层体系结构中改进性能的基本技术。它提供了一种对硬件/软件权衡的理解,解释了什么样的性能特点能通过体系结构方法来加以考 虑,什么样的性能特点必须或者由编译器或者由程序设计人员才能解决。和串行计算的一个类比是,体系结构不能将一个0(n2)的算法变成一个0(nlogn)算法,但它能够改善对于那 些公用存储访问模式的平均访问时间。第3章清楚地表明了那些存在于各种程序设计模型的核心算法和程序设计的挑战,也指出了和特定模型相关的若干问题。这一部分的内容表明了体系结构的进步除了提高性能外,还可能减轻并行程序设计的负担。程序设计技术在任何关于设计权衡的量化评估中都是一个关键的因素。在第3章的最后,把这些编程技术应用到典型应用程序中,给出了相应的高性能程序。
  第4章讨论了在进行设计权衡时采用工作负载驱动评估方法的难题。即使对现代单处理器来说,体系结构的评估也是很困难的,通常我们只是针对一组固定的程序,在一定范围内考虑设计变化的影响,例如流水线或存储系统的组织等。在并行体系结构中,我们能够考虑变化的空间自由度要大得多。不同设计侧面之间的相互作用更加深刻,硬件和软件之间的相互作用更加重要,也在更大的范围里有影响。我们通常对机器和程序规模变化时的性能感兴趣,而改变其一往往都要影响另一方面。如果我们的评估方法不合适,就很容易导致片面的甚至是错误的结论。第4章讨论应用和体系结构的有关参数是如何相互作用的,它们应该怎样一起改变,同时还给出了将用于其后各章的基准测试程序。它提供了方法论指南,通过模拟来评估真实的机器和体系结构的思想。附录给出了若干关于并行性能基准测试的参考材料。
  第5、6章是关于基于总线的对称共享存储多处理器(SMP)的一个完整介绍。除台式机外,这类系统几乎是所有现代商用机器的基础。第5章给出了一种关于“侦听”总线协议的高层逻辑设计。这种协议保证了在多个高速缓存之间自动复制数据的一致性。第5章还讨论了一个重要问题,即存储一致性问题。这个问题使我们开始理解对算法设计人员来说共享存储到底意味着什么。这一章讨论了多种设计选项,以及机器该如何针对在用户程序和操作系统中的典型存储访问模式进行优化。除了对SMP的概念性理解外,第5章还反映了并行软件牵涉的问题,包括应用软件和同步支持。
  第6章进一步考察了协议的要点以及基于总线的多处理器系统的物理设计。它深入到用最新总线的多级高速缓存支持现代微处理器中出现的工程设计问题,这些高速缓存是高度流水线的。此外,还讨论了第5章提出的高层协议是如何在这些系统中实现并扩充的。第6章 给出了在这一领域中有关设计要点的一个相当完整的介绍。其内容的重要性不仅由于这些小规模的设计形成了大规模设计的基石,还由于这里的许多概念在本书后面也会出现,只不过’是在一个更大规模的意义上,带有更广泛的一些考虑而已。本章还包含了关于SGI Challenge和Sun Enterprise这两种服务器的独立案例分析。第7—10章讨论的是可扩展多处理器体系结构。在当前,它们代表的是高端计算。随着技术的进步,它们也代表着未来中等水平的计算设施。
  第7章展现了一类机器的硬件组织和体系结构,它们能够扩展到很大的配置。关键的概念是网络事务,其重要性类似于第5、6章介绍小型设计中的总线事务,都是具有根本意义的。然而,在可扩展机器里,全局的仲裁和全局可见的信息不见了,而且可以有大量的网络事务待完成。第7章讨论了程序设计模型是如何通过网络事务的方法实现的,按照网络事务由直接硬件解释的程度,研究了一系列设计要点,包括对nCUBE/2、Thinking Machine CM—5、Intel Paragon、Meiko CS—2、CRAY T3D和CRAY T3E等系统的案例分析。结合Myrinet NOW和
DEC Memory Channel的案例分析,本章在这个框架下还考察了现代机群。此外,对所有这些设计还进行了一个性能比较。
  第8章将前面几章的结果综合起来,展现了如何在可扩展系统上通过自动硬件复制和高速缓存一致性,来实现一个共享的物理地址空间。这种样式的机器在业界日益流行。第8章全面研究了关于基于目录的高速缓存一致性协议和硬件设计备选方案,包括对SGI Origin 2000和Sequent NUMA-Q的案例分析。它考察了在这些机器上工作负载的行为,进一步讨论了程序设计的内含和同步等问题。
  第9章考察了针对共享地址空间系统的一系列备选方案,它们扩展了硬件/软件权衡的边界以获得更高的性能,降低硬件的成本和复杂性,或两者兼得。它讨论了放松存储同一性模型,由硬件在主存中一致复制数据的唯有高速缓存的存储器体系结构,以及基于软件的一致性复制。在写本书的时候,这里的许多内容正在经历一个从学术研究到商用产品的过渡阶段,它们的作用将随着机群技术的出现进一步明确。它揭示了若干在本书其他部分没有涉及但十分重要的设计概念。
  第10章讨论可扩展的高性能通信网络的设计。通信网络是前面各章讨论的所有可扩展机器的基础,推迟到第10章来讲,是因为我们首先需要对驱动这些网络的处理器、存储系统和网络接口的设计有一个完整的了解。第10章建立了一个通用的框架,来理解网络中何处会出现硬件成本、传送延迟和带宽的限制等问题。针对这些性能价格比指标,它考察了各种路由技术、交换机设计和互连拓扑之间的权衡。这些权衡通过最近的一些设计的案例分析得到了具体体现。
  基于有前面10章奠定的基础,第11章考察了一组交叉问题,它们涉及如何包容多处理器系统中出现的显著的时延而不至于影响总体性能。这些技术有两个基本的方面:让有用的工作覆盖时延,让传送的数据流水传送。这些技术的最简单的形式在本质上即批量传送,大量规则的数据序列流水传送,而且通常可以从处理器下载。其他的技术试图隐藏在多个独立的装载和存储操作中发生的时延。写时延利用弱同一性模型的特点来屏蔽,这种模型的基本出发点是认识到程序操作的序关系只是由程序中对共享存储的一个小的访问集合来表达的。读时延由隐式或显式的数据预取来屏蔽,在现代动态调度的处理器中,也可以通过前瞻技术来屏蔽。这其中有些技术还被扩展来隐藏同步时延。第11章对这些不同做法提供了一个透彻的分析,同时还考虑了对编译技术的影响,以及关于有效性的定量评估。
  最后,第12章考察了那些有可能决定这个领域未来的技术、体系结构、软件系统和应用方面的发展趋势。从硬件/软件的观点,阐述了这个领域将如何演化,会遇到什么问题以及潜在的突破。
  本书的使用
  本书的这种组织方式是为了满足多方面读者的需要。它可以作为研究生教材、工程师的专业参考书,以及一般的参考读物,对那些其工作日益和并行计算有关的人们都有帮助。如果深入到各个方面,本书所包含的材料足以用于一年的并行计算内容的学习,从各种机器的设计到并行程序设计的经验。然而,本书也能分成几部分来使用。
  第1章旨在提供一个独立的关于并行计算机系统结构的理解,作为研究生或者大学高年级普通计算机系统结构课程的一部分是很合适的。对那些需要了解并行计算的术语和基本概念,从而理解这种技术将如何影响他们工作的工程管理人员或公司负责人,这一章也是有价值的。它清楚地告诉你当对于并行计算的兴趣和需要增加时该怎样进一步地学习。第1章还可以作为编译器、数据库、操作系统或程序设计课程在并行体系结构方面的基本背景。第1章和第12章一起构成了一个关于并行计算机体系结构领域的“外层框架”。
  面向机器组织和设计的并行体系结构课程,除了第1章的概述外,可由第5、6、7、8、10章构成,它们是本书的核心。然而,和传统课程中的内容相比,这些章节在设计方面要深入得多。这是因为我们所用的材料有些以前没有发表过,而且没有以一种面向设计的框架来组织。这些材料提供了关于设计权衡的详细的定量性讨论。对于高速缓存一致性系统的正确性问题,第5、6章提出了关键的要求,展示了如何在日益复杂的设计中高性能地满足它们。
  第7章分析了可扩展机器,所采用的方式和通常商业做法和发表的研究成果都不一样,并且在这个框架中讨论了新兴的高性能机群。第8章描述主要的商用分布存储计算机中的高速缓存一致性协议,所采用的框架和细节层度也是在其他书中没有见到的。第10章是关于网络设计的一个简要而完整的讨论。这几章中的讨论足够深入,即使是有一定素养的系统设计人员,也能够从中获得一个新的理解和一个清晰的设计框架。贯穿这几章(还有第9章的开始部分)的,我们还有了关于存储同一性模型的一个严谨且实用的讨论,例如讨论同步操作的实现。第11章是关于日益重要的时延包容问题的,它可以作为这些关于机器组织和设计章节的补充。
  这本教材为教学提供了令人兴奋的机会,在核心材料有机结合起来的基础上,从多个方向来加强基本并行体系结构课程都是可能的。首先,第2、3章透彻的处理使我们跨越了硬件/软件的边界。这就使学习体系结构的学生对设计决策可能带来的影响有更深刻的理解,以及了解并行程序设计到底是什么意思。这也使课程的吸引力扩大到包括操作系统、语言和应用在内的学生,他们可以从软件的观点来看体系结构的问题。第二个使得基本课程能得以加强的方向是硬件和软件设计决策的定量化性能分析。基于对第2、3章的理解,第4章、附录和后面几章中的“并行软件牵涉的问题”各小节将这一线索自始至终贯穿于核心机器设计材料。除了提供性能评价的方法论指导外,它们还提供了一个关键的视角,用以看待发表的结果。第三个方向是强调硬件/软件的权衡。这是由定量化分析所形成的一个基础性问题,在各章的同步和程序设计小节中得到了进一步论述。在第9章,这一问题更加明显,其中我们仔细研究了在提供一致的共享地址空间时责任的划分。在第11章所讨论的容许时延问题也是
  关于这一方面的。每一个方向都代表着一群专业人员,他们有日益增加的需要,来更深刻地理解如何对待并行体系结构。
  本书也能作为需要实际操作的并行程序设计课程的主要教材。基于第1章的一般性介绍,第2、3章给出了一个坚实的框架,来理解并行程序的行为。通过第4章的工作负载分析以及第5、7、8、9章的“并行软件牵涉的问题”各小节,这一点进一步得到加强。这一部分的材料应该由用于课程的与并行程序设计环境相关的参考书来补充,例如MPI、并行线程或者HPF。第6-8章的案例分析提供了一个关于机器的彻底的讨论,学生很可能使用。第11章提供了一个方便的框架,来考察在并行程序设计中解决通信任务的最佳途径。
  我们相信并行计算机体系结构在研究和实践方面都是一个令人兴奋的核心领域,它的重要性也会与日俱增。它已经达到这样的成熟程度,编写一本严肃的基于设计和工程原理的教科书是很有意义的。基于多年积累的丰富多样的思想和方法,这个领域正出现一种急剧融合的趋势。现在已经到了超越浏览各种机器的设计,进入理解基本设计原理的时候了。我们亲身经历了这个领域的融合过程;这本书来自我们的经验,希望它传达我们对于这个巨变和成长中的领域所感受到的某些兴奋之情。由于并行体系结构变化是如此迅速,案例分析、性能
分析和工作负载需要定期地更新。除了辅助教学材料外,这本书的Web站点还将提供有关及时更新的材料。我们也希望你能够通过课程和商用开发的高质量产品,对这个站点做出贡献。
  我们也欢迎读者指出任何错误或疏漏,以便在以后印刷时改正它们。为此,请发电子邮件到pcabugs@mkp.com。同时,也请检查www.com/pca.的勘误表,看有关的错误是否已经公布和更正。

图书序言

十分高兴能为这本关于并行计算的新书作序。本书的内容令人兴奋,具有鲜明的时代特征。作者富有见解的思路,以及对各种计算机体系结构所做的系统化和定量化分析,将这本书与先前所有关于并行计算机体系结构的书区别开来。这种在开头4章里奠定的基本思路有三个主要的创新:它建立在近年来并行计算机体系结构的融合之上;它以应用作为驱动来评价和分析体系结构;它植根于一种坚实的性能评价方法论之中。
  如同在第1章里所描述的一样,近年来共享存储和消息传递模式的融合,展现了一种在一个公共的框架下刻画和分析计算机体系结构的新机遇。基于这种融合,作者描述了4种根本的设计要点(对通信的抽象、程序设计模型、通信和复制的关系、性能的追求)。这种做法创建了一个用以讨论各种体系结构和具体实现的框架。在这个框架中,我们可以对不同体系结构的做法进行严格的比较和考察。
  不理解应用和体系结构的相互作用,我们就不能理解多处理器的设计权衡和性能。为此,针对性能的提高,第2、3章介绍了应用程序并行化的过程以及一组并行程序。除了铺垫一个定量性评价体系结构及其实现的基础,这几章勾画了并行程序设计的过程和它带来的挑战,它们对于理解多处理器的性能是关键的。通过展示如何用一种并行的工作负载来评价体系结构,第4章进一步阐明了上述观念。作者还描述了评价并行计算机的复杂性,包括由机器规模和工作负载的扩展所带来的若干问题。这3章一起形成了其余各章论述的基础。
  中小规模共享存储系统是目前的主导并行体系结构。任何对并行计算感兴趣的人,理解这类机器的原理和设计权衡是至关重要的。第5章描述了共享存储多重处理技术的主要概念:高速缓存的一致性、存储同一性和同步。然后作者描述了基于侦听的共享存储多处理器的详细设计,包括第6章两个详尽的案例分析。
  设计多处理器系统,使之能够扩展到更多的节点,依然是多处理器体系结构领域最具有挑战性和争议的一个方面。第7章专门从消息传递到共享存储的设计领域讨论这个问题。第8章将这种讨论延伸,考察了目录方案的使用,它使得缓存一致性能够扩展到大量的处理点。第8章还讨论了基于目录的一致性的基本问题,两个详尽的案例分析形成了本章的心。在本书之前,针对基于目录的高速缓存一致性技术的商品计算机,还没有如此详细的和定量的分析。
  用于多处理器系统的某些最重要的硬件和软件技术基本上是独立于体系结构细节的。因此,作者用3章的篇幅探讨了这些关键技术。第9章描述了存储系统中软件的影响、硬件的需求以及性能权衡,包括同一性问题和高速缓存的扩展使用。第10章考察了互连技术,这是任何多处理器系统都要有的一个关键组成部分。最后,第11章考察了用于时延包容的技术。从多个方面来讲,这是并行计算机的一个“普适”的设计问题。
  作为结束,本书给出了关于未来硬件和软件挑战的一个富有见识的讨论。首先,作者讨论了可能的发展情景,包括硬件和软件两个方面。然后作者在题为“遇到困难”的两段文字中转向潜在的障碍。最后,他们考察了可能的技术突破!我发现最后一章既有启发性,也有思想性。作者们不同的背景和互补的优势使得这一章既有洞察力,又有刺激性。
  总而言之,这是一个关于多处理器系统设计领域的令人兴奋并且反映时代特征的探索性成果。体系结构设计方法融合的趋势同作者提出的框架的结合,使得我们可能建立一种公共的基础来考察多样化的现代并行体系结构。几年前,由于各种体系结构的设计方法相差太远,要写这样一本书是不可能的。类似地,如果没有注意定量的性能评测以及应用和体系结构的相互作用,这本书也就不会这么突出。而我们的作者恰好利用了这种技术的融合,并将注意力集中在应用驱动和针对性能的分析上,对并行计算机体系结构领域进行了一次独特的、富有见识的探索。这种做法,和作者们独特的优势和经验结合在一起,产生了这部论著,同其他任何并行体系结构的书相比,它体现了更深刻的认识。我向作者们表示祝贺,并向所有对并行处理技术的理论和实践,以及这些技术的现在和未来感兴趣的读者推荐此书。
  John L.Hennessy,斯坦福大学排特烈·埃蒙·特曼工程学院院长


作者简介

David E.Culler, Jaswinder Pal Singh, Anoop Gupta:David E.Culler: 于1989年获得麻省理工学院博士学位,目前是加州大学伯克利分校计算机科学教授,电气工程与计算机科学系副主任。他是千年(Millennium)项目的负责人,从事校园网范围的集群系统的研究。他的研究领域包括计算机体系结构、通信、编程语言、操作系统和性能分析。他曾是伯克利工作站网络(NOW)项目的领导者。该项目点燃了当前在全球范围发展的高性能集群系统商业化的革命之火。Culler博士因为在快速通信的主动消息、LogP并行性能模型、Split-C并行语言、TAM线程抽象机和数据流体系结构方面的研究而闻名于世。他曾被美国国家科学基金会授予总统学术研究基金奖和总统青年研究人员奖。
Jaswinder Pal Singh: 普林斯顿大学计算机科学系助理教授。他的研究领域是并行应用和多处理器系统,包括体系结构、软件和性能评价。他领导开发了在并行系统领域广为使用的SPLASH和SPLASH-2并行程序组件。他在斯坦福大学攻读硕士和博士学位期间,参加了DASH和FLASH多处理器项目,是该项目应用开发方面的负责人。DASH项目开发的技术现在广泛地应用于商业产品中。在普林斯顿,他领导着PRISM项目组,该项目组以应用为驱动,致力于研究支持不同通信体系结构的编程模型,并将并行计算应用于各种不同的领域。他曾获得过总统科学家与工程师初期成就奖(PECASE)和Sloan研究基金奖。
Anoop Gupta: 1986年获得卡内基-梅隆大学的博士学位,目前是斯坦福大学电气工程与计算机科学系副教授、微软高级研究员,还是斯坦福大学的Robert Noyce学院院长。他的研究领域包括计算机体系结构、操作系统、编程语言、性能调试工具和并行应用。他和John Hennessy共同领导了斯坦福DASH机的设计和构建,DASH机是世界上最早的可扩展的分布式共享内存的多处理器之一。Gupta博士也参加了之后的FLASH项目。DASH项目开发的技术现在广泛地应用在商业产品中。Gupta教授曾获得美国国家科学基金会授予的总统青年研究人员奖。

译者简介

李晓明 钱德沛 程旭 崔光佐:暂无简介

译者序

翻译这本书的念头,源于1998年11月在美国弗罗里达州奥兰多市参加超级计算(Supercomputing)学术会议。当时,摩根考夫曼(Morgan Kaufmann)出版社的工作人员在现场展销图书。本书是其中之一。粗粗浏览,立刻被书中新颖的内容所吸引,当即买下一本。回过头看看,除了对上述印象有进一步的加深外,还发现它和以前类似题材的教材相比,语言也很有特色:在陈述种种技术要点时,还展开了大量的剖析性分析。我们感到,本书能使读者对技术的脉络有更深刻的把握。于是,在机械工业出版社华章分社的支持下,我们开始了本书的翻译工作。
  这项工作基本上分为三个阶段。第一阶段,由李晓明负责翻译序、前言、第2、3、5、6章和附录,钱德沛翻译第4、9、10章,程旭翻译第1、7、8章,崔光佐翻译第11、12章。在统一了一些名词的译法后,在第二阶段由李晓明修改序、前言、第1、2、3、5、6章和附录,钱德沛修改第4、7、8、9、10章,崔光佐依然修改第11、12章。在最后审定阶段由李晓明负责第4、7、8、9、10、11、12章,钱德沛负责序、前言、第1、2、3、5、6章和附录。清样出来后主要由李晓明和钱德沛负责最后的校对。
  尽管我们几个人近年来一直在从事和计算机体系结构有关的教学和科研工作,但坦率地说,做好这件事对我们依然是很难的。一方面,本书的内容十分广博,有一些是我们以前了解不多的;另一方面,本书的写作风格倾向于口语化,描述性强,因此在翻译过程中既要准确地表达其技术含义,又要尽量兼顾其表述风格,对我们是个很大的挑战。在一些难以兼顾的场合,我们采用了“译者注”的方式来处理,即在行文中基本遵照原文句子的结构,但会对其技术含义作进一步的解释。另外,在翻译过程中我们作了几次词汇译法的讨论和统一,在尽量采用国内有关计算机术语常用译法的同时,也对极少数术语作了我们认为更合适的处理。最典型的情况有两个,一是有关高速缓存访问的“miss”,以前常用的是“失效”,我们这里统一译成“扑空”;另一个是在讨论共享存储系统时常用的“coherence”和“consisten—cy”,目前国内的译法都是“一致性”,但在本书中它们多次同时出现,翻译起来有明显困难,因此我们分别译成“一致性”和“同一性”。还有一个特别的词汇scalability(scale,scalable)。这是目前几乎到处都在用的词,基本含义是当系统规模扩大时其典型应用性能改善程度的度量,具体指在保证性能的条件下,典型应用的规模随计算系统的规模扩大而扩大的程度,隐含有两种因素(系统规模,应用性能)按比例变化的含义。在本书的翻译中,大多数场合采用了常用的“可扩展性”,但在需要强调其按比例变化含义的地方,有时也译成了“可扩放性”。最后,在翻译过程中我们得到了原著作者提供的勘误表,其内容也反映在此译本中。
  历经近三年的时间, 《Parallel Computer Architecture:A Hardware/Software Approach,Second Edition》中译本终于出版了,这其中还有不少人参加了相关的工作。北京大学和西安交大一些同学参加了本书翻译的一些前期工作和后期索引整理的工作,北京大学的黄蕊在文字校对中花了许多时间,为我们纠正了不少欠妥之处,在此我们一并表示感谢。
  尽管如此,这个译本一定还会存在不少缺点、疏漏和整脚之处。我们欢迎读者指出问题,提出建议。为此,我们计划建立并维护一个相关网站http://lxm.cs.pku.edu.cn/Pca/来反映读者的意见和建议,在上面提供相关章节和段落的更新或修改信息,以弥补现时由于我们的水平和时间所限可能造成的疏误。
  译 者
  2002年1月

图书目录

第1章 引论
1.1 为什么要用并行体系结构
1.1.1 计算机应用发展的趋势
1.1.2 微电子技术趋势
1.1.3 体系结构趋势
1.1.4 超级计算机
1.1.5 小结
1.2 并行体系结构的融合
1.2.1 通信体系结构
1.2.2 共享地址空间
1.2.3 消息传递
1.2.4 融合
1. 2.5 数据并行体系结构
1.2.6 其他并行体系结构
1.2.7 一个通用并行体系结构
1.3 基本的设计问题
1.3.1 通信抽象
1.3.2 编程模型的要求
1.3.3 通信和复制
1.3.4 性能
1.3.5 小结
1.4 结论
1.5 历史资料
习题
第2章 并行程序
2.1 并行应用的案例分析
2.1.1 洋流的模拟
2.1.2星系演化的模拟
2.1.3 用光线跟踪法来实现复杂场景的可视化
2.1.4 针对关联性的数据挖掘
1.2 并行化过程
2.2.1 程序并行化过程中的几个步骤
2.2.2 计算并行和数据并行
2.2.3 并行化过程的目标
2.3 一个例子程序的并行化
2.3.1 方程求解器的内核
2.3.2 分解
2.3.3 分配
2.3.4 在数据并行模型下的协调
2.3.5 在共享地址空间模型下的协调
2.3.6 在消息传递模型下的协调
2.4 结论
习题
第3章 面向性能的程序设计
3.1 划分阶段的性能问题
3.1.1 负载平衡和同步等待时间
3.1.2 减少固有的通信
3.1.3 减少额外的工作
3.1.4 小结
3.2 在多存储器系统中的数据访问和通信
3.2.1 看作扩展的存储层次结构的多处理器系统
3.2.2 在扩展的存储层次结构中的附加通信
3.2.3 用工作集的观点看附加的通信和数据的复制
3.3 性能的协调
3.3.1 减少附加通信
3.3.2 将通信结构化以降低代价
3.4 从处理器角度看到的性能因素
3.5 并行应用程序案例的深入分析
3.5.1 Ocean
3.5.2 Bames-Hut
3.5.3 光线跟踪
3.5.4 数据挖掘
3.6 编程模型涉及的问题
3.6.1 命名
3.6.2 复制
3.6.3 通信的开销和粒度
3.6.4 块数据传送
3.6.5 同步
3.6.6 硬件代价和设计复杂性
3.6.7 性能模型
3.6.6 小结
3.7 结论
习题
第4章 工作负载驱动的性能评价
4.1 改变工作负载和机器的规模
4.1.1 多处理器性能的基本测量
4.1.2 为什么要考虑扩放性
4.1.3 扩放的关键问题
4.1.4 扩放模型和加速比的测量
4.1.5 扩放模型对方程求解器内核的影响
4.1.6 扩放工作负载参数
4.2 评价一台实际的机器
4.2.1 使用微基准测试程序分离性能
4.2.2 选择工作负载
4.2.3 评价一台固定规模的机器
4.2.4 改变机器的规模
4.2.5 选择性能指标
4.3 对一个体系结构概念或设计权衡的评估
4.3.1 多处理器的模拟
4.3.2 缩小模拟的问题和机器参女的规模
4.3.3 处理参数空间:评价举例
4.3.4 小结
4.4 说明工作负载的特征
4.4.1 工作负载案例分析
4.4.2 工作负载的特征化
4.5 结论
习题
第5章 共享存储的多处理器
5.1 高速缓存的一致性
5.1.1 高速缓存一致性问题
5.1.2 通过总线侦听的高速缓存一致性
5.2 存储同一性
5. 2. 1 顺序同一性
5.2.2 保证顺序同一性的充分条件
5.3 总线侦听协议的设计空间
5.3.1 一种三态(MSI)回写作废式协议
5.3.2 一种四态(MESI)回写作废式协议
5.3.3 一种四态(Dragon)回写更新式协议
5.4 关于协议设计中若干折中的评估
5.4.1 方法论
5.4.2 在MESI协议下的带宽需求
5.4.3 协议优化的影响
5.4.4 高速缓存中存储块大小的权衡
5.4. 5 基于更新和基于作废协议的对比
5.5 同步
5.5.1 同步事件的组成部分
5.5.2 用户和系统的角色
5.5.3 互斥
5.5.4 点对点事件同步
5.5.5 全局(栅障)事件的同步
5.5.6 同步问题小结
5.6 对软件的影响
5.7 结论
习题
第6章 基于侦听的多处理器的设计
6.1 正确性需求
6.2 基础设计:采用原子总线的单级高速缓存
6.2.1 高速缓存控制器和标记的设计
6.2.2 侦听结果的报告
6.2.3 对回写的处理
6.2.4 基础系统组织
6.2. 5 非原子性的状态转移
6.2.6 串行化
6.2.7 死锁
6.2.8 活锁和挨饿
6.2.9 原子操作的实现
6.3 多级高速缓存层次结构
6.3.1 包含性的维护
6.3.2 在高速缓存层次结构中传播一致性的事务
6.4 事务拆分型总线
6.4.1 事务拆分型总线设计的一个例子
6.4.2 总线设计和请求-响应的匹配
6.4.3 侦听结果和冲突的请求
6.4.4 流控制
6.4.5 一次缓存扑空的路线
6.4.6 串行化和顺序同一性
6.4.7 其他设计选择
6.4.8 带有多级高速缓存的事务拆分型总线
6.4.9 对一个处理器有多个待完成扑空的支持
6.5 实例分析:SGI Challenge 和Sun Enterprise 6000
6.5.1 SGI Powerpath-2系统总线
6.5.2 SGI处理器和内存子系统
6.5.3 SGI I/O子系统
6.5.4 SGI Challenge内存系统性能
6.5.5 Sun Gigaplane系统总线
6.5.6 Sun处理器和内存系统
6.5.7 Sun I/O子系统
6.5.8 Sun Enterprise内存系统性能
6.5.9 应用程序性能
6.6 高速缓存一致性的扩充
6.6.1 共享缓存的设计
6.6.2 虚拟标引缓存的一致性
6.6.3 转换检测缓冲器的一致性
6.6.4 环上基于侦听的高速缓存一致性
6.6.5 在基于总线的系统中的数据和侦听带宽的扩展
6.7 结论
习题
第7章 可扩展多处理器
7.1 可扩展性
7.1.1 带宽的可扩展性
7.1.2 时延的可扩展性
7.1.3 成本的可扩展性
7.1.4 物理可扩展性
7.1.5 通用并行体系结构的可扩展性
7.2 编程模型的实现
7.2.1 基本的网络事务
7.2.2 共享地址空间
7.2.3 消息传递
7.2.4 主动消息
7.2.5 共同的挑战
7.2.6 通信体系结构设计空间
7.3 物理DMA
7.3.1 节点到网络的接口
7.3.2 通信抽象的实现
7.3.3 案例分析:nCUBE/2
7.3.4 典型的局域网接口
7.4 用户级访问
7.4.1 节点到网络的接口
7.4.2 案例分析:Thinking Machines CM-5
7. 4.3 用户级的处理程序
7.5 专用消息处理
7.5.1 案例分析:Intel Paragon
7.5.2 案例分析:Meiko CS-2
7.6 共享的物理地址空间
7.6.1 案例分析:CRAY T3D
7.6.2 案例分析:CRAY T3E
7.6.3 小结
7.7 工作站机群和工作站网络
7.7.1 案例分析:Myrinet SBUS Lanai
7.7.2 案例分析:PCI存储器通道
7.8 并行软件涉及的问题
7.8.1 网络事务的性能
7.8.2 共享地址空间操作
7.8.3 消息传递操作
7.8.4 应用层性能
7.9 同步
7.9.1 加锁算法
7.9.2 栅障算法
7.10 结论
习题
第8章 基于目录的高速缓存一致性
8.1 可扩展的高速缓存一致性
8.2 基于目录方法概述
8.2.1 简单目录方案的操作
8.2.2 可扩展性
8.2.3 组织目录表的其他方法
8.3 目录协议和折中的评价
8.3.1 目录方案的数据共享模式
8.3.2 本地和远程通信流量
8.3.3 高速缓存块尺寸的影响
8.4 目录协议设计上的挑战性问题
8.4.1 性能
8.4.2 正确性
8.5 基于存储器的目录协议:SGI的Origin系统
8.5.1 高速缓存一致性协议
8.5.2 关于正确性问题
8.5.3 目录结构的细节
8.5.4 协议扩展
8.5.5 Origin2000硬件概述
8.5.6 Hub的实现
8.5.7 性能特征
8.6 基于高速缓存的目录协议:Sequent的NUMA-Q
8.6.1 高速缓存一致性协议
8.6.2 关于正确性问题
8.6.3 协议扩展
8. 6.4 NUMA-Q硬件一览
8.6.5 协议和SMP节点的交互
8.6.6 IQ链路的实现
8.6.7 性能特征
8.6.8 对比案例分析:HAL S1多处理器
8.7 性能参数和协议性能
8.8 同步
8.8.1 几种同步算法的性能
8.8.2 实现原子性原语
8.9 对并行软件的影响
8.10 高级论题
8.10.1 减少目录存储的开销
8.10.2 层次式的一致性
8.11 结论
习题
第9章 硬件/软件功能的折中
9.1 放松的存储同一性模型
9.1.1 系统规范说明
9.1.2 程序员接口
9.1.3 翻译机制
9.1.4 真实的多处理器系统中的同一性模型
9.2 克服容量限制
9.2.1 第三层高速缓存
9.2.2 惟有高速续存的存储器体系结构
9.3 降低硬件成本
9.3.1 具有去耦辅助部件的硬件访问控制
9.3.2 通过代码修改实现的访问控制
9.3.3 基于页面的访问控制:共享虚拟存储器
9.3.4 语言和编译器支持的访问控制
9.4 综合:分类和简单的COMA
9.4.1 综合:简单的COMA和Stache
9.5 对并行软件的影响
9.6 高级论题
9.6.1 灵活性和CC-NUMA系统中的地址约束
9.6.2 以软件实现放松的存储同一性
9.7 结论
习题
第10章 互连网络设计
10.1 基本定义
10.2 基本的通信性能
10.2.1 时延
10.2.2 带宽
10.3 组织结构
10.3.1 链路
10.3.2 交换机
10.3.3 网络接口
10.4 互连拓扑结构
10.4.1 全连接网络
10.4.2 线性阵列和环
10.4.3 多维网格和多维花环
10.4.4 树
10.4. 5 蝶网
10.4.6 超立方体
10.5 对网络拓扑设计折中的评价
10.5.1 无负载时延
10.5.2 负载情况下的时延
10. 6 路由
10.6.1 路由机制
10.6.2 确定性路由
10.6.3 免死锁
10.6.4 虚通道
10.6.5 上行-下行路由
10.6.6 折转模型路由
10.6.7 自适应路由
10.7 交换机的设计
10.7.1 端口
10.7.2 内部数据通路
10.7.3 通道缓冲
10.7.4 输出调度
10.7.5 堆叠式维度交换机
10.8 流控
10.8.1 并行计算机网络与局域网、广域网的对照
10.8.2 链路级的流控
10.8.3 端到端的流控
10.9 案例分析
10.9.1 CRAY T3D网络
10.9.2 IBM SP-1、SP-2网络
10.9.3 可扩展一致性接口
10.9.4 SCI的Origin网
10.9.5 Myricom网络
10.10 结论
习题
第11章 时延的包容
11.1 时延包容技术概述
11.1.1 时延包容与通信流水线
11.1.2 采用技术
11.1.3 基本要求、优点与局限性
11.2 显式消息传递中的时延包容
11.2.1 通信结构
11.2.2 块数据传送
11.2.3 预通信
11. 2.4 跨越同一线程中的通信
11.2.5 多线程技术
11.3 共享地址空间中的时延包容
11.4 共享地址空间中的数据成块传送
11.4.1 技术和机制
11.4.2 策略问题和折衷方案
11.4.3 性能收益
11.5 跨越长时延事件
11.5.1 跨越写操作
11.5.2 跨越读操作
11.5.3 小结
11.6 共享地址空间中的预通信
11.6.1 没有共享数据高速缓存的共享地址空间
11.6.2 缓存一致的共享地址空间
11.6.3 性能收益
11.6.4 小结
11.7 共享地址空间中的多线程技术
11.7.1 技术和机制
11.7.2 性能收益
11.7.3 阻塞方式的实现问题
11.7.4 交替方式的实现问题
11.7.5 在多发布处理器中集成多线程
11.8 免锁定的缓存设计
11.9 结论
习题
第12章 将来的发展方向
12.1 技术与体系结构
12.1.1 演变趋势
12.1.2 遇到的阻碍
12.1.3 潜在的突破
12.2 应用程序和系统软件
12.2.1 演变趋势
12.2.2 遇到的困难
12.2.3 潜在的突破
附录 并行基准测试程序集
参考文献
索引

教学资源推荐
作者: [美]希拉格·沙阿(Chirag Shah) 著
作者: (美)Steven J.Leon 著 马萨诸塞大学达特茅斯分校
参考读物推荐
作者: 华诚科技 编著
作者: (美)David Flanagan 著
作者: (美)Norman Matloff 著