多处理机讲解.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Local_sense=! Local_sense; /*local-sense取反*/ lock(counterlock); /*确保增加的原子性*/ count++; /*记算到达进程数*/ unlock(counterlock); /*解锁*/ if(count==total) { /*进程全部到达*/ count=0; /*重置计数器*/ release=local_sense; /*释放进程*/ } else { /*还有进程未到达*/ spin(release=local_sense); /*等待信号*/ } 10.4 同 步 例10.4 假设总线上10个处理器同时执行一个栅栏,设每个总线事务需100个时钟周期,忽略Cache块中锁的读、写实际花费的时间,以及栅栏实现中非同步操作的时间,计算10个处理器全部到达栅栏,被释放及离开栅栏所需的总线事务数。设总线完全公平,整个过程需多长时间? 答:下表给出一个处理器通过栅栏发出的事件序列,设第一个获得总线的进程并未拥有锁。 10.5 同 步 表10.6 第i个处理器通过栅栏产生的事件序列 事件 数量 对应源代码 说明 LL i Lock(counterlock); 所有处理器抢锁 SC i Lock(counterlock); 所有处理器抢锁 LD 1 count=count+1; 一个成功 LL i-1 Lock(counterlock); 不成功的处理器再次抢锁 SD 1 count=count+1; 获得专有访问产生的失效 SD 1 unlock(counterlock); 获得锁产生的失效 LD 2 spin(release=local_sense);读释放:初次和最后写产 生的失效 10.4 同 步 当竞争不激烈且同步操作较少时,我们主要关心的 是一个同步原语操作的延迟。 基本的旋转锁操作可在两个总线周期内完成: 一个读锁,一个写锁。我们可用多种方法改进形成 在一个单周期内完成操作。 同步操作最严重的问题:进程的串行性 当出现竞争时,就会出现串行性问题。它极大地增 加了同步操作的时间。 总线的使用是这个问题关键所在。 在基于目录的Cache一致性机器中,串行性问题也 同样严重。 10.4 同 步 10.4.4 大规模机器的同步 所希望的同步机制:在无竞争的条件下延迟较小 在竞争激烈时串行性小 1. 软件实现 旋转锁 (1) 旋转锁实现的主要问题 当多个进程检测并竞争锁时引起的延迟 (2) 一种解决办法: 当加锁失败时就人为地推延 这些进程的等待时间。 (3) 具有指数延迟的旋转锁代码 10.4 同 步 li R3,1 ;R3=初始延迟值; lockit: ll R2,0(R1) ;load linked bnez R2,lockit ;无效 addi R2,R2,1 ;取到加锁值 sc R2,0(R1) ;store conditional bnez R2,gotit ;存成功转移 sll R3,R3,1 ;将延迟时间增至2倍 pause R3 ;延迟R3中时间值 j lockit gotit: 使用加锁保护的数据 当sc失败时,进程推延R3个时间单位。 10.4 同 步 先讨论采用数组进行的软件实现。为此我们给出一种更好的栅栏实现代码。 前面栅栏机制实现中,所有的进程

文档评论(0)

三沙市的姑娘 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档