MorphCore微架构——(搬运)

MorphCore微架构——(搬运)

很久之前我在找顺序执行CPU的一些问题时看到这么一篇文章


又查了那篇论文,感觉写的真好,不自量力想翻译一下,最终在翻译软件加持下勉强弄出来,惨不忍睹,之前挂在我的大鱼号上,没人看所以搬过来,英文好的请忽略,直接看原文,英文不好还想了解一下的请往下看



MorphCore:一种高效节能且高并行性性能和高吞吐量的线程级并行TLP的微架构


摘要

一些研究人员认为近年来,今天的工作负载需要一个微架构:可以在高性能的单线程和多线程的处理代码,代码在高吞吐量,同时节约能源。本文提出了morphcore,满足这些相互矛盾的要求,一种独特的方法,从一个传统的高性能的乱序执行核心和最小的变化,可以必要时将它转变成一个高度多线程的顺序执行SMT核心。其结果是一个结构优于激进的4路SMT乱序执行的融合的核心,“中”的乱序执行核心,小顺序执行核心。相比于2路SMT乱序执行的核心,morphcore增加10%的性能和降低22%的能源延时和面积


1.介绍

传统的核心结构不适应线程级并行(TLP)的程序。一般来说,工业建设两型芯:大的乱序执行核心(例如,英特尔sandybridge,IBM的Power 7),和小芯(如英特尔的MIC又名拉雷比、Sun 的Niagara、ARM的A15)。大的乱序执行(OOo)芯利用指令级并行处理提供高的单线程性能(ILP),但他们对于多线程程序是电力效率低,因为他们浪费能源开发单线程性能ILP而是代替可用线程级并行TLP。相比之下,小芯不在宽超标量OOo乱序执行浪费能量,而是以单线程性能差为代价提供了高并行吞吐量。


异构(或不对称)芯片多处理器(acmps)[ 11, 22, 28 ]已提出处理这个软件的差异。ACMPs提供一个或几个大核心,以快速执行单线程程序,和许多小核心用于高吞吐量的多线程程序。不幸的是,ACMPs要求大、小芯数是固定的,在设计时,这会限制软件线程级并行性的不同程度的适应性。


为了克服acmps的这一限制,研究人员已经提出了核心融合类似的架构[ 16, 5, 17,25, 24, 32,9, 10 ]。他们提出了大量小内核的芯片,在多线程程序中提供高吞吐量性能。当执行单线程程序时,这些小内核可以动态地“融合”成一个大内核。不幸的是,与传统的乱堆芯相比熔融大核心有低性能和高功率/能量消耗的缺点,有两个原因:

1)在融合核心的管道阶段还有额外的延迟,从而增加核心“关键循环”的延迟时间,

2)模式切换要求指令缓存刷新,并导致小核心数据缓存中数据迁移的代价。


为了克服这些局限性,我们提出了morphcore,与可重构核心相反的自适应构架。相对于融合成一个大核心的大量小核心,morphcore使用大量乱序执行的核心基板和补充顺序执行SMT利用高度并行代码的性能。morphcore提供两种执行模式:out-of-order乱序执行和In Order顺序执行。 在out-of-order乱序执行方式,morphcore以最小的性能损失提供了传统乱序执行核心的单线程性能。然而,当TLP是可用的时,morphcore“转变”到一个高度同步多线程SMT核心。这让morphcore将长延迟操作的任务由不同的线程并发执行。因此,它可以实现比乱序执行的核心更高的吞吐量。由于没有需要在模式切换时迁移指令或数据的现象,morphcore可以以最小的性能损失切换模式。


morphcore是建立在两个关键的观点。首先,高度线程化(即6-8路SMT)的顺序执行核心可以实现与乱序执行内核相同或更好的性能。第二,一个高度线程化的顺序执行SMT核心可以使用构成一个积极的乱序执行核心所需的硬件子集来构建。例如,我们在乱序执行内核中使用物理寄存器文件(PRF)作为多线程smt中顺序执行线程的体系结构寄存器文件。类似地,我们使用保留站条目作为顺序指令缓冲区,而非作为乱序执行内核的执行管道。


morphcore执行多线程程序时比传统的乱序的核心更节能。它利用TLP减少了执行时间的,顺序执行模式通过关闭几个耗电结构(例如重命名逻辑、顺序调度和负载队列)来减少能耗。


我们通过有14个单线程和14个多线程工作负载进行评估表明,与一个典型的2路SMT的核心相比,morphcore增加了10%的性能并能量延迟和芯片面积方面减少22%。

我们也比较morphcore对三种不同的核心架构,不同的性能/节能设计点优化,针对核心融合,重构核心架构。我们发现,morphcore在一系列的单线程和多线程工作负载方面表现最好的性能和能量、延迟和芯片面积。


贡献:本文做了两个贡献:

1。我们提出一个新的微架构,morphcore,结合乱序执行和高度线程化smt,以便在单个内核中执行SMT顺序执行执行。我们全面描述需要实现morphcore的微体系结构和模式之间切换的策略。

2。据我们所知,这是第一篇定量地比较小型、中型和大型核心架构在单线程和多线程工作负载方面的性能和能源效率方面的文章。






2. 背景和动机

2.1.乱序执行

