摘要

人们一致认为,百亿亿次级系统应在20MW的功率范围内运行。因此,如果要实现这样的系统,节能仍然被认为是最关键的限制因素。

到目前为止,大多数关于该主题的研究都集中在功率封顶和动态功率管理等策略上。虽然这些方法可以降低功耗,但我们认为它们可能不足以达到E级能效目标。因此,我们的目标是采用嵌入式系统的技术,其中能效始终是基本目标。

嵌入式系统中使用的成功节能技术是将细粒度自动调谐与动态电压和频率调整相结合。在本文中,我们将类似的技术应用于实际的HPC应用程序。我们在HPC群集上的实验结果表明,与基线配置相比,这种方法可节省高达20%的能量,而性能损失可忽略不计。

研究介绍

为了提高能效,硬件供应商越来越多地采用嵌入式系统的技术。诸如去耦频域,动态电压和频率调节(DVFS),超低功耗状态以及融合CPU和FPGA的概念等特性表明了HPC和嵌入式系统正在融合的趋势。例如,最新一代的英特尔至强CPU不仅通过采用额外的内核或更宽的寄存器来提高性能,而且还包含一系列用户可控的开关[16,19,28]。访问这些开关使用户能够影响CPU的能量特性。在Haswell-EP和后续架构中,程序员可以操纵单个核心频率和非核心频率,即将核心连接到存储器控制器的环的频率[16]。这些用户可控制的硬件开关是嵌入式系统中节约能源的有效来源,而且它们越来越多地涌入HPC,这就引出了如何利用它们来提高能效的问题。

为了回答这个问题,我们研究了嵌入式系统,其中代码级的细粒度自动调谐与用户可控开关紧密集成已得到广泛研究。一个例子是System-Scenarios [10],其中创建了高度调整的系统配置,以便将底层硬件架构映射到应用程序行为。其他示例包括自我感知计算系统[18]和基于观察 - 决定 - 行为原则的系统[29],其中系统监视器为给定行为选择最佳硬件和软件配置。

无论采用何种方法,共同点都是平衡多种约束(如性能和能量)的任务。虽然这些方法中的一些被证明在嵌入式系统或其他领域中是成功的,但很少有应用于典型的HPC应用。因此,由于基本目标不同,无法保证这种方法在性能优先的环境中起作用。嵌入式系统通常在实时处理所需的期限限制下工作,而在HPC中,必须最小化解决方案的时间。

在本文中,我们将细粒度自动调整与用户可控制的硬件开关和线程相结合,并将此技术应用于单个计算节点上的真实HPC应用程序。该应用程序反复求解弹性波方程,以创建地球地下的地震图像。它主要受存储器限制,这使其成为具有去耦频域的CPU节能的良好候选者,其中核心频率可以按比例缩小以节省能量。

为了评估我们的方法,我们针对以下三个目标调整我们的应用:能量,能量延迟乘积(EDP)和能量延迟乘积平方(ED2P)。我们的总体结果显示,与参考实现相比,节能高达20%,运行时间仅增加3%。

因此,我们在本文中的主要贡献是:

  • 我们实施并测试了一种受嵌入式系统启发的节能方法,该方法将细粒度自动调谐的优势与用户可控制的硬件开关结合在一个计算节点上的实际HPC程序中进行应用。
  • 我们提供实验结果,并将参考实施方案与静态和动态调整的版本进行比较。
  • 我们评估了我们的方法在能耗-性能权衡方面的可行性。
  • 我们提供了启用和不启用AVX2矢量化的测试应用程序的能量结果。

本文中描述的工作是在READEX项目的背景下进行的,该项目旨在利用运行时的动态应用程序行为来实现节能的E级计算。

研究背景

本节简要概述了最先进的自动调节器,一些现代x86 CPU上的用户可控硬件开关,以及不同的能效指标。

现有的自动调优

自动调节器的主要目标是通过找到给定系统的调节参数的最佳组合来优化应用。调整参数的典型示例是编译器选项、环境设置和特定于应用程序的参数。在自动调整的上下文中,应用程序的生命周期通常在设计时和运行时中分开。实际的调优过程要么在设计时进行,要么在执行应用程序之前进行,要么在运行时进行,即在执行期间进行。这分别称为离线和在线调整。一些自动调优器支持这两种方法。

