01 Introduction

设计师希望能够连接很多小的计算机得到一个性能强大的计算机。这就是多处理器(multiprocessor)的来源。理想情况下,客户买尽可能多的处理器然后得到对应的性能。因此要设计实现在多处理器上跑的软件。第一章提到过,耗能是很重要的一个指标。使用小的高效的处理器替代大的低效的处理器,能够在同等耗能下性能更高。因此,对于多处理器而言,提高效能与扩展性息息相关。

多处理器软件必须能够扩展,因此在硬件损坏时也能正常工作。如果 个处理器坏了 1 个,软件可以用剩余的 继续提供服务。因此多处理器能够提供更好的可用性。

对于独立的任务,高性能意味着高吞吐,这就是任务级并行(task-level parallelism)。这些任务可能是单线程应用,这也是多处理器很重要的场景。这与多处理器上运行一个任务相反。并行处理程序(parallel processing program)表示在多处理器上同时运行的单个程序。

科学计算需要更快的计算器。这些任务验证了多处理器的合理性。现在处理这些问题很简单,可以使用大量独立的服务器组成的集群(cluster)来处理。集群也可以用于其他用途,比如 Web 服务、邮件服务、数据库等。

由于能耗问题,因为可以从增加时钟频率或 CPI 之外提升性能,多处理器备受关注。一般我们称为多核处理器(multicore microprocessor)而不是多处理器(multiprocessor microprocessor),可能是为了避免重名。多核芯片上的处理器称为核(core)。随着硬件技术的提升,核数会变多。这些核是共享内存处理器(Shared Memory Processors, SMP),通常是一个物理地址空间。

这些新技术使得关心性能的程序员必须关注并行编程。

业界的一个重要问题是要方便的编写并行任务,并且在核数增加的情况下,性能和功耗都能有效提升。

这个突然的转变使得很多术语让人感到困惑。下图总结了串行(serial)、并行(parallel)、顺序(sequential)、并发(concurrent)四个术语。

列表示软件可以是顺序的也可以是并发的。行表示硬件可以串行也可以并行。不管是顺序软件还是并发软件,都是可以运行在串行和并行的硬件之上的。

挑战之一是让顺序软件在并行硬件上有更好的性能,让并发软件在并行硬件随着核数变多运行的更快也是一个重要挑战。本章会使用并行处理程序(parallel processing program)或并行软件(parallel software)表示在并行硬件上运行的顺序或者并发的软件。