乱序执行(OOO)核心可以在其操作数可用时执行指令,而不是按程序顺序执行指令,从而提供更好的性能。图1显示了一个2路SMT乱序执行 OOO核心管道的高级布局。上面的部分显示了访问的主要结构和在管道的不同阶段执行的功能。我们描述了一个类似于奔腾-4的体系结构,其中的数据,无论是推测性的还是架构性的,都存储在物理寄存器文件(PRF)中,并且每个线程的寄存器别名表(RAT)条目指向PRF条目。前端的预测指出了预测的状态,而后端永久性RAT则指向了架构的状态。管道的前端(从Fetch阶段一直到插入到预订站(RS))都是按顺序运行的。指令被获取、解码,然后被发送到重命名阶段。重命名阶段重命名(即映射)架构源和目标寄存器id为物理寄存器文件id,通过读取正在被重命名的线程的预测,并将指令插入到预订站(也称为发行队列)。重命名阶段重命名(即映射)架构源和目标寄存器id为物理寄存器文件id,通过读取正在被重命名的线程的投机者,并将指令插入到预订站(也称为发行队列)。

指令在保留站中等待,直到被选择的阶段选择执行。当所有指令的源操作数都准备好之后,Select阶段就会选择执行指令,而指令是最古老的就绪指令。当一个指令被选为执行时,它通过唤醒逻辑块来准备它的依赖指令,从PRF读取它的源操作数,并在一个功能单元中执行。执行后,一条指令的结果在旁路网络上广播,以便任何依赖指令可以立即使用它。结果也被写入PRF,指令更新它的ROB状态。该指令一旦到达ROB的头部,就会挂起,并更新相应的永久性RAT。

宽的超标量乱序执行的问题。不幸的是,大乱序执行(OOO)核心的单线程性能优势带来了很大的电力损失。正如我们在6.2节中所展示的那样,一个大的OOO核心消耗的能量比一个中等的OOO核心要多92%,比一个小的顺序执行核心要多4.3倍。这种开销的存在是为了利用指令级别的并行性来提高核心吞吐量,并且当软件只有一个单独的执行线程时是合理的。然而,当存在多个执行线程时,我们建议使用顺序执行同步多线程(SMT)来更好地利用内核。

2.2. 同步多线程

同步多线程(SMT)是一种利用软件提供的多个线程来提高执行资源利用率的技术。在SMT中,一个核心执行来自多个线程的指令。每个周期,核心从潜在的许多就绪线程中挑选一个线程,并从该线程获取指令。然后,按照常规的管道方式对指令进行解码和重命名,并插入到一个公共的(所有线程中共享的)RS中。由于多个候选线程的指令在RS中是可用的,所以找到准备好的指令的可能性就会增加。因此,如果软件将多个线程提供给硬件,那么SMT核心可以实现更高的吞吐量。


英特尔超线程属于SMT2



标量核心的顺序执行SMT的潜力。Hily和Seznec指出,一个高度多线程的顺序执行核心可以达到类似于OOO乱序执行核心的指令吞吐量。我们基于这样的洞察力设计了一个核心,当软件并行可用时,它可以实现高性能和低能耗消耗。



