Composable Lightweight Processors

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shuiliusheng/article/details/83003366

Composable Lightweight Processors

  1. 摘要:

    • CMP中处理器的个数和粒度在设计时已经固定
    • CLPs:允许将简单,低功耗的cores动态的聚合,形成更大(larger)、更强大(powerful)的单线程处理器,同时不改变应用程序的二进制文件
    • TFlex:一个带有32个核的设计,能够配置为32个双发射的处理器,或者单个发射宽度为64的处理器,又或者是两者之间的任意情况
    • EDGE(显式数据图执行)ISA:可以是系统完全组合,而不需要跨越内核的整体结构
    • 结果:单线程应用在性能方面提升42%,平均面积效率提升3.4倍,平均功耗效率提升2倍。多任务工作负载的情况下,优于固定设计的CMP结构
  2. EDGE:一种指令集体系结构,用于提高计算性能(德克萨斯大学)

    • EDGE将许多单独的指令组合成一个更大的group,成为“hyperblock”
    • hyperblock 被设计为能够很容易的并行执行
    • EDGE设计的目标是支持数百个内部单元,并提供比现有设计高数百倍的处理速度
    • EDGE的基本思想是在ISA级别上直接支持和操作这些块。由于基本块以明确定义的方式访问内存,因此处理器可以加载相关块并安排它们的时间,以便一个块的输出直接反馈到将使用其数据的那个块
    • 基于EDGE的CPU将由一个或者多个带有本地寄存器的小的block engine组成。这些单元通过专用的快件通信链路互相链接。编译器会将信息编码到block中,调度器可以检查整个block,以判断输入其是否可用,然后将其发送到engine中执行
  3. CLPs的问题:在传统的ISA中,完全可组合性是困难的,因为原子单元是单独的指令,这要求控制决策过于频繁以便跨分布式处理器进行协调。 相反,显式数据图执行(EDGE)体系结构通过使用基于块的程序执行和显式的内部数据流语义来降低控制决策的频率,并且已经证明可以很好地映射到分布式微体系结构

  4. CoreFusion:另一个工作,将多个small cores,融合成一个large core。

    • 优点:使用了经典的RISC或者是CISC的ISA
    • 问题:因为ISA是经典的类型,所以在融合之后,一些硬件必须支持物理上的共享,因此会限制可扩展性
  5. SMT:使用多个线程共享一个大的,乱序内核,而不是使用分区的方法

    • 问题:OS通过调整映射到一个core上的线程的数量来实现低开销和自适应的粒度,但是这个粒度范围太小。同时因为处理器的issue width有限,共享一个核的线程可能会造成严重的干扰问题
  6. Instruction-Set Support for Composability

    • 小的微体系结构组合为大的体系结构的困难:bypass,instruction fetch and cimmit等
    • 使用分布式微体系结构专用的EDGE ISA,避免分派单个指令的问题
    • EDGE的两个特性:
      • EDGE将程序编码为具有原子执行语义的块序列
      • 块中的每个指令都显式的编码了其需要等待哪些相关指令的结果
  7. Microarchitectural Support for Composability

    • 对于某些体系结构,例如load/store queue、分支预测器等,会由于核数的变化产生容量变化。CLPs的处理方式是尽可能的按地址划分结构,从而完全避免了物理上的集中式微体结构。(如何利用增加的硬件资源)
    • TFlex针对于三个结构(分支预测器,指令window和cache,LSQ和data cache),使用了三个不同的hash函数
      • Block starting address:下一个块的预测器资源(BTB/Local history table)和块标记结构(block tag结构)根据特定块的起始虚拟地址(PC)进行分区
      • Instruction ID within a block :块内包含128条指令,这些指令按顺序编号,根据这些编号,指令会在不同的instruction windows和cache中
      • Data address :LSQ和data cache根据存储类指令中的数据地址进行分区,寄存器是基于寄存器编号的地址进行交错
  8. TFlex中block的执行过程

    • 指令块中的一部分指令会被分配到每个参与的核中执行,但是每个block根据block address进行hash,都会有一个owner core,这个核会负责初始化取指和预测下一个block。一旦预测到了下一个block的地址,owner core会将该地址发送给拥有下一个预测块的core
    • 取指阶段,owner core会访问当前block的I-cache tag,同时将取指请求发送到其他所有参与的cores的I-cache banks中。同时会将预测到的next block地址发送到该block的owner中,开始初始化取指
    • 每个core根据owner core发送的请求,从本地的I-cache中取指,放到指令窗口中
    • 不同的block的取指,执行,提交都是流水化和重叠的。这些指令根据数据流的顺序进行执行,当owner发现块中所有的指令都执行完后,开始执行提交协议
      在这里插入图片描述
  9. Composable Instruction Fetch

    • TFlex中,block中的指令分布在所有参与的cores的I-caches中,但是取指由block的拥有核发起
    • block的cache tags只存在与该block的拥有核中
    • 示例:在32核的情况下,每个核存储着一个128条指令的block中的4条指令
    • 取指的带宽和I-cache的容量会在融合的情况之后增加
  10. Composable Control-flow Prediction

    • TFlex将每个核上的预测器作为一个单独的预测器,每个预测器一个输入,多个输出(作用不同)
    • block预测器组成:一个exit预测器,用于预测哪一条分支将会从block中取出;一个target预测器,用于预测下一个block的目标地址
    • block中的每条分支指令会有3bits的exit位,代表着之前的exit情况,类似于之前的branch指令的taken位
    • exit predictor:锦标赛分支预测器,类似于Alpha 21264。target predictor首先包括exit branch类型的预测(Btype predictor):SEQ(非跳转),BTB(Branch target buffer),CTB(Call target buffer),RAS(Return address stack)。根据类型进行选择不同的方式进行预测。
    • 全局的历史记录(global exit history)会在next-block address发送到owner时,前递到owner
    • RAS的分布式管理:逻辑上只有一个RAS。RAS简单的按照核进行划分,例如核0包括0-15个表项,核1包括16-31的表项。TFlex需要记录当前RAS top的表项在哪一个core上,从而进行压栈和弹栈的操作。
      在这里插入图片描述
  11. Composable Instruction Execution

    • TFlex编译器静态的为每一个block中的指令分配一个介于0-127的标识符,根据表示符,可以利用映射函数在不同的核心上执行
    • block中的每条指令都有至少一个包含9位的目标字段,该字段用于指令与当前指令有相关的指令的位置,前两位用于指示当前指令哪一个操作数需要使用相关指令的结果,剩余7位用于指示128条指令中的任意一条指令

