AIX 5.3 的并发多线程SMT 与 intel的超线程有什么区别?

传统的CPU在某一时间只能处理一个指令序列,通常我们把它称为一个线程。在线程处理的过程中CPU的处理单元需要不断调入指令与数据进行处理。随着CPU技术的发展,CPU的主频与性能不断提高,需要调入指令和数据的速度不断提高。但不幸的是内存技术的发展并没有跟上CPU发展的速度,内存通常无法提供足够的指令和数据给CPU进行处理。

为了解决这个问题,业界通常采用多级缓存的方式。CPU处理单元中的寄存器是最快的,通常一个CPU中有一、两百个寄存器,它可以在一个时钟周期内提供指令和数据。其次是一级缓存,他的大小通常为几十KB,它需要几个时钟周期的访问时间。再下面是二级缓存,他的大小通常为几MB,它需要十几个时钟周期的访问时间。然后是内存,从内存中取得数据需要几十个个时钟周期。而最慢的是硬盘,通常需要几千甚至几万个时钟周期的访问时间。

当CPU需要处理下一条指令时,他通常按照寄存器、一级缓存、二级缓存、内存、硬盘这一顺序去查找。但如果在内存中仍然找不到需要的指令或数据时。系统会进行Context Switch,终止此线程在CPU上的运行,使其处于等待状态,而让其他的线程运行,当此线程需要的数据被调入内存后,此线程处于就绪状态,可以被调度到CPU上运行。线程间的Context Switch需要几十个时钟周期。

由此可见当CPU需要从内存中取数据时,处理单元需要空转几十个时钟周期,有关统计显示当前CPU处理单元的平均利用率不足25%。为了提高CPU处理单元的利用率,设计者采用了线程级的并行技术,即在CPU的核心中执行一个以上的指令序列。对于操作系统来说,一个物理的处理器相当于两个逻辑的处理器,当前有三种不同的方式,实现多线程技术。

粗粒度的多线程,在任一时刻只有一个线程执行,当线程遇到一个长延迟事件时,如二级缓存不命中,则系统调度另一个线程执行,而不是让系统资源空转等待此线程。这一机制可以提高整个系统的利用率。这两个线程共享许多系统资源,如CPU的寄存器和缓存等,因此这两个线程的切换比Context Switch要快得多,只需要几个时钟周期。IBM在使用PowerPC RS64 IV处理器的pSeries 680和pSeries 660-6M1上使用过这种粗粒度的多线程技术。

另一种与粗粒度的多线程技术相对的是细粒度多线程技术,采用这种多线程的系统循环的执行两个线程的指令,这就需要在处理器的设计上增加许多冗余的部件。如果一个线程遇到个长延迟事件时,对应这一线程执行的时钟周期仍然没有被利用。

第三种多线程技术是同步多线程技术(SMT),与其他的多线程技术一样,同步多线程能够从多个线程中取出指令来运行,它能够同时执行不同线程的指令。通过同步多线程技术,系统能够动态调整系统环境,如有可能同时执行不同线程的指令。当一个线程遇到长延迟事件时,允许另一个线程使用所用的处理单元。



Power5 处理器的设计采用两路的同步多线程设计,虽然更多路的同步多线程也是可能的,但模拟现实,其所增加的系统的复杂性是不经济的。另外一个需要注意的问题是,同步多线程技术可能会由于缓存争用而降低整个系统的性能。

你可能感兴趣的:(电脑组成,linux内核,多线程,aix,ibm)