图2显示了在乱序执行和顺序执行的核心中工作负载满载((BlackScholes pricing )的性能。对于这个实验,两个核心的大小都是相同大小的,比如缓存大小、管道宽度(4宽的超标量)和深度(参考第5部分的实验方法)。当两个内核只运行一个线程时,顺序执行内核的性能明显低于乱序执行内核的性能。当SMT线程的数量从1增加到8时,乱序执行内核的性能在2个线程中显著增加,但是在4个线程中开始饱和,因为性能受到核心的峰值吞吐量的限制。相反,顺序执行核心的性能继续从更多的线程中获益(这允许它更好地容忍长延迟操作和内存访问)。当线程的数量等于8时,顺序执行内核的性能开始与乱序执行内核的性能匹配。

这个实验表明,当高线程并行度可用时,通过顺序执行SMT,可以实现高性能和低能耗,因此,不需要用复杂的、电力需求大的结构来构建乱序执行SMT核心。


总结。

尽管具有很高的电力成本,但由于乱序执行在程序执行过程中提供了显著的性能改进,因此仍然需要乱序执行核心。因此,如果我们想要高单线程的性能,我们需要保持对乱序执行的支持。然而,当软件并行可用时,我们可以通过使用顺序执行SMT来提供性能,而不是在乱序执行上浪费精力。为了实现这两种目的,我们提出了“形态核心”MorphCore体系结构。



3. MorphCore微体系结构

3.1、 MorphCore微结构概述

MorphCore微架构是基于传统的OOO核心。图3显示了对一个基准OOO核心(如图1所示)所做的更改,以构建MorphCore。它还显示了在两种模式中都活动的模块,以及只在其中一种模式中活动的块。除了乱序执行之外,MorphCore还支持额外的顺序执行SMT线程,以及顺序调度、执行和同时运行线程的提交。在OutofOrder模式中,MorphCore与传统的乱序内核完全一样。



3.2、取指和解码阶段。

MorphCore的取指和解码阶段就像一个启用了smt的传统的OOO核心。图4显示了MorphCore的取指阶段。 MorphCore增加了6个附加的SMT上下文到基准核心。每个上下文由一个PC、一个分支历史寄存器和一个返回地址堆栈组成。在OutofOrder模式中,只有2个SMT上下文是活动的。在InOrder模式下,所有8个上下文是活跃的。分支预测器和i-cache在两种模式中都很活跃。





3.3、 重命名阶段

图5显示了MorphCore的重命名阶段。顺序执行重命名比OOO重命名要简单得多,因此也更高效。在In Order顺序执行模式中,我们使用物理寄存器文件(PRF)来存储多个In-order SMT线程的体系结构寄存器:我们在逻辑上将PRF划分为多个固定大小的分区,其中每个分区存储一个线程的架构寄存器状态(图5(b))。因此,通过将线程ID与体系结构寄存器ID连接起来,可以将体系结构寄存器ID映射到物理寄存器ID。这种方法限制了MorphCore可以支持num物理寄存器/num架构寄存器的内序SMT线程的数量。然而,在当前的内核中,物理寄存器的数量已经足够大(并且不断增加),以支持8个顺序的SMT线程,这些线程足以匹敌乱序内核的性能。对于我们在模拟器中建模的x86 ISA,一个fp-prf分区24个条目,每个线程16个条目的int-prf分区足以容纳一个线程的架构寄存器。未重命名的寄存器和在基准OOO核心中被复制2种方式的寄存器需要在MorphCore中被复制8种方式。


分配/更新资源。当MorphCore在OutofOrder模式下时,被重命名的指令将在ROB中加载并在存储队列中分配资源。在InOrder模式下,MorphCore利用ROB来存储指令信息。我们将ROB划分为多个固定大小的块,每个用于每个活动线程。由于内存指令不是以投机的方式执行的,所以我们不会在负载队列中分配资源。因此,加载队列是不活动的。从提交的存储指令和尚未提交到d-cache的数据中保存数据的存储队列,在InOrder模式中也很活跃,并且在线程中也同样被划分。


插入到预订站(RS)。图5(c)显示了重命名阶段的一部分,它将重命名的指令插入到RS中。

在OutofOrder模式中,RS是在多个线程之间动态共享的,并且分配给传入重命名指令的RS条目是通过查询空闲列表来动态确定的。在InOrder模式下,RS将多个线程划分为固定大小的分区(图5(d)),每个分区作为一个循环FIFO操作。指令通过线程RS-Insert-Ptr被插入到的连续RS条目中,并在成功执行后被删除。


3.4、选择和唤醒

MorphCore采用了OutofOrder和InOrder唤醒和选择逻辑。唤醒逻辑使指令准备好执行,而选择逻辑从就绪指令池中选择要执行的指令。图6显示了这些逻辑块。





OutofOrder唤醒。OutofOrder唤醒逻辑与传统的乱序执行核心是完全相同的。图6(未着色)显示了RS条目的结构。当为延迟字段中指定的循环数设置相应的匹配位时,一个操作数被标记为就绪(r位被设置)。 当指令触发时,它会广播它的目标标记(电力消耗大),这样它就可以与RS中所有指令的源标记进行比较。如果目标标记与操作数的源标记匹配,则设置匹配位,并将延迟字段设置为触发指令的执行延迟(指令的延迟存储在分配给指令的RS条目中)。延迟字段也在与源标记相关的转移字段中被拉上。移位场每一个周期匹配位设置时都是右移位。当位移位为零时,R位被重置。rs条目等待两个源都准备好,然后再提高Req OOO执行指令。


OutofOrder选择。OutofOrder选择逻辑监视RS中的所有指令(权力消耗大),并选择具有Req OOO Exec系列的最老的指令(s)。选择逻辑的输出是一个Grant位向量,其中每个位对应于一个RS条目,指示下一个指令将会被触发。当一个指令被触发时,将在RS条目中设置调度的位,以便RS条目在随后的循环中停止请求执行。

InOrder唤醒。 InOrder模式执行/调度指令顺序,在上一条指令开始执行或准备独立后,指令就会准备就绪。 我们在每个RS条目中添加了两个新的位域,以进行顺序执行调度(调度和匹配(M))。新的字段在图6中被着色。为了跟踪体系结构寄存器的可用性,InOrder唤醒逻辑块也维护了每个体系结构寄存器的M/DELAY/SHIFT/R位字段。当指令触发时,它设置R、M和延迟在InOrder唤醒逻辑块中与目标寄存器相对应的位域,如下所述:

重新设置R位,设置匹配(M)位,并将延迟字段设置为触发指令的执行延迟(如上文所述,延迟/移位机制工作)。每一个循环,对于每个线程,InOrder唤醒检查两个最古老指令的源寄存器的可用性(R位被设置)。如果源可用,唤醒逻辑将在RS条目中设置M位为1,从而为指令做好准备。由于它避免了在RS中对所有指令的源操作数进行广播和匹配,所以InOrder唤醒是有效的。


InOrder 选择

InOrder选择逻辑块通过维护8个顺序选择块(每个线程一个)和另一个块在这些块的结果之间进行选择,以一种完全有效的(有效的)方式进行分层。而且,每个order select逻辑只监视线程的RS分区中的两个最古老的指令,而不是像在OOO select中那样监视整个RS。注意,只有两个指令需要在InOrder模式下进行监控,因为每个线程的指令都被并以FIFO方式插入,调度、删除。


3.5 执行和提交


当一个指令被选择执行时,它会从PRF中读取它的源操作数,在ALU中执行,并像传统的OOO核心中所做的那样,在旁路网络上广播它的结果。在 MorphCore中,附加的prf-bypass和数据存储在InOrder模式中是活跃的。如果一个较长的延迟指令在执行管道中、为了延迟在PRF中较年轻的指令(s)的编写,提供了旁路和缓冲。在这种情况下,较年轻的指令(s)写入一个临时的小数据缓冲区(每个线程4个条目)。缓冲区在prf-read阶段添加了一个额外的旁路。指令以传统的SMT方式提交。对于OutofOrder的承诺,永久RAT也得到了更新。在InOrder模式中,只有线程的ROB Head指针需要更新。




3.6 加载/存储单元

图7显示了加载/存储单元。在OutofOrder模式中,加载/存储指令被执行的是投机性的和乱序的(类似于传统的OOO核心)。当加载触发时,它会在加载队列中更新它的条目,并搜索存储队列以获取最新的数据。当存储失败时,它会更新并在存储队列中存储数据,并搜索加载队列以检测存储到加载程序订单的违规情况。在InOrder模式下,由于加载/存储指令没有被执行,所以不会执行加载队列CAM的搜索。但是,加载仍然搜索保存提交的数据的存储队列。存储指令也会更新存储队列。



3.7 从错误中恢复

在OutofOrder模式中,一个分支错误触发了一个恢复机制,在重新命名错误的分支指令之前,它会将f-RAT恢复到状态。在InOrder模式下,一个分支错误地将指令分区中的指令,从线程中分离出的ROB分区和前端管道,然后将PC重定向到正确的目标。


4. MorphCore讨论

4.1,MorphCore面积和功率开销

首先,MorphCore增加SMT数量从2到8。这将硬件添加到取指阶段和核心的其他部分,这在我们修改过的McPAT工具报告中所占的面积开销还不到0.5%。注意,它不需要在OOO核心中添加SMT上下文的两个最大开销——额外的重命名表和物理寄存器——因为添加的SMT上下文是按顺序排列的。其次,MorphCore增加了InOrder唤醒和选择逻辑,我们假设它增加了不到0.5%的核心区域,即OOO唤醒和选择逻辑块的一半区域。第三,添加额外的绕过/缓冲增加了0.5%的核心的面积开销。因此,MorphCore增加了1.5%的面积开销,以及在InOrder模式下的1.5%的电力开销。

4.2 MorphCore时间/频率的影响

MorphCore只需要对基准OOO核心进行两个关键的改变:

1)顺序执行重命名/计划/执行逻辑。MorphCore在三个阶段的关键路径上增加了一个多路复用器:

