Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2339699
  • 博文数量: 2110
  • 博客积分: 18861
  • 博客等级: 上将
  • 技术积分: 24420
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-05 18:23
文章分类

全部博文(2110)

文章存档

2011年(139)

2010年(1971)

我的朋友

分类:

2010-06-04 16:08:33

 无论是最早的Sun UltraSPARC还是现在的英特尔Nehalem或者IBM Power7,多线程技术已经成为一种未来趋势,其实业界对于多线程的研发由来已久,在不同的时期也有不同的研究成果。随着时间的推移,人们对于多线程这个名词越来越熟悉,不过,多线程技术到底发端于何时,它有多少种类?又为什么Sun的处理器可以把线程做得很多,但是性能却很低?熟悉这些情况的人恐怕就不多了。现在,就让我们来认识认识这项技术吧。

  首先,多线程有许多不同的种类。

  粗粒度多线程(Coarse-grained multithreading)

  当主线程出问题时时,一个二级缓存失败,然后第二个线程启动并且运行,也就是说这种线程技术是要接入另一个线程。

  我第一次看到这个技术是在2000年,在RS64 IV POWER处理器中。通过把这个处理器静态地分为两个逻辑处理器实现了这个目的。它的好处是可以提高吞吐量,但是,会影响单线程的性能。

  细粒度多线程(Fine grained multithreading)

  据我所知,细粒度多线程的最佳实践者是Sun的Niagara芯片,它使用一种非常简单的和非常有效率技术,完全适合于为多线程类型设计的设备。Niagara芯片用一种循环算法简单地向每个内核发送2 x 4个线程,在每个执行单元有4个内核。这意味着你在每个内核有8个线程,同粗粒度多线程一样,这种技术单线程的能力也很低。

  虽然这种技术可以有非常有效地提升吞吐量和执行效率,但是,对于单线程性能却低得可怜。也就是说,在实际应用中,如果你仅运行一个线程,你得到的性能并不是整个内核的八分之一。不过,由于Niagara芯片是为运行多线程(一般是相同的二进制代码的副本)做了很多优化。如果是运行一台网络服务器的话,这种多线程方式对于Niagara芯片是非常好的。

  并发多线程(Simultaneous Multi Threading)

  处理器并发多线程(SMT)意味着同时执行多个线程。而且随后同时转换所有的线程。这种多线程是有优先次序的,内核将最大限度执行一个高优先等级的线程,其它的线程将被推后。而且,管理程序将把没有使用的逻辑处理器组合在一起,这样,如果有一台配置8个物理内核的机器,在这个基础上系统就会认为有16个虚拟内核,4个并发多线程,也就会拥有64个逻辑内核,并在64个逻辑内核的基础之上运行8个线程。然后,管理程序会把56个其它的线程“集合”在一起。在这些线程上不会有管理开销。

  如果使用一些监视工具,例如nmon,就能够观察到所有“集合”的处理器工作负载是0。

  因此,如果在每个内核上引入足够的线程,或者如果仅在一个处理器上执行一个线程或者一个高优先等级的线程,处理器既能提供最大限度的单线程吞吐量也能提供多线程吞吐量。如果在一个内核上引入太多的线程,单线程性能肯定会受到影响。这种并发多线程技术可以提供的吞吐量是很大的。但是,由于内存和缓存资源必须共享,性能会受到影响。

阅读(505) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~