此外,自动调优器还可以提供静态或动态调整的支持。在前者中,为整个应用程序确定调整参数的最佳组合,而后者允许在运行时调整参数更改。通常,这需要将应用程序分解为更小的区域,从而实现细粒度调整。

自动调调优器的一个关键假设是,调整所花费的时间和精力由生产运行分摊。因此,长期运行的科学应用,例如天气模拟或地震建模,是自动调优器的理想目标应用。自动调优器的调研见第3节。

用户可控的硬件开关

动态电压和频率调节(DVFS)是一种常用的节能方法。在DVFS中,通过降低时钟频率实现节能,这会自动导致电源电压降低。

最近基于英特尔Haswell、Broadwell和Skylake架构的CPU除了提供传统的核心频率扩展外,还提供用户访问非核心频率调整(UFS)的功能。此外,这些CPU允许更改单个内核的频率,提供精细的粒度级别。对于Haswell CPU,每个内核的转换延迟为20μs。然而,由于存在切换窗口,实际切换时间实际上可达500μs。我们的测量表明,核心转换延迟均匀分布在100-600μs之间,证实了[16]的发现。我们发现UFS的转换延迟接近20μs,这与[12]中给出的数字相同。

通过基于温度、工作负载和空闲核心的数量监视启发式,CPU可以自动地将核心和非核心频率增加到超过其基频。这被称为睿频加速(turbo boost)[17],并且频率可以增加到最大超频。但是,AVX2矢量化代码使用消耗更多功率的AVX2单元,如果CPU以其基频运行,则会超过热设计功耗(TDP)。在这种情况下,CPU会忽略高于可保证频率的请求。表1显示了在我们的实验中使用的CPU在有和没有AVX2的不同turbo频率。为了用户选择的核心和非核心频率之间的可重复性和相关性,我们仅在保证频率的范围内运行。

报告能效

报告HPC能效的适当指标是一个备受争议的话题。一些研究人员更愿意报告能量(焦耳),而另一些研究人员更喜欢功率(瓦特)。但是,两者都是静态指标,无法捕捉能耗-性能权衡。能量延迟积( $ED^n$ )[11]是一种广泛使用的评估功率和性能的指标。该度量使用正整数 $n$ 将能量积 $E$ 与电路延迟 $D$ 相关联。简单来说,较低的EDP值表示功率更有效地转换为性能。因子 $n$ 表示性能的相对重要性,它通常设置为1,2或3,值更高表示更重视性能。

相关工作

能效是一个多元化的研究领域,从用于大型数据中心的功率降低技术到用于暂存内存的分析能量模型。这里我们只讨论HPC系统中自动调优器或DVFS调整的讨论,因为我们的工作重点是应用于实际HPC应用的能耗-性能权衡。

Autotuners

自动调优技术广泛应用于计算密集型应用程序和库[40],但也用于其他应用程序域[3]。我们提供了最新的和值得注意的自动调优框架和库。

Active Harmony [37]是一个自动调优框架,为调整应用程序提供特定于域的语言(DSL)。它执行离线和在线调整[39],但需要修改源代码。目前尚不清楚是否支持DVFS调优。

Periscope Tuning Framework(PTF)[34]是一个静态自动调优器,支持用户插件执行高效调优。它提供了一个执行DVFS的插件,并计划在不久的将来引入动态调整。MATE [26]和ELASTIC [24]自动调整器是唯一执行动态调整的调查框架,尽管仅限于MPI过程。与我们的方法相比,这是一种更粗粒度的方法。

目前已经提出了几种多目标自动调优器[1,14,21]。在这些系统中,用户指定多个调整目标,例如性能,能量,资源利用率或解决时间。据我们所知,目前可用的任何一个都不支持在现代HPC集群上使用DVFS进行多目标动态调整。

HPC中的DVFS

大量研究调查了在HPC环境中使用DVFS。一些专注于不同的能源性能指标[7],而另一些则为功率性能权衡提供了分析框架[4]。许多研究还探讨了功率/能量分析[9]和测量[31]的前景。以下研究将DVFS应用于大型集群上的一个或多个HPC应用程序。

Freeh等人[8]通过在由单核CPU组成的十个节点上使用来自NAS并行基准测试套件的应用程序,研究了HPC中的能量 - 时间权衡。他们发现,运行时增加3%可以在单个节点上将CPU的能耗降低20%。但是,目前尚不清楚这种结果将如何转化为现代多核CPU。

