标题: 多处理器系统协调工作机制简介
polaris
中级会员
Rank: 3Rank: 3


UID 2923
精华 4
积分 312
帖子 147
阅读权限 30
注册 2007-3-20
状态 离线
发表于 2007-12-14 22:43  资料  个人空间  短消息  加为好友 
多处理器系统协调工作机制简介

这个东西是我的一份报告,里面乱七八糟,删去了部分没用的章节。不过感觉对入门还是挺有用的,里面不少是现有的资料,省得大家查了,与其烂在地里头不如发上来
------------------------------------------------------------------------------------------------------------------------------------------------------------------


2.     硬件架构

2.1   并行计算的硬件分类

目前实现并行计算的硬件架构基本上分为单板多处理器(紧耦合)和集群计算(松耦合)两类。单板多处理中一般应用共享总线,或共享存储器来提供多个处理器互相访问的能力。而集群计算一般应用于由大量计算机组成的大规模高性能计算领域。

2.2早期的硬件实现

多处理器系统中,必须设计和使用一些控制方法。在一个分布式,多处理器,多任务的环境中,每个处理器访问两种总线1)局部总线(local bus)(2)远程或共享总线(shared)。



局部总线和储存器和IO设备相连,他们用单个微处理器直接访问,不需要任何特殊协议或访问规则。共享总线包含被系统中任意处理器访问的储存器和IO设备。微处理器有一个与局部总线和共享总线都相连的接口。这种配置允许处理器访问局部存储器和IO设备,或通过总线仲裁器和缓存访问共享总线。分配给微处理器的任务可能是数据通信,在从通信接口采集了一批数据之后,微处理器可将它们传送给共享总线和共享处理器,使得连接到该系统的其他微处理也可以访问这些数据。这样就允许许多微处理器共享公共数据。以同样的方式,多个微处理器在系统中也可分配不同的任务,从而彻底提高吞吐量。



2.3   SMP对称多处理器

在早期的共享总线多处理器中,很大一部分性能瓶颈都被消耗在对共享总线的抢占上,实际上对总线的访问还是单个CPU。

SMP 架构:两个或多个同样的处理器通过一块共享内存彼此连接。每个处理器可同等地访问共享内存(具有相同的内存空间访问延迟)。



松耦合多处理

最的 Linux SMP 系统是松耦合多处理器系统。这些系统是利用多个高速互连的单一系统构造的(如 10G 以太网)。此类架构也被称作集群(参见图 3),Linux Beowulf 项目是此类架构的一个流行的解决方案。Linux Beowulf 集群可利用普通硬件和典型的网络互连(如以太网)来构建。


构建松耦合多处理器架构很容易(由于使用了 Beowulf 之类的项目),但是它们也有自身限制。构建大型的多处理器网络可能占用相当大的空间并消耗很多电量。因为它们通常是利用普通硬件来构建的,所以包含的有些硬件不相关却要耗费很多电量和空间。更大的缺点在于通信结构。即使使用高速网络(如 10G 以太网),也存在系统可伸缩性的限制。



紧密耦合多处理

紧密耦合多处理指芯片级多处理(CMP)。可将其看作松耦合架构按比例缩小至芯片级。这正是紧密耦合多处理(也称作多核计算)背后的思想。在一个集成电路中,多个芯片、共享内存以及互连形成了一个紧密集成的多处理核心。


在 CMP 中,多个 CPU 通过共享总线连接到共享内存(2 级缓存)。每个处理器也拥有自身的快速内存(1 级缓存)。CMP 紧密耦合的本质使处理器与内存之间的物理距离很短,因此可提供最小的内存访问延迟和更高的性能。此类架构在多线程应用程序中运行良好,该类应用程序中线程可能被分配给多个处理器以实现并行操作。这种方法被称作线程级并行(TLP)。

2.4   NUMA技术(非统一内存访问)

拥有很多快速CPU建立一个对称式处理器(SMP)是很困难的。需要连接所有CPU,IO设备的基架物理尺寸会限制基架的操作速度,因为CPU数量的增长和CPU的速度也会对所期望的基架速度(以及容量)呈现不断上升的趋势。

有多种技术被用来解决这些问题。例如,从两侧(centerplane,中线面)插入板卡,使用宗冷开关而不是传统的总线(从根本上是总线更并行),以及增加总线的宽度。然而,从长远来看,SMP机器的整体容量会持续增长,因此需要另外一种方法来解决这些。NUMA允许计算机在多个SMP上扩展,从而解决了该问题。



然而NUMA是设计上的一种折衷。在NUMA的设计中,较大的系统会节制的产生较大的内存延迟,从而会影响性能。由于特定线程所经历的内存延迟会根据县城运行在那里以及线程所访问的内存而变化,因此NUMA系统上运行的引用程序的性能是无法确定的。这对于开发人员会是个特别的问题,因为开发人员会假设运行的多个并行线程会在恒定的时间内完成指定的任务,并据此推断他们的应用程序的性能(在障碍同步中也很常见).



NUMA体系结构的优势主要体现在以下几个方面:



    首先,NUMA的突破性技术彻底摆脱了传统的超大总线对多处理结构的束缚。它大大增强单一操作系统可管理的处理器、内存和I/O插槽。



    其次,NUMA设计的重点是让处理器快速地访问在同一单元的内存,NUMA处理器访问同一单元上的内存的速度比一般SMP模式超出一倍。并且,NUMA操作系统充分利用处理器缓存,能达到极高的寻址命中率。SMP模式虽然比NUMA简单,但是,所有的处理器访问内存的时间是一致且缓慢的。同时,基于SMP的总线存着在一个物理极限,令系统的扩充性逐步降低。此外,在基于SMP体系结构的大型系统中,平衡地增加处理器、I/O和内存变得更加困难。