a)在重命名阶段中选择在OutofOrder模式和InOrder模式重命名的指令之间,

b)在指令调度阶段,在OutofOrder模式和InOrder模式就绪指令之间进行选择,

c)在预读取阶段,因为在InOrder模式中有额外的旁路。

为了估计这种开销的频率影响,我们假设多路复用器引入了一个传输门的延迟,我们假设它是FO4门延迟的一半。假设每个管道阶段有20个FO4通道延迟,我们估计,MorphCore的运行速度比基准OOO核心慢了2.5%。

2)更多的SMT上下文。

新增的顺序执行SMT上下文的添加可以延长MorphCore的前端的线程选择逻辑。这种开销正在改变多路复用器,它从许多就绪的线程中选择一个,从2个选1个,从8个选1个。我们假设运行的核心内核比基准OOO核心慢2.5个百分点,这就隐藏了这个延迟。除了上面提到的对基准OOO核心的时间关键更改之外,MorphCore还增加了顺序唤醒和选择逻辑块。由于InOrder指令调度比OutofOrder指令调度更简单,因此我们假定新添加的块可以被放置和路由,这样它们就不会影响基准OOO核心的其他组件的关键路径。因此,我们得出的结论是,MorphCore的频率影响仅为2.5%。

4.3 在InOrder模式下关闭顺序执行模式

在InOrder模式下不活动的结构(OOO重命名逻辑、OOO调度和加载队列)是单元级的锁定。

因此,没有消耗任何动态能量,但是静态能量仍然被消耗。单元级的能量门也可以应用于进一步减低静态能量,但是我们选择不这样做,因为根据我们的McPAT估计,这些结构所消耗的静态能量非常小,而由单元级的能量控制所产生的开销是显著的。

4.4 与操作系统交互

MorphCore不需要对操作系统进行任何更改,它就像一个核心,它的硬件线程数量等于InOrder模式中支持的线程的最大数量(在我们的实现中是8)。在这两种模式之间切换是在硬件上处理的。

4.5。什么时候MorphCore转换模式?

在我们当前的MorphCore实现中,我们在基于活动线程数量的模式之间进行切换(其他策略是我们未来工作的一部分)。线程在不等待任何同步事件时是活动的。当活动线程的数量小于一个阈值(在初始实现中为2)时,MorphCore将开始在OutofOrder模式中运行。如果操作系统调度更多的线程,并且活动线程的数量大于阈值,那么核心就会切换到InOrder模式。

在以InOrder模式运行时,活动线程的数量可能会下降,原因有两个:操作系统可以取消某些线程的调度,或者线程会变得不活跃,等待同步。 我们假设线程库使用监控/mwait指令,这样,MorphCore硬件可以检测到一个线程正在变为不活动状态。在等待其他线程到达暂停时,或者在等待另一个线程释放锁的锁等待时不活动。如果活动线程的数量小于或等于阈值,则核心将切换回OutofOrder模式,直到更多的线程被调度或变为活动状态(当检测到被监视的缓存的写入时,硬件会使线程处于活动状态)。


4.6。从OutofOrder到InOrder的改变模式

模式切换由执行以下任务的微代码例程处理:

1)排出核心管道。

2)转移所有线程的架构寄存器。

