Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2175632
  • 博文数量: 436
  • 博客积分: 9833
  • 博客等级: 中将
  • 技术积分: 5558
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-29 10:27
文章存档

2013年(47)

2012年(79)

2011年(192)

2010年(118)

分类: WINDOWS

2012-12-24 00:16:06

这周主要又详细阅读了一遍第二节:
1.关于瓶颈
瓶颈为任意的有线程竞争的代码段。一个瓶颈可能由一个或者多个需要达到同步才可以允许其它线程继续执行的的线程组成。我们叫那些因为瓶颈而等待的线程为等待者,叫那些在执行瓶颈的线程为执行者。一个单独的瓶颈可能会影响一个或者多个等待者。 瓶颈的影响可以非常巨大,因为瓶颈在运行的周期对于那些等待者而言,实际上都被浪费掉了。瓶颈导致线程序列化。因此,如果一个并行程序需要花费大量的时间来执行瓶颈,就可能会丧失部分甚至全部由并行而带来的加速。
2.关于瓶颈的例子
1)阿姆达尔的串行部分
当只有一个线程存在的时候,它处于一个关键的路径并且应该被规划在最快的内核上以减少执行时间。与此同时,其它的所有的内核全部都是闲置的。
2)临界段
临界段是确保互斥的,就是说在给定的时间内一个临界段只有一个线程可以执行,其它任意等待执行临界段的线程都必须等待。 这就是说,总是只有一个执行者但是却可能有很多个等待者。
3)障碍
一个遇到障碍的线程必须等待直到所有其它线程都达到这个障碍。可能会有很多的执行者和等待者。图1(b)就说了三个线程同时执行,不同时到一个障碍的情况,直观的表现出了由障碍引起的瓶颈。
4)流水线阶段
一个流水线并行的程序中,循环被分成运行在不同线程上的不同阶段。执行其它流水线阶段的线程要等待最慢的那个流水线阶段。 可能会同时存在很多执行者和等待者。,图1(c)则说明了当四个线程在含有三个阶段的流水线程序中的执行情况,当执行到不可伸缩的流水线阶段是就会引起别的线程的等待,从而引起程序的瓶颈。
3.瓶颈随时间变化
文中给出了一个例子,X被从链表A删除插入链表B,此时对X的操作是被临界段保护的,防止破坏链表的竞争条件。这两个临界段执行的工作量随着时间而变化,因为A一直在变小,而B一直在增大。图表2显示了32个线程的争夺(等待进入临界段的线程的数量)随时间的变化,第一阶段,临界段A是瓶颈,而在第二阶段,临界段B是瓶颈。 在运行时对该程序进行成功的加速需要动态的识别哪一段代码现在是关键的瓶颈然后用一个快速的内核对它进行加速。
同样的例子,存在实际生活中的工作负载。例如数据库中临界段的竞争就经常发生,在之前提出的方法中,一次只能在一个大的内核上加速一次一个临界段,而当很多临界段需要加速时,由于限制,只有一个临界段会被加速,其余的都会被忽略。
所以本文主要就是设计一个机制去识别在任意给定的时间内,任意类型的瓶颈正在影响性能,都能加速他们。
阅读(724) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~