最后,NUMA系统提供内存互联的硬件系统,这种技术可以开发新型动态的分区系统。系统分区的好处在于允许系统管理员在同一计算机内运行多个操作系统(如Unix和Windows NT),并根据用户工作负荷的要求,在不同的操作系统环境间,简单地管理和使用CPU和内存资源,从而实现最佳的性能和最高的资源利用率。

2.5   处理器技术的并行化(流水线和CMT)

为了提高CPU的效率和指令执行的并行性,现代微处理器已经广泛采用流水线设计,对于

一些较高性能的CPU更是采用了多发射的超流水技术等,所以,CPU流水线的设计,将成为决定其性能的关键。将指令执行通道分成了5个单元,通道中流水线的每个单元之间使用级间寄存器来存放相应的控制信号和数据。对应的流水线结构分别为:取指(Ifet ch)、译码(Dec)、执行(Exec)、存储器操作(Mem)和写回寄存器(WB)。如图2所示,指令在流水线上顺序执行,但是同周期有五条指令相交迭。所以采用流水线结构大大提高了指令的并行性。

        由于采用了五级流水线设计,需要一个核心的流水线控制模块对这个流水线上的各个单元进行控制,以确保流水线正确高效地运行。值得注意的是,指令在流水线上的处理并不是简单地如图2所示的一个流畅序列,而是会出现很多因素破坏指令流水的平衡性,这些因素有:

  (1)由于流水线上的2个执行单元同时使用同一硬件资源而产生冒险。

  (2)部分指令在1个周期不能完成相应流水阶段的操作,如乘法指令在Exec级在ALU运算需要多个周期。

  (3)指令运算的结果在Exec级得到,WB级才写回寄存器堆,而后续指令在结果写回前需要使用结果。

  (4)Branch指令、跳转指令和ERET等指令导致流水线上程序流的改变。

  (5)在流水线的执行过程中随时都可能有异常发生。

流水线控制就是解决以上问题,控制流水通道中的指令执行过程,在各种情况下能够保证程序的指令流有序、无误地执行。

CMT技术(芯片及多线程)

芯片多线程(CMT)指的是处理技术一族,它允许物理处理其同时执行多个线程。

[ 本帖最后由 polaris 于 2007-12-16 23:00 编辑 ]

顶部
[广告]
polaris
中级会员
Rank: 3Rank: 3


UID 2923
精华 4
积分 312
帖子 147
阅读权限 30
注册 2007-3-20
状态 离线
发表于 2007-12-14 22:43  资料  个人空间  短消息  加为好友 
3      软件架构

3.1操作系统中的SMP支持

目前的绝大多数操作系统,都是从单 CPU 的硬件开始起家的。因此,内核的同步模型,基本上都是针对中断处理程序、 I/O 导致的阻塞所产生的并发,而非真正的并行处理而设计。一般来说,这种模型包括了“禁止中断”,有时还包括“中断优先级”以便处理不同的优先级和选择性抢占,以及用以处理同步操作,如使内核线程进入休眠状态的 I/O 等的简单的休眠锁。为了提高并行能力,操作系统提供了对SMP(对称多处理器)的支持。



因此,在操作系统中引入 SMP 支持的第一步,往往就是引入“全局锁(Giant lock)”,使内核在同一时刻事实上只在一颗 CPU 上运行。这样做的目的是在 SMP 硬件上运行时,能够依然使用 UP(单处理器)内核的那些基本假设。这使得用户态程序能够运行在多个 CPU 上,但内核则不能以并行方式运行。在内核中引入这种变动相对而言比较容易,因为它不需要改变整个内核的同步模型,而只需简单地加入全局锁、修改硬件探测和引导代码,处理中断传递、TLB shootdown等等。但是,由于内核无法从并行处理中获益,因此对于高度依赖内核的操作而言,启用 SMP 除了增加开销之外,意义不大。



因此,引入 SMP 支持的下一个步骤,便是修改内核的同步模型,使得它的一些部分能够在多个 CPU 上同时运行,并由此带来性能提升。
在操作系统中,我们应该继续对上锁粒度和内核并行性方面进行改进,以更好地在更多 CPU 池中分摊负载。多核、多处理器芯片正在迅速普及,因此多处理器系统的性能非常值得深入挖掘。

顶部
[广告]
wuqingping
版主
Rank: 7Rank: 7Rank: 7



UID 5095
精华 7
积分 3127
帖子 1743
阅读权限 100
注册 2007-3-23
状态 离线
发表于 2007-12-15 22:46  资料  个人空间  短消息  加为好友 
这个不错,一定要顶

原来学习《分布式操作系统》的时候对这些内容比较熟悉





不管我们相隔多远,我们看到的都是同一个月亮!
学C,用C,掌握C,精通C
顶部
[广告]
polaris
中级会员
Rank: 3Rank: 3


UID 2923
精华 4
积分 312
帖子 147
阅读权限 30
注册 2007-3-20
状态 离线
发表于 2007-12-16 23:00  资料  个人空间  短消息  加为好友 
多谢捧场

顶部
galf
管理员
Rank: 9Rank: 9Rank: 9
依然长发飘飘


UID 10739
精华 1
积分 11592
帖子 2544
阅读权限 200
注册 2007-4-16
状态 离线
发表于 2007-12-17 09:30  资料  个人空间  短消息  加为好友  添加 galf 为MSN好友 通过MSN和 galf 交谈 QQ





I love fucking code than girls!
顶部
 



当前时区 GMT+8, 现在时间是 2010-9-3 17:10

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.035811 second(s), 8 queries

清除 Cookies - 联系我们 - Unix体验中心 - Archiver