多处理机系统介绍(翻译)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

多处理机系统介绍

随着用户计算需求的增长,多处理系统能够提供一个自然地、不断提高的升级途径。只要核心的用户程序能够提供线程级并行,给系统添加处理器,或者将较小的系统替换为较大的、包含更多处理器的系统,都能给用户提供一个直接增加计算能力的途径。其次,多处理机系统使系统供应商能够将单个微处理器的设计代价分摊到多种设计方案中,这些设计方案能够提供不同层次的性能和扩展能力。最后,使用一致共享存储器的多处理机系统能够提供与分时共享的但处理机兼容的编程模式,便于用户使用以前已经存在的应用程序,也便于开发新的应用程序。在这些系统中,硬件和操作系统软件综合起来提供给用户和程序员的功能界面,实际上是基于以下4点多处理机理想假设:

完全共享存储器即系统中所有处理机对所有物理存储器的访问都是平等的。

单位延迟即所有的访存请求都能在一个周期内满足。

无竞争即一个处理机的访存不会受到另一个处理机访存的影响。

写的瞬间船舶即某个处理机写存储器导致的更新立刻对所有的处理机可见。

系统及处理机的设计者必须努力使系统尽量接近这些理想假设,从而满足用户对于性能和正确性的要求。显然,在实现这些目标时,诸如造价以及可扩展性等因素起着重要作用,但是一个优秀的系统必须很好的满足这些假设。

完全共享存储器,单位延迟以及无竞争

诸如图9.4所示,大多数提供一致存储器访问(UMA,Uniform Memory Access)的传统共享存储器多处理机系统使用一种“dancehall”的组织结构,一组存储器模块或者存储体通过交叉开关互联网络与另一组处理机连接起来,并且每个处理机通过交叉开关访问存储器的延迟是相通的。这种方法的弊端在于交叉开关的价格,该价格会随着处理机和存储器的总数按平方增长,同时每次访存都必须穿过交叉开关,另一种方法是非一致存储访问(NUMA,Nonuniform Memory Access),许多系统供应商现在都按照这种方法构造系统,在这种方法中,处理机仍然通过一个交叉开关互联网络连接在一起,但是每个处理机有一个本地的存储器,它的访问延迟要低得多,在NUMA结构中,只有对远程存储器的访问才存在穿越交叉开关的延迟开销。

在UMA和NUMA系统中,与单处理机系统一样,都是通过cache来近似满足单位延迟的理想假设,cache能够同时满足对本地和远程存储器(NUMA)的访问,类似的,可以使用cache 对访存流量进行过滤减轻存储体之间的竞争。因此,对于在单处理机系统中不可缺少的cache,

在多处理机系统中同样非常有用,然而,cache的存在个处理存储器写操作带来了一定的困难,因为存储器写操作必须对其他处理机可见,或者传播给其他处理器机。

写操作的瞬时传播

在一个分时共享的单处理机系统中,如果一个线程改写了存储器某个单元的值,该线程以及任何其他线程都会立刻查看新的值,因为这个值会存放在处理机的cache中。遗憾的是,对于多处理机系统,不再具备这个立即可见的特性,因为对同一地址的访问可能有其他处理机发出,由于这些处理机有了自己的cache,可能包含同一cache行的私有副本,它们可能看不到其他处理机的更新。例如,在图9.5(a)中,处理机P1向存储器地址A写入值1。由于并没有一致性的支持,在P2的cache中,存储器地址A的副本并没有被更新,P2读取A将会得到以前的值0。这就是经典的cache一致性问题。要解决这一问题,系统必须提供cache 一致性协议,保证系统中所有的处理机能够察看到其他处理机的更新,这样每个处理机拥有一致的存储器视图。实现cache一致性有两种基本的方法:更新协议和作废协议,我们将在后面的章节中简要的讨论这两个协议。图9.5(b)和图9.5(c)分别对这两种协议进行了说明

一致的共享存储器

对于共享存储器的多处理机系统,一致的存储器视图很难实现。但如果不能实现一致的视图,共享存储器程序的行为将不可预测,因为不同的处理机从存储器读到的值各不相同。我们已经论述过,一致性问题是由于写操作不能立刻自动地传播给其他处理机的cache造成的。有两类一致性协议可以保证写操作的结果对于其他处理机是可见的。

更新协议

早期提出的多处理机系统采用一个相当直接的办法来维护cache一致性,在这些系统中,处理机的cache采用写直达策略,所有的写操作不仅写入执行写操作的处理机cache,同时也写入存储器。这种协议如图9.5(b)所示,由于所有的处理机都连接在一条共享的总线上,这条总线还将所有的处理机与存储器相连,所以所有其他处理机可以在共享总线上监听新的值,并更新它们的数据副本(如果有这样的副本)。这样就能够得到写直达的结果。实际上,这种更新协议是基于广播写直达策略的,即每个处理机的每次写操作都是写直达,不仅写入存储器,还写入任何拥有这个数据副本的处理机cache。显然,这种协议扩展性较差,仅限于数量较少的处理机,否则大量处理机的写直达流量会很快将存储器总线的可用带宽占用完。

可以对该协议进行简单的优化,对数据采取写回策略,即写操作只是将数据写入处理机的本地cache,当这一行被替换出cache时,才将结果写回存储器。然而,在这样的协议中,任何对共享cache行(存在于任何其他处理机cache中的行)的写操作仍然需要在总线上广播,以使包含共享副本的处理机能更新它们的副本。而且,一个远程读操作所读的行如果恰好是修改过的,那么在满足读请求之前,要将这一行先写回存储器。

遗憾的是,更新协议对于带宽的苛刻要求使得这种协议几乎消失,因此没有一个现代多处理机系统采用更新协议来维护cache一致性。

作废协议

现代共享存储器多处理机系统都采用作废协议来维护cache一致性,作废协议的基本前提很简单:任何时候只允许一个处理机执行写操作(这样的协议经常称为single-writer协议)在该协议中,试图对cache中某一行写数据的处理机必须使该行成为系统中唯一有效的副本,而其他处理机cache中的副本都要作废掉(所以称为作废协议)。该协议如图9.5(c)所示。简单地说,处理机执行写之前,首先要检查系统中是否还存在其他副本。如果有,处理机发

相关文档
最新文档