Li等人[22,23]开发了一个运行时库来探索Dynamic Concurrency Throttling或DVFS可能有益的区域。选择NAS并行基准测试套件中的MPI + OpenMP应用程序以及ASC Sequoia基准测试套件中的两个基于AMG的代理应用程序来评估他们的方法。其他运行时库,例如Cicotti等人的库[5],也在代理应用程序上对能源效率进行评估。与这些方法相比,我们使用核心和非核心频率已经线程数的动态调整,在实际HPC应用程序中找到最佳能量-性能权衡。此外,我们的能源监控以更高的分辨率进行。这提供了更准确的结果,并进一步深入了解HPC应用的能耗成本。

地震波传播

本节描述管理我们的应用程序的计算构建块以及关键实现细节。

弹性动力波方程

弹性动力波方程(1)及其源项 $f_i$ 在许多计算复杂的应用中构成了重要的支柱,例如先进的三维成像和地球地下的反演[27]。如果我们考虑各向同性弹性介质(2),$\Omega \subset \mathbb{R}^3$ ,由密度,$ρ$ 和Lamé参数 $λ$ 和 $μ$ 参数化,那么对于任何 $(x,t) ∈(Ω,T)$,其中 $T$ 是在时间间隔内,以 $Ω$ 传播的弹性波由下面的弹性动力波方程控制

用于计算弹性波的常用数值框架是3D笛卡尔网格上的交错网格显式有限差分方法。与其他[6,13]不同,我们采用标准的八阶16点模板进行空间近似,使用二阶模板进行时间近似。

使用OpenMP实现多核并行化

应用程序的主要计算流程可以分为两部分,如清单1所示。为简洁起见,未显示负责初始化组件的循环,例如压力和速度。但是,在这些循环中采用了第一次触摸(first touch)[38]来最小化与非统一内存访问相关的性能问题。

如(1)所示,微分器必须在计算速度( $v_i$ )和应力场( $σ_{ij}$)之前计算,如清单1所示。单次迭代中的内核具有数据依赖性,以及各个迭代之间的循环携带依赖性。总共,每次迭代计算25个不同的内核。清单2显示了用于计算 $x$ 方向速度的源代码。所有内核都类似于典型的模板计算,使得它们适合使用OpenMP进行共享内存并行化[35,36]。我们应用roofline模型[41]来更好地理解不同内核的性能界限。这需要通过将FLOPS的数量除以字节数来计算操作强度(OI)。微分器内核的OI为0.167,而速度和应力场的OI为0.250。当三个应力场核心在同一存储区域上迭代时,它们被融合以提高性能。各自的OI是0.286。

***我们对此应用程序调优的直觉是,对于低OI的程序内核,降低核心频率并增加非核心频率;对于高OI的程序内核,增加核心频率并降低非核心频率。挑战在于找到能效和性能下降之间的最佳关键点。***这需要仔细调整。

我们为波传播应用选择了三种不同的输入尺寸: $512^3$ (小), $768^3$ (中)和 $1024^3$(大)。这允许突出作为不同输入尺寸的函数的能量性能比。选择中等大小的输入是由于其内存对齐不良,导致AVX2矢量化代码的预期性能更差。所有计算都以单精度执行,因为这是足够的。

图1显示了使用24个核心和中等输入大小时参考实现的所有内核的运行时间。由于不合适内存访问,最慢的内核沿 $z$ 方向计算,导致循环迭代之间的步幅较大。

细粒度动态自动调优

图1没有显示哪个系统配置为各个内核提供了最佳性能,也没有显示给定调优目标的最佳系统配置。为了充分利用DVFS提供的功能,我们需要单独调整每个内核。当前的静态自动调优器并没有为我们提供这种级别的粒度,即使他们这样做,只有细粒度自动调优也是不够的。此外,还需要一个可以为每个内核应用最佳系统配置的运行时系统。据我们所知,目前还没有这种具有完整端到端管道的工具链。

为了解决这个问题,我们开发了一个自定义调优设置,让我们可以调整每个内核。我们的方法主要包括使用C ++预处理程序指令,它们封装每个内核,允许单独调整它。除了在每个指令中启用硬件调优之外,我们还同时记录每个内核的运行时和时间戳。时间戳稍后用作基于FPGA的能量测量基础设施的偏移量,在第6节中有更详细的描述。

使用C ++预处理程序指令意味着我们避免更改实际的代码库,这很重要,因为此工作中的应用程序是在日常生产中。它还允许我们通过在编译时传递适当的参数来方便地访问不同的代码版本。

