zoukankan      html  css  js  c++  java
  • 浅析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的图分析不予赘述。

  • 相关阅读:
    scheme中的fold-left和fold-right
    test
    2018.4.24-ml笔记(多元线性回归)
    2018.4.23-ml笔记(线性回归、梯度下降)
    springboot shiro开启注释
    Spring杂记BeanFactory之getBean方法
    docker搭建nginx+springboot集群
    springboot属性注入转化为对象
    mac下nginx搭建
    mybatis随笔五之Executor
  • 原文地址:https://www.cnblogs.com/caishunzhe/p/12817245.html
Copyright © 2011-2022 走看看