屏障

最后一个同步机制是准备用于进程组而不是用于双进程的生产者-消费者类情形的。在有些应用中划分了若干阶段,并且规定,除非所有的进程都就绪准备着手下一个阶段,否则任何进程都不能进入下一个阶段。可以通过在每个阶段的结尾安置屏障(barrier)来实现这种行为。当一个进程到达屏障时,它就被屏障阻拦,直到所有进程都到达该屏障为止。屏障的操作如图2-37所示。

在图2-37a中可以看到有四个进程接近屏障,这意味着它们正在运算,但是还没有到达每个阶段的结尾。过了一会儿,第一个进程完成了所有需要在第一阶段进行的计算。它接着执行barrier原语,这通常是调用一个库过程。于是该进程被挂起。一会儿,第二个和第三个进程也完成了第一阶段的计算,也接着执行barrier原语。这种情形如图2-37b所示。结果,当最后一个进程C到达屏障时,所有的进程就一起被释放,如图2-37c所示。

作为一个需要屏障的例子,考虑在物理或工程中的一个典型弛豫问题。这是一个带有初值的矩阵。这些值可能代表一块金属板上各个点的温度值。基本想法可以是准备计算如下的问题:要花费多长时间,在一个角上的火焰才能传播到整个板上。

计算从当前值开始,先对矩阵进行一个变换,从而得到第二个矩阵,例如,运用热力学定律考察在芓之后的整个温度分布。然后,进程不断重复,随着金属板的加热,给出样本点温度随时间变化的函数。该算法从而随时间变化生成出一系列矩阵。

 

现在,我们设想这个矩阵非常之大(比如100万行乘以100万列),所以需要并行处理(可能在一台多处理器上)以便加速运算。各个进程工作在这个矩阵的不同部分,并且从老的矩阵按照物理定律计算新的矩阵元素。但是,除非第n次迭代已经完成,也就是说,除非所有的进程都完成了当前的工作,否则没有进程可以开始第n + 1次迭代。实现这一目标的方法是通过编程使每一个进程在完成当前迭代部分后执行一个barrier操作。只有当全部进程完成工作之后,新的矩阵(下一次迭代的输入)才会完成,此时所有的进程会被释放而开始新的迭代过程。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值