我们将这些寄存器转移到一个保留的内存区域。为了避免这些写入的缓存遗漏,我们使用完整的缓存行写指令,在写之前不读取缓存行。

3)关闭重命名单元,OutofOrder唤醒和选择逻辑块,并加载队列。注意,这些单元不一定需要有电源(我们假设这些单元是时钟门的)。

4)将寄存器值填充回每个线程的PRF分区。这是使用特殊的加载微操作来完成的,它直接处理PRF条目,而不需要重新命名。


4.7。从 InOrder 到 OutofOrder换模式

由于MorphCore的InOrder模式比在OutofOrder模式中支持更多的线程,当切换到OutofOrder模式时,MorphCore不能同时运行所有的线程和次序。 因此,一些线程需要被标记为非活动的或“不运行”(除非它们已经是不活动的,这在我们当前的实现中是这样的)。

非活动线程的状态存储在内存中,直到它们变为活动状态。为了加载活动线程的状态,在一个名为活动线程表的结构中,形态核心将指针指向非活动线程的体系结构状态。活动线程表使用线程ID进行索引,并为每个线程存储一个8字节的指针。

模式切换由执行以下任务的微代码例程处理:

1)排出核心管道。

2)转移所有线程的架构寄存器。将指针指向活动线程表中不活动线程的体系结构状态。

3)打开重命名单元,OutofOrder唤醒和选择逻辑块,并加载队列。

4)将活动线程的架构寄存器填充到PRF中预先确定的位置,并更新投机-RAT和永久-RAT。




4.8 改变模式的开销

更改模式的开销是管道流,它随工作负载的不同而变化,以及线程的架构寄存器状态的溢出或填充。 x86 ISA指定一个架构状态、每个线程的780字节(包括最新的AVX扩展)。micro-code例程需要约30周期移出或填补每个线程的架构寄存器状态,在管道清空之后(总共有6KB和250个周期为8个线程)到私有的L2缓存的保留方式(假设有一个256位宽的读/写端口到缓存,并且每个周期的缓存带宽为一次读写每循环)。根据经验,我们从私有256KB的缓存中去掉6KB,并没有损失性能。注意,更改模式的开销可以通过将架构状态的移出或填充与管道流的重叠而显著降低。探索这类机制是我们未来的工作。


5。实验方法

表1显示了使用我们的内部循环级x86模拟器模拟的核心和内存子系统的配置。模拟器忠实地模拟核心、缓存层次结构和内存子系统的微架构细节。对共享资源的争夺、DRAM存储冲突、存储缓存等。为了估计不同核心架构的面积和性能功耗比,我们使用了一个改进版的McPAT。

我们修改McPAT:

1)报告细粒度和电力数据,

2)在不增加重命名(rat)表的情况下增加SMT方法,

3)利用顺序执行的面积/能量影响(OOO的1/2),

4)模型额外绕过/缓冲,

5)更准确地模拟SMT的影响。注意,所有的核心配置都有相同的内存子系统(L2、L3和主内存)。


表2总结了比较架构的关键特征。我们在3.4 GHz的基础上运行基准ooo-2核心,并扩展其他核心的频率,以合并增加的面积和临界路径延迟的影响。例如,ooo-4的频率比ooo-2低5%,因为添加额外的SMT线程显著地增加了核心的区域/复杂性:它增加了两个额外的重命名表(RAT),至少一个多路复用器的重命名阶段,也在重命名的开始阶段增加了额外的缓冲(4之间的选择,而不是2重命名表)我们估计(使用McPAT)是一个额外的5%面积,从而降低频率5%。MorphCore的频率降低了2.5%,因为它的关键路径增加了2.5%(如第4节所解释的)。

由于OOO-2核心具有最高的频率和支持4发射宽的超标量OOO执行,因此我们可以期望它拥有最高的单线程(ST)性能。由于小的和MED的核心具有最高的发射数每循环,所以我们可以期望它们拥有最高的多线程(MT)性能。我们希望在ST和MT的工作负载中,MorphCore能够执行得很好。在7.1节中,我们还比较了MorphCore与CoreFusion的对比,这是一种可重构的核心架构的代表。







5.1。工作负载

表3显示了每个应用程序的描述和输入集。我们模拟了14个单线程SPEC 2006应用程序和来自不同领域的14个多线程应用程序。 我们将单线程工作负载的数量限制为14,以确保单线程和多线程工作负载的数量相等,因此单线程的结果不占总体平均性能数据的主导地位。我们随机选择14个规范的工作负载。每个 SPEC基准都运行在带有ref输入集的2亿个指令中,其中的代表性片是使用类似于Simpoint-like的方法来选择的。我们这样做是因为规范的工作负载要长得多(数十亿条指令),而且使用像SimPoint这样的现有技术更容易使用。单线程的工作负载在单个内核上运行,而其他核心则关闭。相反,多线程工作负载的数量与可用上下文的数量相等,即可用上下文的数量。,核心数×smt上下文数。我们运行所有多线程工作负载到完成,只计算有用的指令,不包括同步指令。统计信息只在并行区域中收集,而初始化阶段则被忽略。为了参考,图8显示了在多线程工作负载的情况下,多线程工作负载的执行时间百分比。线程在不等待任何同步事件时是活动的。我们将在下次展示结果时参考这些数据。




6 结果

由于MorphCore试图提高性能和降低能耗,我们比较了我们在性能、能源消耗和综合性能指标上的评估架构,即能量-延迟-面积平衡的产品。

6.1 性能结果

