软硬件结合解决对称多处理机的同步问题

出处:awey 发布于:2010-08-20 15:26:43

     [摘要]对称多处理机SMP结构在现今的并行服务器中普遍采用,多核芯片如何管理共享、竞争资源就是一大问题。文章提出的软硬件结合可以解决对称多处理机的同步问题。

  一、引言

  多核化趋势正在改变并行计算的面貌,与传统的单核CPU相比,多核CPU带来了更强的并行处理能力、更高的计算密度和更低的时钟频率,并大大减少了散热和功耗。但是多核技术的应用也带来了诸多问题,在大多数情况下,多核CPU的内核拥有独立的L1缓存,共享L2缓存、内存子系统、中断子系统和外设。因此,系统需要让每个内核独立访问某种资源并确保资源不会被其他内核上的应用程序争抢。本文提出的软硬件结合可以解决对称多处理机的同步问题。

  二、同步问题

  SMP机器主要支持三种同步操作:互斥、点到点事件和全局事件。而一个同步事件主要由三个组成部分:(1)获得方法:如何获得同步的权利(如进入临界区、离开事件);(2)等待算法:如何等待同步变得可用(如忙等待、阻塞等待);(3)释放方法:如何使得另外的进程能够获得同步。在以上三个部分中,等待算法的选择是独立于同步的类型。等待算法主要有忙等待(busy_waiting)和阻塞(blocking)两种。忙等待和阻塞等待方法之间的权衡是很明显的:由于阻塞方法需要操作系统介入来将进程挂起和重新执行,因此与忙等待方法相比,有更大的开销;但是,阻塞方法在等待时不占用处理器,因此处理器可用执行其他进程。忙等待虽然没有进程挂起的开销,但是在等待时占用处理器和高速缓存带宽。在等待时间很短的时候,忙等待方法更好;但是,当等待时间很长,并且有别的进程在等待执行的情况下,阻塞方法更好。因此,有一种方法是用硬件来实现获得和释放方法,然后用软件来将同步事件的三个部分结合起来。

  三、软件/硬件实现

  用户和系统,谁应该负责实现像锁、路障那样的高层同步操作?一般说来,编程人员只希望使用锁、事件等高层同步操作,而不关心其内部是如何实现的。因此,应该由系统负责实现高层同步操作。系统必须确定硬件在多大程度上提供支持,并且用软件实现哪些功能。硬件支持的好处是速度快,而把一些功能用软件实现的好处是具有弹性,并且能适应不同的情况。现在,已经开发了一些利用简单的原子交换原语的软件同步算法,速度与完全用硬件实现差不多,但是弹性好得多,并且硬件要求非常简单。不同的同步算法可能要求不同的基本原语支持,并且支持这些原语的复杂性变化很大。这就使得硬件和软件之间的交互变得很重要:一方面要根据可获得原语来选择同步计算;另一方面,体系设计者要根据算法的需要来设计原语。

  四、软件/硬件在三种同步操作的权衡

  (一)互斥操作

  互斥操作有许多实现算法,一种通用方法是在处理器的指令集中支持某种原子执行的读-修改-写指令。典型的是原子交换(exchange)指令,它是种简单的锁算法,功能正确,但是性能有问题。我们介绍两种先进的锁算法:票锁(Ticket lock)和基于数组的锁(array-base lock)。

  票锁(Ticket lock):每个想获得锁的进程都持有一个票号,并且忙等待一个全局的NOW-serving号,只有当NOW-serving号与它持有的票号相同时,才能得到锁。当一个进程释放时,只要简单地将NOW-serving号增1.所需要的原子指令是Fetch&Increment,一个进程用这条指令从一个共享计数器来获得自己的票号。只要持有的票号等于NOW-serving号的进程才能获得锁。这个锁在没有竞争的情况下开销和要求的存储量很小且是固定的。

  基于数组的锁(array-base lock):它的思想是用Fetch&Increment指令不是去获得进行忙等待的一个值,而是获得进行忙等待的一个位置。如果可能有P个进程竞争锁,则锁的数据结构中包含P个位置数组,进程在这些位置上进行忙等待。为了避免假共享现象,是每个位置在一个独立的内存块上。获得方法是用一个Fetch&Increment操作去获得数组中下一个可得到的位置;等待方法是在获得的位置上进行忙等待;释放方法是将一个表示“锁空闲”的值写入到数组中的下一个位置中。在锁释放时候,只有在下一个数组位置上进行忙等待的处理器,它的高速缓存中的内存块才会被置为无效,于是在接下来发生读缺失后,它就知道自己获得了锁。

  全硬件实现:当多个处理器同时请求获得锁时,就采用优先权电路来仲裁谁获得锁。由于这种方法能同时使用的锁数目有限,缺乏灵活性;通常,操作系统为了某种特殊的目的才使用这种硬件锁,实际上系统主要使用这些锁寄存器在内存中实现软件锁。

  (二)点到点事件同步

  软件算法:标志作为控制变量,一般是用来通知某个同步事件的发生。如果两个进程对于一个共享变量a是生产者-消费者关系,用如下代码所示使用标志来实现同步:

  硬件方法:内存中每个字都有一个满-空位与之对应。字级的生产者-消费者同步可以如下方式实现:当生产者想写某一位置时,检查满-空是否设置为“空”,如果是“空”则写,并置对应的满-空为“满”。当读该位置时,检查满-空是否设置为“满”, 如果是“满”则读,并置对应的满-空为“空”。还有一类重要事件是由I/O设备引起的中断,多数现代的SMP机器采用简单的仲裁策略。此外,SMP机器通常还存在一个内存映射的中断控制区域,因此在层,任何处理器只要向相应的地址写入中断信息,就能中断另外其他的任何处理器。

  (三)全局事件同步

  全局事件同步又叫路障同步。软件实现路障,通常采用锁、共享计数器和标志。以往老的集中式路障产生的问题:无法在当前配置下保证:在所有进程退出一个路障前,避免其中一个进程又进入下一个路障境况。比较的算法是具有感觉反转(sense reversal)的集中式路障。它解决了这个问题,它让进程在路障的连续境况中,等待标志变为不同的值。进程可能在个境况中等待标志变为1,而在接下来的境况中,等待标志变为0。每个进程有一个私有变量,用来跟踪当前路障境况等待标志变为的值。下面就是具有感觉反转(sense reversal)的集中式路障的代码:

  硬件路障:从概念上说,它利用一根单独的线与(Wired-AND)就足够了。当一个处理器到达路障时,将它的输入置为高电平,然后等待输出为高电平时继续执行。由于这种方法将路障引起的通信和竞争与主存系统分开,所以能提供很高的性能。利用单独的线与硬件同步,缺乏灵活性,现在的并行计算机系统已经基本上不使用这种方法了。

  五、结语

  SMP机器支持三种同步,本文从这三个同步入手,阐述了用软硬件结合的来解决这三种同步问题,对待不同的问题采用不同的解决方案,也介绍了的软件算法、硬件方法。



  

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!