Core Fusion: Accommodating Software Diversity in Chip Multiprocessors

  1. Core Fusion:一种可重新配置的单芯片多处理器(CMP)体系结构,在这种体系结构中,一组基本独立的Cores可以动态的转换为更大的CPU,或者根据应用程序在运行时的需求,将它们作为不同的处理单元。Core Fusion可以动态的适应软件的多样性和增加的并行性,并且它的执行模型单一,不需要programing的额外支持,同时维护了ISA兼容性,并利用成熟的微架构技术

  2. Core Fusion带来的好处:

    • Support for software diversity。CPU可以配置为细粒度并行(多个small core),粗粒度并行(更少但是更强大的core),顺序代码(一个融合组)等
    • Support for smoother software evolution. Core Fusion能够自然的支持增加的并行性,当程序表现出这种特性时
    • Single-design solution。仅需要一种类型的核就可以解决问题
    • Optimized for parallel code。Core Fusion包括相对较小的和基本独立的cores。这为并行运行中的线程提供了良好的隔离,同时Core Fusion支持允许核在需要时协同工作。
    • Design-bug and hard-fault resilience。当Core Fusion的硬件出现问题时,不需要将四个cores都禁用,因为每个core仍然可以独立操作。
  3. Core Fusion应该解决的问题:

    • Core Fusion不应该显著增加软件的复杂性。具体来说,Cores应该能够协同执行程序,而不需要更改执行模型,也不需要求助于定制的ISAs或专门的编译器支持。
    • Core Fusion应该围绕Cores的基本独立性工作,即要充分利用每个核心的现有结构,而不过度的提供或者显著重组基本的core
    • 动态重新配置应该是有效的,即每个core的硬件结构都能够以基本相同的方式工作
  4. 论文提出的一些新的结构

    • A reconfigurable, distributed front-end and instruction cache organization
    • A complexity-effective remote wake-up mechanism
    • A reconfigurable, distributed load/store queue and data cache organization
    • A reconfigurable, distributed ROB organization
    • A quantitative assessment of the incremental parallelization process on CMPs.
  5. 具有Core Fusion能力的八核(two-issue out-of-order cores )CMP概念平面。图中显示的配置示例包含两个独立的核、一个两核融合组和一个四核融合组。这个数字并不代表实际的平面图。
    Core Fusion- Accommodating Software Diversity in Chip Multiprocessors .md

  6. Core Fusion Architecture:集体取指(融合模式下)中的取指机制和指令cache

    • 每个核在每个周期在自己的I-cache中取指两条指令,一共八条指令。取指是对齐操作,Core Zero通过负责最老的两条指令。如果发生分支跳转或者转移预测错误恢复,目标地址将不再和Core Zero对齐,此时,更低级的Core会停止取指,在下一个周期,重新进行Core-Zero-Aligned的取指

    • 如果I-cache发生miss:

      • 在独立工作的模式下,返回的8字大小的block会传送到请求的core
      • 在融合模式下,允许集体取指,因此会将block分散到所有的四个cores
      • 因此I-cache的结构将可以发生变化,在独立模式下,四个子块和一个tag将会组成要给cache block,在融合模式下,缓存块跨越四个I-cache,每个I-cache包含一个子块和一个tag的副本
        Core Fusion- Accommodating Software Diversity in Chip Multiprocessors .md
    • 在集体取指的情况下,复制I-TLB将会很有意义。当然如果一个TLB miss将会更新所有的TLB

  7. Core Fusion Architecture:集体取指(融合模式下)中的分支和函数调用

    • 分支预测:在融合模式下,集体取指由于是对齐的,所以每条分支指令都会访问同一个分支预测器和BTB。因此BTB的容量和分支预测器的效率将会是之前的四倍。论文提出了一种配置无关的索引BTB的方式。这种设计中,tag中的两位将会作为core number
      Core Fusion- Accommodating Software Diversity in Chip Multiprocessors .md

    • Global History:为了获得完整统一的GHR信息,GHR将会被复制到所有的cores,并通过FMU进行协调更新

    • Return Address Stack:子例程在调用时,目标地址由FMU发送到所有Cores,Core Zero将返回地址压入RAS。当遇到返回指令并且正在和FMU通信时,Core Zero将RAS中的地址弹出,然后通过FMU将地址返回。所有的操作都是由Core Zero完成,因此尽管在融合模式下,RAS可用大小未增加

  8. Core Fusion Architecture:集体取指(融合模式下)中如何处理Fetch Stalls

    当一个Core形成了Fetch Stall,则所有的Cores都需要停顿,以便保持正确的fetch对齐。此时就需要形成stall的core和FMU通信,然后通知所有其它的Cores

  9. Core Fusion Architecture:集体译码和重命名(collective Decode/Rename)

    • 取指之后,每个核独立的预译码自己的指令,然后所有的指令都需要被重命名和转向steered(将消费者转向到生产者一起,减少通信延迟)。
    • renaming/steering通过SMU来完成,SMU组成:全局的steering table,四个寄存器分配的free-lists,四个重命名表,steering/renaming logic
    • 利用steering table和四个重命名映射表可以允许每个体系结构寄存器有四个有效的映射,允许操作数在多个核之间复制。
    • SMU使用传入的体系结构寄存器标识符和steering table在每个流水线周期完成八条指令的引导(转向)。每条指令都会分配到一个核,但是保证每个核最多不会超过两条指令。
    • 在下一个周期,指令将被重命名。如果由于带宽的限制,无法将复制指令发送到core中,重命名就会停止在有问题的指令,在下一个周期开始于同一条指令。
      Core Fusion- Accommodating Software Diversity in Chip Multiprocessors .md
  10. Collective Execution :集体执行

    • Operand Crossbar(操作交叉):为了支持操作数之间的通信(不同核之间的协同),每个Core都需要添加一个Copy-Out和Copy-In队列。复制指令将在Copy-Out队列中等待操作数可用,一旦发出,将源操作数和目标寄存器标识符转移到远程Core。Operand CrossBar支持每个Core,每个周期进行两个复制指令。除了复制指令之外,Load还是用Operand CrossBar将数值传递给远程的目标寄存器
    • Wake-up and Selection:当复制指令到达等待的Core,指令将会放到Copy-In队列中。在每个周期,调度器都会考虑队列头部的两条复制指令和常规发射队列中的指令。一旦指令发射,复制指令将会唤醒等待其结果的相关指令,然后更新物理寄存器
    • Reorder Buffer and Commit Support :在融合模式下,为了按序提交,要求四个ROBs协同工作,以锁步的方式提交,每周期最多提交八条指令。ROB表项在fetch阶段结尾分配,如果fetch取到的指令少于8条,则在适当的Core中分配NOPs,以保证对齐。
  11. Load/Store Queue Organization :Load/Store队列的组织形式

    • 处理方式类似于集群体系结构(clusters)中的处理方式,但是保留了L1 cache的私有性,同时只需要对CMP缓存子系统进行最小的修改即可
    • 在融合模式下,使用按地址存储(banked-by-address)的LSQ实现。从而允许在动态配置之后保持数据的一致性,同时不需要刷新缓存,并且支持存储转发和推测式load。使用时,将地址中块内偏移旁的两位作为bank的标识,选择四个核中的一个,然后从剩下的地址中分配足够覆盖L1-cache的索引位。其它的地址位用于作为tag使用。
    • 因为load/store需要在重命名阶段就分配到不同的核的bank上,因此提出了bank-predictor解决。bank-predictor使用指令PC的低位索引。
    • 如何在融合模式下执行同步原语:必须让所有的load/store队列能够看到FENCES。因此需要将这些操作分派到所有的队列,只有正确的队列中的副本会执行实际的同步操作。当每一个局部的FENCES执行完成,并且所有的存储操作在FENCEs指令之前提交,此时认为FENCE指令完成了。局部FENCE完成的消息通过operand crossbar来传递。
  12. CoreFusion的动态配置

    • 使用一个简单的应用程序接口进行运行时的配置。应用程序通过一对FUSE和SPLIT的ISA指令请求融合和分割操作。
    • If, at the time of a FUSE request, fusion is not possible (e.g., in cases where another application is running on the other cores), the request is simply ignored.
    • FUSE操作:在并行的代码运行完成之后,应用程序可能会请求融合Cores来执行顺序操作(可以考虑顺序代码的多少和融合的开销之间的抉择)。如果此时不允许融合,则FUSE指令变为NOP,并继续执行。否则所有跟在FUSE指令之后的都会被刷新,I-cache flushed,FMU和SMU,i-caches都要重新配置;提交FUSE指令的core的重命名映射表被转移到SMU中。D-cache不需要有改变。最后FMU向I-cache发出信号,让I-cache从FUSE指令所在的程序中正确的指令顺序以融合模式开始取指
    • SPLIT操作:当程序认为之后的代码有并行的可用性,则使用SPLIT指令分割融合的core。当SPLIT提交之后,等待所有流水线中的执行结束,然后生成足够的复制指令将体系结构状态收集到Core Zero的物理寄存器文件中。当传输完成后,FMU和SMU重新配置,Core Zero开始从按照程序分割的指令中获取数据。其它Cores之后也可以被分配给其它应用程序。
  13. Smart memories是一种可重新配置的体系结构,能够合并有序的RISC内核以形成VLIW机器。这两种配置不兼容ISA, VLIW配置需要专门的编译器支持。(Smart Memories: a modular reconfigurable architecture )

相关文章: