浅析FMT,CMT, SMT区别

  • FMT(fine-grained multithreading)又叫交叉多线程或指令交错多线程

–       每个时钟周期都进行线程的切换,多个线程交替执行,同一个周期只从一个线程发射指令到功能部件

–       理论上,FMT通过有效的调度可以完全隐藏存储延时,即在存储操作完成之前不从同一个线程取指

  • CMT(coarse-grained multithreading)又叫阻塞多线程或块交错多线程

–       连续执行一个线程的指令,直到遇到长延时操作才切换到另一个线程,也是同一个周期只能从一个线程发射指令

–       在线程切换发生之前,一个线程可以全速运行

–       CMT中的线程切换时机非常重要

  • SMT(simultaneous multithreading) 同时多线程(SMT)

–       每个周期把来自多个线程的指令发射到多个功能部件去执行,已经没有线程切换的概念

–       能够同时开发单个应用中的指令级并行和多个应用间的线程级并行

–       Intel的超线程(Hyper-Threading,简称HT)技术就是SMT的一种变体,并被应用在Xeon处理器和Pentium4处理器中

下面对比他们的不同,以下图为例:

 

此图含义:从上到下为时钟周期,4个方块为4个发射槽。

  FMT一个周期只允许一个线程发射指令。分析前2个时钟周期,第一个时钟周期线程4占有,它只发射一条指令,如 a=3;第二个时钟周期,切换到线程2,线程2发射2条可以并行执行的指令,如 a=b+c,d=e+f;之后切换到线程3...如此往复。

  CMT个周期也只允许一个线程发射指令。但是与FMT不同的是只有遇到长延时操作才切换到另一个线程。故一个线程可以较长时间占有发射槽。

FMT和CMT通过线程切换可以隐藏存储延时,因此减少了发射槽的垂直浪费。但由于FMT和CMT在同一个时钟周期里只能从一个线程发射指令,因此指令级并行不足造成的水平浪费仍然存在。

  SMT能够减少发射槽的水平浪费和垂直浪费(1)每个周期可以发射来自不同线程的指令去执行,通过线程级并行来弥补单线程指令级并行的不足,从而减少水平浪费(2)当某个线程因为长延时操作导致无法发射指令时,可以选择发射其他线程的指令,通过隐藏延时来减少垂直浪费,SMT的图分析不予赘述。

猜你喜欢

转载自www.cnblogs.com/caishunzhe/p/12817245.html