对于实际的调整,我们使用一个小的bash脚本来遍历所需的调优向量。然后将调整结果存储到磁盘。调整完成后,生成的数据集将被提供给Python后处理工具,后者充当推荐系统。Python工具的任务是自动为每个单独的内核找到线程、核心和非核心频率的最佳组合。此外,与其他版本的代码相比,它还计算能源-性能权衡。

根据用户选择的调优目标,Python工具生成适当的编译标志,包括必要的预处理器指令。然后重新编译代码,最终结果是动态调整的代码版本。整个工作流程如图2所示。清单3显示了每个预处理器指令内的内容。

出于实验评估的目的,我们创建了三个版本的代码,我们将其称为:reference,static和dynamic。前一版本只是代码的默认生产版本,即不应用自动调整。当使用测试系统的所有24个内核执行参考实现时,核心以2.5GHz运行,而非核心频率为3.0GHz。

Static是指静态调整的代码版本。为了完整起见,使用穷举搜索算法对以下三个调整向量执行静态调整:核心频率,非核心频率和OpenMP线程数。在本文的其余部分,我们将使用以下表示法表示不同的系统配置:core |uncore | thread。因此,1.7 | 2.2 | 24对应于核心频率为1.7GHz,非核心频率为2.2GHz并且线程数为24的系统配置。

我们还搜索了比reference版本使用的标志更好的编译器标志,但是这次搜索表明最好的编译器标志-O2 -qopenmp -ipo已经被reference实现使用了。

在dynamic(即动态调整的代码版本)中,25个计算内核中的每一个都针对上述调整参数单独调整。与静态调整一样,穷举搜索算法用于为每个内核找到最佳系统配置。搜索算法的选择是由易于掌握的事实推动的。例如,更好的搜索算法将是依赖于特定领域的能量模型,如[2]中描述的能量模型,可以预测每个程序内核的核心和非核心频率的最佳组合。这样的预测会大大减少搜索空间,只有少数替代方案可以通过测试或仔细分析找到。

调整过程完成后,推荐系统将为给定的调整目标函数选择最佳系统配置。作为示例,让我们考虑调整目标是ED2P的情况。然后,推荐系统将为具有最低ED2P编号的每个内核选择系统配置。其他调整目标使用相同的过程。

此外,在动态调整版本中,找到的最佳DVFS设置应用于主计算循环内部和每个内核,与静态调整版本相反。使用静态调整时,在应用程序启动后最优的DVFS设置仅应用一次。可以通过将迭代次数与内核数量相乘以及核心和非核心频率缩放的开销来计算总动态DVFS开销。

表2示出了当调整目标函数是能量时动态调整版本用于中等问题大小的最佳找到的系统配置的示例。最好的静态配置是1.7 | 2.3 | 24。

对应用AVX2指令的代码的矢量化版本重复相同的调整过程。程序是相同的,除了矢量化版本还使用以下编译器标志:-O3 -axCORE-AVX2。在矢量化版本中,-O2标志被丢弃。与非矢量化版本不同,矢量化参考实现分别针对核心和非核心以2.1和2.8 GHz运行。

实验平台

对于我们所有的实验,我们使用位于德国德累斯顿工业大学(TUD)的Taurus [33]集群。由1456个同类计算节点组成的大型分区配备Haswell-EP CPU。表3提供了Taurus计算节点的信息。对于核心和非核心时钟频率,我们参考表1。

因为每个计算节点都是直接水冷的,所以没有电力用于冷却。这样可以更轻松地报告整个计算节点的精确能量结果。此外,每个计算节点都使用高清能效监测(HDEEM)基础设施[15]进行检测。通过为每个计算节点配备FPGA,可以在不中断CPU的情况下监控各种组件(如CPU,内存模块和计算节点本身)的能耗。这种方法的好处很多,但出于我们的目的,两个最重要的特征是高精度(报告的最大错误率为2%)以及能够分析具有高空间和时间粒度的单个代码区域(1 kSa / s))。

Taurus集群的另一个重要特性是能够在Haswell-EP分区中使用DVFS。为此,我们使用了低级x86_adapt [30]库。清单3显示了x86_adapt和HDEEM如何在我们的代码中用于DVFS和能量插桩。

实验结果

在本节中,我们给出了以下三个调谐目标函数的实验结果:能量,EDP和ED2P。我们不会调整运行时,因为找不到比我们的应用程序的参考实现更好的系统配置。换句话说,除了最大线程数之外,当以最高核心和非核心频率执行应用程序时,达到了最高性能。

