天天看点

A Survey of Techniques for Architecting and Managing Asymmetric Multicore Processors(第五章)

A Survey of Techniques for Architecting and Managing Asymmetric Multicore Processors(第五章)

  1. 探索AMPs的架构
    • 利用程序的TLP选择AMP。针对于不同的应用,每一种类型的core会展现出不同的性能排序,因此设计一个单调的AMP一般无法达到最优。此时为了更高效的AMP,需要非单调的AMP
    • 针对于MLP和ILP的AMP设计。利用硬件层面的调度策略,充分适应不同的应用特征。通过检测L2 cache的缺失率来判断当前的MLP,当MLP较高时,将应用迁移到为MLP定制的cores上;当ILP较高时,迁移到可以提供最大IPS的cores上。
    • 根据某些硬件资源的不同设置,提供多种类型的core。这些core会包括一个基本的core,其它所有的core会比这个基准core在某些硬件资源更多,从而当应用程序发现性能受限于某一个硬件资源时,可以迁移到另一个拥有更多该资源的core上执行。例如四个核的AMP,其中一个基准核,其它三个认为是加速器,一个是指令窗口更大,一个是发射宽度更大,一个是频率更高。
  2. 使用性能/能耗估计模型(AMP中的线程调度)
    • Sondag提出的一种改进AMP性能的技术。静态分析代码中基本块的相似性和边界,同时选择具有代表性的代码,评估它们在不同核心类型上的性能。在运行时,根据这些信息,将不同的代码映射到不同的core上,从而减少运行时调度决策的开销,并且提高性能
    • Khan提出一种线程调度的技术,用于AMP的改善性能和能效。在执行过程中,利用基于基本块信息和指令类型信息的经验模型,动态检查应用特征。除了这个经验模型,还包括执行过程中的一些动态信息,例如提交指令的速率IPC,推测指令的IPC,时钟计数器和功耗等信息,通过一个在线的线性回归模型,估计该应用在其它类型的core上执行的功耗和性能。调度器根据这些信息,进行线程调度,以达到期望的优化目标,例如性能,功耗,能效。
    • Cong提出了一个估计功耗开销的回归模型。这个模型需要的参数包括执行周期,提交指令数和访问L1 D cache和L2 cache的次数。同时利用静态分析,找到函数调用和循环的边界,构造调用图。在执行过程中,利用回归模型估计系统的能耗和EDP,选择一个core用于执行这些函数或者循环,从而得到最小的EDP
    • Pricopi提出了一种结合静态程序分析,分析建模和统计的方法来建模单个核的性能,并且能够估计同ISA,不同架构的core的性能和功率。主要针对的是ARM的大小核架构。同时该模型在真实的ARM评估了模型的准确性。论文利用的一个特性:程序的CPI可以分成两个部分:CPI(steady)、CPI(miss)。前者属于程序的内在特征,几乎与输入无关。后者则跟输入有很大关系。前者可以在编译的时候估计得到;后者可以根据miss事件和相应的处理延迟来计算得到
  3. 使用CPI Stack
    • CPI堆栈:包括一个基本的CPI和一些其它的组件对CPI的影响,例如cache miss对CPI的影响等。通过包含足够多的信息,从而能够根据一个核的CPI堆栈预测另一个核的CPI堆栈
      A Survey of Techniques for Architecting and Managing Asymmetric Multicore Processors(第五章)
    • Koufaty提出的偏差调度(bias schedule)
      • A thread has big core bias if its big/small core speedup is large

        A thread has small core bias if its big/small core speedup is small

      • 直接影响core的性能的原因分为两类:第一类(内部原因)是由核的微架构引起的性能差异,例如OOO/INO,分配资源大小,分支预测器等;第二类(外部原因)是核外资源的影响,例如共享的LLC,内存访问和I/O操作。
      • CPI的影响因素:内部stalls(TLB缺失,错误预测等),外部stalls(长延迟操作),执行时间(架构和硬件资源利用率,大核比小核更好)
        A Survey of Techniques for Architecting and Managing Asymmetric Multicore Processors(第五章)
      • 根据支持CPI的原因进行线程调度:内部停顿或者是外部停顿支配CPI堆栈时,线程偏向于小核;执行时间支配CPI时,线程偏向于大核
    • Van Craeynest提出了性能影响的评估模型(performance impact estimation PIE)
      • 大核和小核的MLP和ILP的比值可以很好的说明核间的性能差异
      • 当应用在某一个core上执行时,收集ILP和MLP信息,以及CPI堆栈。利用收集的信息,估计另一个类型的core上的应用程序的性能
      • 简化的思想,根据程序运行时,core利用ILP和MLP对整体性能的影响程度来决定调度方案
  4. 在线程调度时,使用DVFS,从而更好的使用性能和能量之间的权衡
    • Annamalai提出的利用AMP和DVFS的技术。当应用程序在核心上运行时,他们的技术估计当前应用程序阶段在所有可用类型的core上不同电压/频率级别上的期望吞吐量/瓦特。通过检查这些值,可以选择最佳的线程到核心的映射和核心操作条件
    • Lukefahr指出当在粗粒度调度时(10M 指令),DVFS和AMP结合更有利;当细粒度调度时(1K),单独使用AMP可以节省大量的能源,DVFS则不必要参与
  5. 静态调度
    • Shelepov使用每个线程的体系结构签名进行线程调度
      • 体系结构签名:体系结构属性的概要,可能包括内存边界,可用的ILP,对时钟频率的敏感程度等其它信息
      • 利用体系结构签名预测线程在每种类型的core上的执行性能,然后给出最有的映射。
      • 结果非常接近静态最佳分配
    • Chen提出了一种数学的方法,用于静态调度。将core的配置情况和应用程序的资源需求映射到同一个多维空间,通过计算两者之间的欧氏距离,找到最近的匹配。论文发现欧式距离的长短和EDP有强相关性,因此可以使用这种方式,提供一种高效执行的方案
  6. 虚拟机在AMP上的调度。改进性能和保证公平性
    • Takouna提供的一种调度方案
      • the VMs with CPU-intensive applications are assigned to fast cores
      • the VMs with I/O-intensive applications are assigned to slow cores, which saves energy without losing performance
  7. AMP上的OS和应用线程之间的调度
    • Mogul提出大核无法很好的加速OS。因此建议为OS内核代码,虚拟化辅助代码和设备中断提供一个小核,从而改善能效和面积
    • Hruby也提出小核的性能可以支持很多场景,例如执行OS代码,此时将大核用于应用程序执行可以提供更高的吞吐量
  8. 减少任务迁移开销
    • Gutierrez提出的AMP中的线程切换在私有和共享的LLC上的影响
      • 线程切换时需要被保存到cache中,这意味这对于将要执行的线程,cache此时是冷的,会带来很多的cache misses,此时期望使用更大的cache 容量
      • 共享LLC可以提供更大的有效容量,但是无法关闭以节省能量;私有LLC能够关闭,但是会出现很多由于一致性而带来的cache miss。
      • 当线程间的切换间隔很大时,私有或者共享LLC之间的性能差距可以忽略不计,此时可以使用私有的LLC优化某些cores,以减少能量开销
    • Brown提出一种改善线程迁移之后的性能。纪录线程在执行过程中的一些存储访问行为,并且随着线程迁移或者切换保存下来。当该线程再次执行时,根据纪录的行为,预取数据和指令到cache中,以提高性能。
  9. 模糊逻辑
    • Chen提出使用程序的一些固有特性结合模糊推理,进行AMP中的线程调度。
      • 程序固有的特性:相关指令之间的距离,分支转移率,数据的重用距离等
      • 根据程序的特性和硬件架构估计分支预测器大小,缓存大小和发射宽度的适合程度
      • 利用模糊推理系统分析这些估计结果,然后进行调度
    • Sun提出了两个基于模糊控制的调度器
      • 基于IPC的调度器,检测线程的IPC,将更高IPC的线程迁移到更快的core
      • 基于LLC缺失率的调度器,检测线程的LLC缺失率,将缺失率高的迁移到较慢的core
      • 模糊控制器的三个引擎:模糊化引擎,推理引擎和去模糊引擎。首先将定量值转换为定性值,然后利用一组规则进行推断输出的模糊集合,然后将其转换为清晰的数字。根据数字进行调度
  10. 不同ISA的AMP
  • 由于程序的运行时状态和ISA紧密相关,当应用在不同ISA的core间切换时需要很大的开销
  • DeVuyst提出一种减少ISA相关状态的技术,从而能够减少迁移开销
    • 论文确定了大部分的程序状态的形式对性能并不重要,同时通过修改编译器,将程序的大部分状态保持在体系结构无关的形式,从而降低迁移成本
    • 论文还提出了动态二进制翻译来实现即时迁移。当程序迁移到另一个核时,通过二进制翻译执行,当遇到函数调用。
  • Venkat证明了ISA异构的AMP相对于单ISA的AMP更加有效。ISA多样性的几个关键方面:代码密度,寄存器压力,解码和指令复杂性,SIMD处理,模拟与本地的浮点运算
  • Li提出了一种基于OS的调度策略。程序不需要关注ISA,可以直接在某一个核上执行。当核不支持某一条指令时,会触发fault-type异常。异常处理会将线程迁移到可以执行该错误指令的核上继续执行
  • Srinivasan提出了一种硬件协助的OS调度策略,可以支持虚拟AMP/物理AMP/混合AMP。利用硬件结构检测线程的执行时间和停顿时间,同时预测线程在其它异构核上的执行性能。OS根据这些信息,将线程调度到可以提供最高性能的core上执行。论文验证了这种技术在三种AMP上都可以表项很好
  • Barbalace提出了一种软件体系结构能够支持在异构ISA的AMP硬件上运行共享内存的程序。该软件体系结构由一个操作系统和一个编译器框架组成,用于在支持OS的异构ISA机器上运行正常的共享内存的程序。(为应用程序提供了一个透明的分布式共享内存(DSM))

继续阅读