在这里插入图片描述

  1. Composable Memory System

    • 当多核融合时,L1 cache成为所有参与的L1 cache的cache line交错聚合。此时L1 Dcache的容量和端口数都会随着核数的增加而增加
    • 存储器指令访问的cache bank是通过对虚拟地址的高几位和低几位进行异或操作,然后对参与的核数取模确定的
    • 当core执行load操作时,会将load指令的地址和目标路由到正确的cache bank,执行查找,然后将结果转发回包含load的目标指令的core
    • TFlex通过LSQ来动态消除内存访问歧义。LSQ与Dcache使用相同的hash函数进行分区,从而构成分布式LSQ
  2. Composable Instruction Commit

    • block中的指令要求整体commit
    • commit的四个阶段:
      • 当参与的cores通知owner,它已经发出了所有的stores,register writes和一条branch(不可能有多条分支指令都被执行),owner认为block执行完成
      • 当此时的block成为最老的block时(in-order),owner在控制网络中向参与的cores发出提交请求
      • 所有参与的核开始改变体系结构状态,结束之后,用提交确认信号响应
      • owner广播资源释放的信号,意味着最新进入的块的owner core可以发起自己的fetch请求,并覆盖已提交的块
  3. Coherence Management

    • 在多个cores融合的情况下,L2 cache成为share cache,使用目录一致性协议保持一致性

猜你喜欢

转载自blog.csdn.net/shuiliusheng/article/details/83003366