虽然完整生产运行(full production run typically)通常包含1000次或更多次迭代,但是没有必要运行超过五次迭代来评估调优目标函数,因为迭代具有基本相同的运行时间。由于生产运行所需的迭代次数随着问题的大小而增加,因此相比之下调整的成本会变得更小。本节介绍的结果基于五次迭代。它们测量整个计算节点的能耗,包括CPU,DRAM,存储等。

参考实施的性能

我们首先介绍参考实现的性能,以便在呈现静态和动态调整的实现结果之前建立基线。我们使用每秒Mega Lattice Site Updates(MLUP)作为我们选择的性能指标。可以通过将网格点的数量乘以迭代次数除以运行时的秒数来计算MLUP的数量。

图3(a)和3(b)显示了参考实现的性能扩展,它是OpenMP线程数量的函数,有或没有向量化。如前所述,我们的应用程序本质上是内存限制的,这解释了当跨越12核(单插槽)边界时性能的提高。附加插槽的主要好处在于它添加到系统的附加内存通道,从而带来更高的内存带宽。我们还观察到,对于所有问题大小,当使用所有24个核时,可以实现最高性能,并且看起来内存带宽永远不会饱和。通过选择线程亲和性来解释此行为。我们使用紧凑而不是散射。运行众所周知的STREAM Triad基准测试时观察到类似的曲线[25]。

回忆第5节,参考实现的非矢量化版本的工作频率为2.5和3.0 GHz,矢量化版本的工作频率为2.1和2.8 GHz。我们观察到,尽管以较低的频率运行,但所有矢量化实现都提供与非矢量化版本类似的结果。

能耗优化

图4(a)显示了调整能量时不同问题大小的结果。无论采用何种方法或实现(矢量化/无矢量化),与高度优化的参考实现相比,静态和动态调整都可以节省大量的能量。在图4(a)中(从最小到最大的问题大小),动态调整版本消耗的能量减少了20.35%,24.28%和21.28%,运行时间分别增加了10.85%,12.91%和10.11%。对于矢量化版本,动态版本消耗的能量减少了13.19%,14.39%和21.28%,与参考实现相比,运行时间增加了9.16%,9.32%和18.49%。此外,在所有情况下,与动态版本相比,静态调整版本平均消耗1.97%的能量,运行时间增加3.56%。

动态调整版本只能以小幅度打败静态调整版本的原因仅仅是由于高DVFS开销。如前所述,静态调整版本的优点是在执行主计算循环之前只调用一次DVFS。然而,在动态调整的版本中,DVFS函数被放置在计算循环内,并且对于每个内核和每次迭代都被调用一次。由于我们知道DVFS开销,因此我们可以将其从运行时中排除,以创建一个理想的场景,其中DVFS的开销几乎是可忽略的。该版本构成潜在节能的上限。通过将动态调整版本与理想情况进行比较,我们发现DVFS开销达到10-50%,具体取决于内核运行时和DVFS交换窗口内开关的位置。实际上,这意味着对于当前的Haswell-EP微体系结构,为运行时间较短的内核执行DVFS可能不值得。我们考虑确定要调整哪些内核作为未来工作的任务,并期望这将增加动态调优的好处。

EDP优化

图4(b)显示了各种实现和问题大小的EDP值。与非矢量化参考实现的EDP值相比,当模型大小分别为 $512^3$, $768^3$ 和 $1024^3$ 时,动态调整的版本将EDP值降低16.11%,18.59%和16.78%。对于矢量化实施,EDP的减少(从小规模到大规模)9.24%,9.98%和3.09%。平均而言,与静态调整版本相比,动态调整版本将非矢量化实现的EDP降低4.23%,矢量化实现降低4.45%。

我们观察到,对于最大的模型大小,如果实现是矢量化的,则最佳静态调整配置与参考实现相同。对于相同的问题大小,此行为类似于图4(a)中观察到的行为。通常,与非矢量化实现相比,矢量化实现的系统配置之间的差异较小。这表明,为矢量化实现运行具有次优系统配置的内核比非矢量化版本更昂贵。其原因在于AVX2操作比传统指令更耗电。但是,由于动态调整的版本运行具有最佳系统配置的所有内核,因此会减少此类能量溢出,这是静态调整版本无法实现的。

ED2P优化