由于ST和MT工作负载的设计和性能权衡本质上是不同的,所以我们分别评估它们的性能。

我们将在6.1.3节中介绍所有ST和MT工作负载的综合平均值。




6.1.1 单线程(ST)性能结果。

图9a显示了每个核心的加速到ooo-2的速度。 如预期的那样,ooo-2实现了所有工作负载的最高性能。MorphCore是非常接近的。这是因为MorphCore对传统的乱序执行内核引入了最小的变化。由于这些变化,MorphCore的运行速度比ooo-2慢了2.5%,达到了ooo-2性能的98.8%。ooo-4内核提供的性能比MorphCore稍微低一些。这是因为在运行ST模式时,OOO-4的开销会更高,因为它支持4个OOO SMT线程。请注意,ooo-2、ooo-4和MorphCore的性能差异是内存绑定工作负载的最小值。mcf,GemsFDTD,和lbm。另一方面,针对多线程性能优化的核心,即MED和小的,都有2个问题的宽度(而不是4个针对ST优化的核心),或者是在一个小窗口(MED)中运行顺序执行(小)或乱序执行。这将导致在ST工作负载中出现显著的性能损失:与ooo-2相比,MorphCore的性能降低了25%,小了59%。与INT工作负载相比,对于FP工作负载(右半部分),性能损失更明显。总之,在ST工作负载中,MorphCore提供了第二最佳性能(98.8%的ooo-2)。


6.1.2 多线程(MT)性能结果。

多线程(MT)性能不仅受到单个内核的性能潜力的影响,还受到内核的核心和SMT线程总数的影响。图9b显示了将每个核心规范化到ooo-2的速度。如预期的那样,吞吐量优化的核心,MED和小的,提供了最好的MT性能(平均比ooo-2的性能提高了30%和33%)。这是因为,尽管它们的峰值与ooo-2大致相同(见表2),但它们的总峰值吞吐量更高。


更重要的是,MorphCore比ooo-2提供了22%的显著性能改进。当运行在基准ooo-2核心(表4)上时,MorphCore为工作负载低的工作负载提供了最高的性能改进。这是因为MorphCore提供了更好的延迟容忍度,并通过同时执行8个线程来提高核心吞吐量。例如,基准ooo-2上的性能提高了84%,每循环微指令数从1.94增加到3.58。实际上,相比于3个MED内核,在基数上,由于其能够运行更多的SMT线程,所以在基数上,它的核心性能比它的核心要高15%。qsort是另一种低每循环微指令数(1.95)的工作负载,但是MorphCore(类似于其他吞吐量核心)并没有像基数那样提供更高的性能改进。

这有两个原因:

1)在执行qsort时,MorphCore不会在InOrder模式中花费大量时间(只有80%的执行时间运行超过2个线程,如图8所示),

2)甚至当超过2个线程处于活动状态时,只有50%的时间是6个或更多的线程活动(图8中未显示的数据)。

因此,MorphCore不能获得更多的机会来实现更高的吞吐量。注意,在qsort中,由于其执行最多8个线程的能力,在qsort中,它仍然胜过了MED核。


其他在ooo-2(从2.17到2.78)中相对较高的每循环微指令数的工作负载相对于ooo-2(由fft的23%增加到tsp的40%)的性能提升相对较低。与此类别中的其他工作负载相比,对于tsp来说,MorphCore的性能提升更高,即使在2.78(在ooo-2上)的基准每循环微指令数也比较高。因为在做相同的算法工作时,相比于ooo-2,MorphCore的执行次数减少了(-10%)。这是因为tsp是一个分支和绑定算法,并且快速到达解决方案的可能性随着线程的增加而增加。


在运行于ooo-2(web、黑、barnes、ray和水)的两个线程中,即使在运行时,也能实现高的每循环微指令数(从3.06到3.51),但在这种情况下,它提供了性能上的最低性能改进。这些工作负载具有较高的每个线程可用性,因此不能显著地从增加线程数量中获益,因为可以实现的性能改进受到了MorphCore的峰值吞吐量的限制。然而,正如我们稍后所展示的,MorphCore仍然是有益的,因为它能够通过执行SMT线程来提供较低的能耗,从而提供更高的性能。


总的来说,由于其峰值MT吞吐率(表2),相比于吞吐量优化的核心,它的性能改进要低于吞吐量优化的核心MED和小核,也就是在ooo-2(平均为22%和33%)之间的性能改进。然而,在qsort、fft和基数3个工作负载中,MorphCore在优于MED核。如以上所述,从更多的线程中获得qsort和基数好处。在fft中,在执行过程中,内核的线程不平衡受到了影响。

线程只有在执行时间的72%的情况下才会活动,只有两个线程在执行时间的24%的活动中处于活动状态,因此提供的性能(-3%)比MorphCore稍微低一些。MorphCore在lu的小核中也表现突出。(事实上,小核的性能比ooo-2更差)。这是因为lu的线程不能同时到达全局阻塞,并且必须等待线程的延迟。因为小的内核的单线程性能很低,线程会在很长一段时间内等待滞后线程(只有一个线程在执行时间的35%中处于活动状态,如图8所示),因此执行时间显著增加。由于只有1个线程处于活动状态时,它会切换到OutOfOrder模式,因此线程的等待时间会减少,因此它不会受到线程不失衡问题的严重影响。


