分类:
2010-06-04 16:08:33
首先,多线程有许多不同的种类。
粗粒度多线程(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。
因此,如果在每个内核上引入足够的线程,或者如果仅在一个处理器上执行一个线程或者一个高优先等级的线程,处理器既能提供最大限度的单线程吞吐量也能提供多线程吞吐量。如果在一个内核上引入太多的线程,单线程性能肯定会受到影响。这种并发多线程技术可以提供的吞吐量是很大的。但是,由于内存和缓存资源必须共享,性能会受到影响。