ED2P比EDP和能源目标更注重性能。图4(c)显示了各种实现和问题大小的ED2P值。对于非矢量化实现,我们的ED2P值继续与EDP数据首次观察到的趋势相同,不同之处在于动态调整版本与静态调整版本之间的差异现在更大。对此的解释仅仅是因为最好的静态系统配置与参考实现非常接近或完全相同。虽然同样的情况也适用于动态调整版本,但有些内核支持与默认版本不同的系统配置。

在将动态调整版本与参考实现进行比较时,ED2P的降低为13.51%,15.40%和14.00%。此外,与静态调整版本相比,动态调整版本平均将ED2P值降低了6.42%。

对于矢量化实现,动态调整版本将ED2P值降低了7.15%,15.40%和2.12%。与静态调整版本相比,动态调整版本的ED2P值减少了4.87%,这超过了其他两个目标函数的减少量。

多节点调优

我们工作的重点是单个节点的动态调整,即使所提出的应用程序在设计时考虑了多个节点。需要对单个节点获得的理解,以便解决由于多个进程及其通信而导致的分析多节点代码的增加的复杂性。

我们预见多个进程的引入会以两种重要方式影响我们的工作。首先,与核心频率缩放不同,每个核心以不同的频率运行,非核心频率缩放只能在每个插槽的基础上执行。这意味着我们的代码的多节点实现应该优选地基于混合MPI + OpenMP编程模型。此外,为了避免应用动态设置的竞争条件,应该仅使用每个节点的单个MPI进程启动应用程序。每个进程中只有一个线程负责应用DVFS设置。

其他研究人员开发了用于多节点调优的通用框架[24],它依赖于使用代理来协调调优过程。通常,为代理分配额外的计算节点。但是,我们计划实施特定于域的方法,其中利用位于分区域边界和域中心的MPI进程之间的负载不平衡。

位于边界上的进程具有更轻的工作负载,而位于域中心的进程计算全局域的更大部分。这意味着应用程序性能由域中心的进程主导,并且边界进程的核心和非核心的减少可能潜在地节省能量。

结论

在当今的超级计算领域和未来系统方面,节能仍然是一项关键挑战。幸运的是,随着现代多核架构上用户可控制硬件开关(如动态电压,核心和非核心频率缩放)的不断增加,程序员现在可以调整其应用程序,以提高能源效率。

到目前为止,现有工具通常依赖于静态调整,最终目标是找到“一个系统配置适合所有”的方法。但是,我们认为这种粗粒度方法的缺点是它无法将应用程序的快速变化的计算行为考虑在内。相反,我们提倡更细粒度的方法,每个单独的程序内核都被调整,所有内核都以最佳设置执行。

我们开发了一个自定义动态调整设置,通过执行少量试运行,自动为不同的计算内核找到最佳系统配置。一旦测试了不同的配置,推荐系统就会为不同的内核建议最佳设置。建议是基于用户指定的目标函数确定的,因此可以根据要求进行更改。接下来,重新编译应用程序,以便在运行时将建议的系统配置映射到其对应的内核。最终结果是动态调整的应用程序,可以使用节能系统配置设置进入生产。

为了量化我们的调整框架对能量性能的影响,我们将其应用于长期运行的地震波模拟器的两个版本。在一个版本中,代码是矢量化的,而在另一个版本中,代码不是矢量化的。根据型号尺寸,我们的总体结果显示,与相应的参考实施相比,最多可节省20%的成本,最多可降低3.5%的性能损失。

到目前为止,许多针对多核架构的性能程序员已被建议对其代码进行矢量化以提高性能和能效。虽然这个建议仍然存在,但我们已经证明,使用更精细的调整可以解锁新的能效水平。由于AVX2指令更耗能,因此与非矢量化版本相比,运行具有次优系统配置的应用程序的成本更高。

基于此,未来的工作有几个不同的方向。一个方向是自动识别不需要调优的程序内核。在这里,我们计划使用一个工具执行一系列分析,以评估不同内核及其运行时的操作强度。执行DVFS与开销相关联,并且必须考虑这种开销,以便我们仅在内核上调整和执行DVFS,这对整体性能-能量比有很大贡献。此外,令人鼓舞的结果促使开发工具套件以完全自动化整个工作流程。这与READEX项目[32]目前正在进行的工作一致。我们相信借助此工具,我们可以更轻松地将当前的方法扩展到其他应用程序和体系结构。