MorphCore也优于OOO-4,这是一个具有较高的面积开销核心架构,并且比MorphCore更复杂(因为OOO-4支持4个OOO SMT上下文),平均为7%,最高为26%(qsort)。尽管MorphCore和ooo-4的峰值吞吐量是相同的(4,表2),但是由于通过执行更多的线程而不是ooo-4来提供更好的延迟性,所以MorphCore胜出。因此,对于具有较低的每循环微指令数的工作负载,并从增加线程数中获益,相比于ooo-4,MorphCore提供了显著的更高的MT性能。



6.1.3 整体性能的结果。

图10a总结了每个体系结构规范化到ooo-2的平均速度。在单线程(ST)工作负载中,MorphCore与ooo-2非常接近,这是最好的优化的架构。在多线程(MT)工作负载中,MorphCore比ooo-2的性能高22%,并且达到了最好的MT优化架构(MED和小型)的性能潜力的2/3。在所有工作负载(ST和MT)中,MorphCore比其他所有架构都要出色。我们的结论是,MorphCore能够有效地处理各种不同的ST和MT工作负载。


6.1.4 MorphCore对频率敏感性造成的损失。

我们发现,对于一个有X%频率惩罚的MorphCore,ST和MT工作负载的性能分别比没有频率惩罚的语素核心降低了X/2%和X%。这是因为我们的ST工作负载是核心+内存绑定,而我们的MT工作负载主要是核心绑定的。


6.2 节能效果

我们首先参考图10b,它显示了ST和MT工作负载的每个核心配置的总功率(静态+动态)。

正如预期的那样,对于ST工作负载,最高能量消耗的构架是大的乱序执行内核(ooo-2、ooo-4和MorphCore)。一个单独MED或单个的小核比一个乱序执行的核心更小,因此更少的电容,分别产生47%和77%的能量节约。对于MT的工作负载,所有的核心配置都消耗相同的功率(除了MED核心),从而确认了相等面积的核心比较结果与等效能量的核心比较。3个MED核心的内核占了18%的更多面积(表2),并且提供了30%的性能(这意味着更动态的功耗),这使得在ooo-2上的能量增加了25%。注意,MorphCore消耗的能量比ooo-4少2%,同时提供7%的更多性能。这是因为MorphCore不会在OOO/调度/调度上浪费能量,相反,通过更多线程的顺序执行SMT来提供性能。


图10c显示了每个配置所消耗的总(静态+动态)能量消耗(核心包括L1 指令和数据缓存,而不是L2和L3缓存),规范化到ooo-2。正如预期的那样,小核是两种工作负载类型中最节能的核心:对于ST工作负载,它们的性能降低了59%,功耗低了77%(能量减少了46%),对于MT工作负载,它们的性能比ooo-2高了33%(能量减少了19%)。对于MT的工作负荷来说,MorphCore是能量效率的第二高(在小核之后):MorphCore相比于ooo-2、ooo-4和MED核心消耗了9%、7%和6%的更少能量。


MorphCore减少了能源消耗,有两个原因:

1)MorphCore减少执行时间,从而使核心的结构在较短的时间内保持活跃,

2)即使在MorphCore活跃的时候,一些在传统的乱序执行核心中会活跃的结构也会在MorphCore的顺序模式中处于不活跃状态,这些结构包括重命名逻辑、指令调度器的一部分和加载队列。作为参考,表5显示了ooo-2核心的几个关键结构的能量消耗,这是在MT工作负载中平均核心能量消耗的百分比。我们发现,在MorphCore相较于ooo-2的能量节省中,有50%的能量节省自于减少这些结构的活动,而在相对于ooo-4的能量节省中,有75%来自于减少这些结构的活动。MorphCore比MED核心更节能,因为即使它提供低8%性能,它能量消耗显著(22%)低于MED核心,导致节能6%(相对于MED核心、70%的MorphCore节能是因为MorphCore在顺序执行模式减少活动的结构)。。




图10d显示了5种评估体系结构的能量-延迟-面积(ED2),这是一种综合的功耗性能效率指标。

在所有工作负载的平均水平上,MorphCore提供了最低的ED2:比基准的ooo-2低22%,比ooo-4低13%,比MED低9%,比小的低44%。我们的结论是,在ST和MT工作负载下,MorphCore提供了良好的能量消耗和性能改善之间的平衡。


7 相关工作

MorphCore与以前的可重构核、异构芯片多处理器、可扩展的核、同步多线程和高效核心的工作有关。

7.1 可重构的核心

与我们的工作最密切相关的是建议,这些建议使用可重构的核心来处理延迟和吞吐量敏感的工作负载16、5、17、25、24、32、9、10。所有这些建议都有相同的基本思想:构建一个带有“更简单的核心”的芯片,并在运行时使用额外的逻辑,在需要高单线程性能的情况下,使用额外的逻辑来构建一个高性能的乱序执行核心。核心在吞吐量模式下独立运行。

TFlex、E2动态多核架构、Bahurupi和最初的核心需要编译器分析和/或ISA支持,以减少对集中结构的访问次数。MorphCore不需要编译/isa支持,因此可以在不需要修改的情况下运行遗留的二进制文件。核心融合、联合核心、小部件和向前流提供了可伸缩性,而不需要任何编译/isa支持,类似于MorphCore。




缺点

将更简单的核心合并成一个大乱序执行核心的方法有几个缺点:

(1)融合核心的性能优势是有限的,因为组成的小核在锁步操作中运行。此外,融合在融合核心的管道阶段中增加了延迟,如果互相依赖的操作被引导到不同的核心,则需要内部核心通信。

(2)由于指令高速缓存和小核数据缓存之间的数据迁移,交换模式会产生较高的开销。

(3)核心熔合方案不仅在“熔合”模式下无效,而且在“非熔合”模式下,因为它们使用中等规模乱序执行核心作为其基准核心,效率低。


与CoreFusion进行比较。

CoreFusion融合了中型的OOO核心(2宽,48个乱序执行窗口),形成一个大的乱序执行内核。

图11显示了单个中等大小的OOO内核(MED)的加速,以及用于单线程工作负载的CoreFusion。在这个实验中,CoreFusion合并了三个MED 核心(见表2),我们使用了融合延迟,如(7个循环重命名,2个循环额外的分支错误,以及2个循环的内部核心通信惩罚)。我们使用CoreFusion论文中描述的指令指导方法,并假设完美LSQ堆预测,将负载/存储转到核心。除了mcf(平均为12%),CoreFusion在所有工作负载中都优于其他构架,因为它的效率更高的发射宽度,窗口大小和L1 数据缓存大小。在mcf中,由于CoreFusion引入的内部核心通信的开销,这些优点被抵消了。由于与CoreFusion不同,它是一种传统的无延迟和通信管理消耗的乱序执行核心。平均而言,MorphCore的表现比CoreFusion好17%。



图12显示了MorphCore的平均加速、功率、能量和ED2,并将其与CoreFusion为基准比较。

平均而言,MorphCore比CoreFusion提供了5%的更多性能。在多线程工作负载中,CoreFusion的表现优于MorphCore(平均为8%,每个基准测试结果如图9b所示),因为它有一个更高的峰值吞吐量,因为它由3个中型的OOO核心组成。在使用CoreFusion的单线程和多线程工作负载时,MorphCore降低了功耗(19%)、能量(29%)和ED2(29%),因为它使用较少的面积(见表2),因此,相比CoreFusion的3个内核,它消耗的静态能量更少,同时提供更高的性能或类似的性能。





7.2 异构Chip-Multiprocessors

异构(或非对称)芯片多处理器(ACMPs)由一个或几个大的核心组成,以加速单线程代码,以及许多小的内核来加速多线程代码。他们有两个局限性。首先,在设计时,大核心和小核的数量是固定的。相反,MorphCore可以动态地调整为串行和并行执行而优化的核心数。

其次,当程序一个小的和一个大的内核之间迁移时,它们会产生迁移成本。由于MorphCore可以在“就地”加速线程,因此不会产生迁移开销。


7.3 可伸缩的核心

可伸缩的核心可以在很大范围内扩展其性能和功耗。动态电压和频率扩展(DVFS)是一种广泛使用的技术,用于扩展核心的性能和功率(例如:Intel Turbo Boost)。

然而,使用DVFS增加性能会消耗大量的电能消耗(功率随频率的增加而增加)。Albonesi和他提出了动态优化处理器资源(如:为了提供按需性能和节省能源,缓存大小、寄存器文件大小、发布队列条目等)。但是,这些技术并没有探究如何更好地使用这些资源,以及当TLP可用时可以从其他资源中获得什么。

7.4 同步多线程

通过在同一个内核上执行多个线程,同步多线程(SMT)提高了资源利用率。然而,与MorphCore不同,先前提出的SMT技术在TLP可用时不会降低功耗。此外,传统的SMT增加了核心的面积/复杂度和功耗,而MorphCore利用了现有的结构,并没有增加面积/复杂性和功耗。Hily和Seznec观察到,当线程级别的并行度可用时,乱序执行就变得不必要了。

相反,在执行多线程工作负载时,MorphCore可以节省能源并提高性能。


7.5 低功耗处理器

Braids提供了使用顺序执行的资源达到类似ooo单线程的性能。然而,Braids并不适合这个软件,因为它需要预先进行复杂的编译/软件工作。相反,MorphCore不需要软件的努力,并且可以适应软件的需要。


8 结论

我们提出了一种从底层上设计的“MorphCore”架构,以提高单线程和多线程程序的性能和能源效率。当线程级并行度较低时,MorphCore作为高性能的乱序执行内核运行,当线程级别并行时,它是一个高性能的低功耗、高线程优化的SMT核心。我们对14个单线程和14个多线程工作负载的评估表明,相比于2路乱序执行核心、MorphCore增加了10%的性能,并将能量延迟面积成本(ED2)降低了22%。我们还发现,与激进的4路SMT乱序执行核、中等顺序执行核、小顺序执行核相比,MorphCore增加了性能并减少了ED2。它在性能(5%)和ED2(29%)的性能方面优于CoreFusion,这是一种可重构的核心架构。因此,我们建议MorphCore将作为一个有前景的方向,以提高性能、节约能源和适应工作负载多样性,同时要求对传统的乱序执行内核进行最小的更改。在未来,我们计划通过探索更好的在乱序执行和顺序执行模式之间切换的策略,并提供硬件机制来支持低功耗的单线程模式,从而进一步增强MorphCore。


感谢

我们感谢Carlos Villavieja,其他HPS研究小组的成员,Carlos Villavieja,我们的牧羊人,以及匿名的评论家们的评论和建议。

特别感谢Rob Chappell、Rob Chappell、Rob Chappell和Nikhil Patil进行了有益的技术讨论。

我们感激地感谢科克勒基金会和英特尔公司的支持。胡贝布得到了英特尔博士奖学金的支持。

编辑于 2020-12-31 15:43