基于任务点的加速仿真

摘要

  • 采样模拟是减少单线程程序模拟时间的成熟技术。
  • 当前的采样技术并没有利用其他执行模型,如基于任务(Task)的执行。
  • 当前的多线程采样技术假设分配给每个线程的工作负载在程序的多次执行中不会改变,但这种假设不适用于动态调度的基于任务的编程模型。
  • 本文提出了TaskPoint,一种用于动态调度基于任务的程序的采样模拟技术。
    • 我们利用任务实例作为采样单元,只对所有任务实例的一小部分进行详细模拟。
    • 在详细的模拟间隔之间,我们采用了一种新的快速转发机制来动态调度程序。
    • 我们评估了用于对任务实例进行聚类的不同自动技术,并表明DBSCAN聚类与分析性能建模相结合可以在仿真速度和精度方面提供最佳的权衡。
  • TaskPoint是首个将采样仿真和分析建模相结合的技术。与详细(detailed)模拟相比,TaskPoint使用8个模拟线程加速了架构模拟,平均误差为0.5%,最大误差为7.9%,平均加速为220倍。

简介

  • 现代多核处理器中设计复杂性和核数的不断增加给体系结构仿真带来了新的挑战

    • 未来系统中状态保持元素(例如高速缓存)的数量不断增加,往往会增加模拟系统执行给定工作负载所需的时间
    • 更大的缓存可能需要更多的(详细)模拟来预热微体系结构状态
    • 具有更高线程数的设计还会降低详细模拟的速度,尤其是当模拟线程相互交互时
  • 减少模拟时间的一种流行技术是采样

    • 采样模拟通过仅详细模拟工作量的一小部分来减少模拟时间
    • 采样是一种成熟的单线程体系结构模拟技术,针对多线程应用程序的技术最近才被提出
      • 多线程程序采样模拟的主要挑战是确保在每个详细模拟间隔开始时,所有线程都取得了与完整详细模拟相同的进度
    • 基于任务的编程模型允许程序员将程序定义为多个任务,并指定这些任务之间的依赖关系
      • 任务通常在程序执行过程中多次实例化
      • 过度分解确保了任务实例比执行线程多得多
      • 将并行程序 过度分解 为任务,再将任务实例动态调度到线程,可以透明地平衡分配给每个线程的工作量
      • 任务间依赖关系仅在必要时强制同步
  • 这项工作提出了TaskPoint

    • 这是一种用于在多核机器上执行的基于任务的动态调度程序的采样模拟方法。
    • TaskPoint将任务实例作为采样单元,并且仅对其中的一小部分进行详细模拟。其他任务实例以更快的模拟模式进行模拟,确保不同模拟线程中的程序得到正确建模

本文贡献如下

  • 提出了一种机制,可以准确快速地对基于任务的程序进行体系结构模拟
  • 结合了分析模型的速度和详细模拟的准确性
  • 证明了结合分析建模的DBSCAN在低误差方差下提供了加速比和误差的最佳组合

背景和动机

  • 在共享内存系统的传统并行编程模型中,程序员将应用程序显式分解为并发指令流,并管理它们之间的同步。
    • 这些指令流由不同的线程同时处理,多线程程序的一个常见问题是负载不平衡
    • 不同线程在不同的时间点到达同步点时,就会发生负载不平衡
    • 基于任务的编程模型有可能缓解负载不平衡,从而提高并行效率
  • 在基于任务的编程模型实现的并行程序中,程序员将程序分为多个任务,并且可以指定这些任务之间的数据依赖关系
    • 在程序执行过程中,任务被多次实例化,形成大量任务实例
    • 每个实例对不同的数据进行操作
    • 运行时系统动态地将任务实例调度到执行线程
    • 任务实例的数量通常远远大于执行线程的数量(由于细粒度的过度分解)
  • 通常认为源代码中相同任务声明语句产生的所有任务实例都具有相同的任务类型
    • 任务类型的数量最多可达几十个
    • 任务实例的数量则在几万到几十万之间

基于任务的程序的性能变化

  • 配置信息:
    • 运行方式:原生执行
    • CPU:SandyBridge-EP E5-2670 CPU @ 2.6 GHz
    • 运行内存:128 GB DDR3-1600

在这里插入图片描述

  • 我们将所有任务实例的IPC规范化为各自任务类型的平均IPC,设为0,其余数值表示该IPC与平均值相比增加或减少的百分比。将IPC的数值进行排序,并用:
    • 实心方框表示第25%到75%的归一化IPC值
    • 细线则从第5%到第95%的归一化IPC值
    • 其余的IPC值被视为异常值
  • 可见:相同任务类型的实例可能表现出显著的性能变化(fft,merge sort等)
  • 在常规(regular)应用程序的模拟中,TaskPoint根据实例的任务类型判断它们是否为彼此的样本。
  • 在非常规(irregular)应用中,我们应用基本块向量(BBV)和聚类来识别具有类似行为的任务实例类别,使用从分析性能模型获得的性能预测来细化结果。

识别代表性任务实例

  • 图1中每个任务类型的性能规律性的表明,对于许多应用程序,相同任务类型的任务实例在性能方面表现相似(后续表格中可以看到这些IPC变化极小的基准都只有一个任务类型)
    • 可以合理地假设,在这些情况下,相同任务类型的实例可以作为彼此的性能样本
    • 然而,一些基准暴露了任务实例之间的显著性能差异

  • BBV被用于描述工作负荷的各个阶段,并确定具有代表性的工作负荷区域。
    • BBV是一个向量,它的维数与模拟应用程序中静态基本块的维数相同。每个维度包含在特定时间间隔内相应基本块执行的动态指令数。
    • 在这项工作中,我们为每个执行的任务实例评估一个BBV

在这里插入图片描述

  • 图2a示出了不使用BBV、聚类和分析建模而创建的任务点。
    • 该图显示了归并排序(merge sort)算法中两种任务类型的BBV,它们被投影到二维平面中
    • 在归并排序的递归阶段,每个任务实例创建两个子实例,它们属于不同的任务类型,但由相同的静态代码组成。当递归终止时,上一代任务实例的行为将发生更改
      • (i)图2a中两个任务类型分别形成两个不同任务实例集群
      • (ii)左上部分的任务实例集群具有相似性,右下部分的任务实例集群具有相似性
    • 总之,属于同一任务类型的实例可以表现出不同的行为,而属于不同任务类型的实例可以具有相同的行为
      • 如果将一个任务类型的两个集群视为表现出相同的性能,则在归并排序中会导致超过40%的模拟误差
      • 在一种任务类型中观察到的每个集群与另一种任务类型中的集群相似,导致在采样模拟期间重复工作
  • 图2b显示了TaskPoint如何使用BBV和集群来检测非常规应用程序中的任务实例类。
    • 我们为每个任务实例创建一个BBV。
    • 如果两个任务实例的行为相似,则它们通常具有相似的BBV
    • 具有不同行为的任务实例也可能具有不同的BBV
    • 该图使用了两种聚类算法
      • k-均值倾向于将不规则形状的簇分割成许多子簇。
      • DBSCAN由其他任务实例密集区域连接的任务实例被聚集在一起。DBSCAN用于检测并行应用程序中的相关计算阶段。
    • DBSCAN检测到的簇可以具有大直径。预测同一集群中较远的任务实例的性能,可能会引入模拟误差。
    • 我们利用分析模型的相对精度,在模拟过程中纠正这一误差。
      • 经验模型通过机器学习技术(例如,支持向量机或人工神经网络)捕获系统的行为。虽然它们可以获得很好的精度,但它们并没有提供太多内部信息来解释为什么某个设计比另一个设计获得更好或更差的性能
      • 机械模型采用数学公式来模拟关键结构参数对性能的影响。机械模型允许通过比较模型公式中不同项的贡献来研究性能特别好或特别差的来源。由于它们提供了对性能来源的更多洞察,在这项工作中,我们使用了机械性能模型。
  • 本文采用 Van den Steen 等人提出的分析性能模型
    • 该模型是区间模拟的扩展,用独立于微架构的应用程序配置文件替换区间模拟的微架构相关输入,并使用缓存、分支预测器和内存级并行 (MLP) 的分析模型生成模型输入的微架构相关元素。
    • 缓存使用StatStack建模,这是一种用于对任意大小的 LRU 缓存进行建模的技术。
    • 分支预测器使用线性熵模型建模。MLP,即DRAM子系统可以并行服务的内存访问次数。

对基于任务的程序进行采样仿真

架构模拟器的要求

  • 我们的目标是为基于任务的程序提供一种抽样模拟方法,该程序不依赖于特定架构的模拟器(specific architectural simulator)
  • 我们对目标模拟器的要求
    • 1)模拟器需要具备详细、预热和快进模拟模式
    • 2) 快进模式必须能够在用户指定的IPC上模拟每个线程

集群任务实例

  • 在常规应用程序中,TaskPoint根据任务类型对任务实例进行集群。
    • 同一个任务类型(用户定义)的实例执行类似的计算,进行集群。
    • 如果程序在一个任务类型中表现出不同的行为,TaskPoint会将它视为一个已仿真的行为相似的任务类型的实例(TaskPoint identifies classes of task instances with similar behavior prior to simulation)
    • 将任务类型不同的行为相似的实例合并到同一集群中
  • 使用TaskPoint进行模拟所需的详细模拟量随着应用程序的任务实例集群数量的增加而增加。为了最大限度地提高仿真性能,需要找到保持高仿真精度的最小簇数。
    • DBSCAN通常报告比其他技术(例如k-means)更少数量的集群。
    • 这些集群可以不规则地成形。
    • 然而,同一集群的任务实例可能具有不同的性能。
  • 我们通过确定从分析模型中获得的任务实例性能因子(这里应该指预估的 IPC),将对模拟误差的潜在影响降至最低。

分析建模

  • DBSCAN可以将行为相似但不同的任务实例放到同一集群中。因此,在详细模拟中观察到的任务实例的性能可能无法代表集群的所有任务实例。
  • TaskPoint采用分析性能模型来确定更准确的性能结果。
    • 首先,我们生成仿真程序的概要文件。此概要文件包括作为分析模型输入所需的与微体系结构无关的性能指标。与BBV一样,每个应用程序只生成一次此概要文件。
    • 在仿真过程中,我们用分析模型来预测所有仿真任务实例的性能。每个仿真的应用,每个架构配置只需进行一次评估。仅更改仿真线程的数量并不一定需要重新评估模型。
  • 我们使用从分析模型获得的性能信息如下:
    • 假设两个任务实例i和j属于同一个集群
      • 已经对 i 进行了详细模拟
      • 将要对 j 进行快速转发模拟,
    • 将 i 作为性能样本
    • 设 IPCi,m 和 IPCj,m模型预测的任务实例i和j的IPC
    • 设IPCi,d 是 i 在详细模拟中测得的IPC
    • 用IPCj,ff表示预估j在快速转发模式下的IPC,则: I P C j , f f = I P C i , d I P C j , m I P C i , m IPC_{j,ff}=IPC_{i,d}\frac{IPC_{j,m}}{IPC_{i,m}} IPCj,ff=IPCi,dIPCi,mIPCj,m

采样机制

  • TaskPoint在任务实例的粒度级别上运行。
  • 任务实例可以在warming、detailed或fast-forward模式下进行模拟。
  • 仅在两个连续的任务实例之间切换不同的模式。

在这里插入图片描述

  • 对于每个任务集群,我们维护两个向量来保存最近模拟的任务实例的IPC。
    • 这些向量的大小H是一个称为历史大小的参数。
    • 这两个向量都是FIFO缓冲区,其中新添加的元素替换最旧的元素。
      • 第一个向量包含作为有效样本的任务实例的历史,即在预热架构状态后模拟的任务实例。我们将其称为有效样本的历史记录
      • 第二个向量保存在详细模拟下仿真的所有任务实例的历史记录,而不管模拟是否正确预热(预热缓存用的也是详细模拟)。我们将其称为所有样本的历史记录
    • 我们通常用前者来确定在快进模式下使用哪个IPC的样本历史记录。
    • 后者在任务集群的实例不经常发生,并且无法在单个采样间隔内进行采样时使用。我们称这些为罕见任务集群
  • 在多线程应用程序中,共同运行的线程可能相互干扰,例如,通过竞争共享资源、线程间同步或使远程缓存中的数据无效。
  • 为了正确地建模不同线程之间的争用,我们(尽可能同时)以详细模式或快进模式模拟所有线程。
  • 由于我们让模式切换只发生在两个连续的任务实例之间,因此存在一些短阶段,在此期间,一些线程以快进模式进行模拟,而其他线程则以详细模式进行模拟(请参见图3中的t2、t3和t5)。
  • 预热:在进行性能测量之前,需要对模拟进行预热,即需要将其置于代表性状态。
    • 我们通过对(用经验确定的)若干任务的实例详细模拟来预热,避免复杂的预热方案,将重点放在关注抽样方法本身。
    • 当模拟预热的任务实例完成时,其IPC将添加到所有样本的历史记录中。
    • 在模拟开始时,所有模拟的微建筑结构都处于初始(冷)状态。
    • 在详细模拟过程中,状态保持元素开始填充,直到占用达到稳定状态。
      • 我们假设在模拟开始时每个线程模拟W个任务实例足以将模拟器置于代表性(热)状态。
      • 我们将W称为预热间隔的大小。
    • 在快进模式下模拟后,微体系结构状态已过时。在对模拟进行重新采样之前,需要进行预热以确保微体系结构状态(大致)与详细模拟整个程序时的状态相同。
    • 在重新采样之前,我们执行详细模拟,直到每个线程都详细模拟了一个任务实例。
  • 采样:与模拟预热一样,采样在详细模拟模式下执行。
    • 预热完成后,我们开始将模拟任务实例视为有效样本
    • 当有效样本任务实例完成模拟时,其平均IPC将添加到 有效样本 的历史记录 所有样本 的历史记录中。
    • 当满足以下两个条件之一时,我们切换到快进模式:
      • 1) 有效样本的历史记录已完全填充(已经对所有任务集群进行充分采样)
      • 2) 已经模拟了一定数量的任务实例,罕见任务集群的任何其他实例(避免在存在罕见任务集群的情况下,在详细模拟上花费过多的时间)
    • 与样本历史的大小H无关,当所有线程都模拟了5个任务实例而没有遇到(其他未采样的)任务集群实例时(without encountering any additional instance of a partially sampled task cluster),我们将切换到快进模式。
  • 准确快速转发:切换到快进模式后,将在快进模式下模拟后续任务实例。然而,当前正在模拟的实例仍然以详细模式进行模拟。
    • 进入快进模式期间(以详细模式)完成模拟的任务实例仅添加到所有样本的历史记录中(Task instances finishing simulation after the transition to fast-forwarding mode are only added to the history of all samples)。
    • 用集群有效样本历史的平均IPC估计快进模式下模拟的任务实例的IPC(A task instance simulated in fast-forwarding mode is simulated with the average IPC of the history of valid samples of its cluster)。
    • 如果一个任务实例属于一个罕见任务集群,其有效样本的历史记录为空,那么我们将使用所有样本历史记录的平均IPC; 如果相应集群的所有样本的历史记录也为空,我们将触发重采样(专门采样罕见任务集群)。
      • 属于罕见任务集群的实例往往在应用程序执行期间不经常出现。它们只占应用程序总指令数的一小部分,用于不频繁的任务,例如设置和删除数据结构。
      • 我们发现使用非代表性样本快速模拟罕见任务的影响可以忽略不计。

周期采样策略

  • 采样策略决定何时对以快进模式运行的模拟进行重新采样

在这里插入图片描述

  • 图4a所示的周期性采样策略在仿真开始时进行预热和采样。然后,它切换到快进模式。当一个线程以快进模式执行任意集群的多个(P个)任务实例后,将对模拟进行重新采样。

    • 我们将参数P作为采样周期
    • 对模拟重新采样时,将丢弃有效样本的历史记录条目(所有样本的历史记录中仍然有相应数据)(When a simulation is resampled, the entries of the history of valid samples are discarded)。
    • 重新采样完成后,模拟将返回到快进模式,并重复该过程。
  • 模拟加速比由采样周期的大小决定。

    • 采样周期越大,在快进模式下模拟的任务实例越多。
    • 在无限采样周期的特殊情况下,采样策略不会触发重采样。我们将这种情况称为延迟采样。
  • 延迟采样如图4b所示。

    • 如果程序的任务实例数量太少或采样周期太大,则在任何线程模拟P个任务实例之前,模拟将在第一个快进间隔期间完成。在这种情况下,定期采样等效于延迟采样。
  • 当无法在快进模式下准确模拟任务实例时,同样会触发重采样:在这里插入图片描述

    • 图5a示出了参与任务执行的线程数量在运行时发生变化的情况
      • 当执行线程的数量发生变化时,共享资源(如共享缓存和主内存)上的争用也会发生变化。这会影响每个线程的性能,并使以前测量的样本无效
      • 重采样避免了非代表性样本导致的预测错误
    • 图5b示出了在快进模式下进行模拟时遇到新任务集群(罕见集群)的首个实例的情况
      • 此时该任务实例的IPC历史记录为空,无法在快进模式下准确模拟此任务实例。
      • 我们通过触发重采样来避免这个问题。
  • 通过这种重采样策略,周期采样和延迟采样都可以解释应用程序中的相位变化。

    • 如果从新集群的任务实例开始一段新语句,则会对模拟进行重采样。
    • 可用计算资源或可用并行性的发生变化后也会触发重新采样。

实验配置

本实验在两种架构下测试了27个基准

OmpSS 编程模型

对于我们的评估,我们选择OmpSs编程模型[3]。OmpSs编译器和运行时环境可以作为开源软件提供。OMPS允许声明任务并使用数据输入和输出对其进行注释。使用此信息,OmpSs运行时系统会在考虑数据依赖关系的情况下调度任务实例,并仅在必要时同步。这些OMPS功能是OpenMP 3.0和4.0规范的一部分。

基准

在这里插入图片描述
表1列出了我们评估中使用的基准。它们表示各种工作负载,并使用OmpSs编程模型实现。
该表还列出了使用本文提出的两种技术时每个基准的模拟时间,即基于k-means的任务实例聚类(KMEANS)和结合分析性能建模的DBSCAN聚类(DBS+MOD)

架构

在这里插入图片描述
我们通过研究两种不同多核架构的多线程仿真的仿真加速比和执行时间误差来评估我们方法的保真度。一个类似于服务器级系统,另一个类似于低功耗移动平台。表2列出了模拟架构的关键特性。高性能体系结构的特点是大的重新排序缓冲区和三级缓存层次结构,如HPC系统中所示。低功耗架构具有较小的重新排序缓冲区和两级缓存,这是电池供电移动系统的典型特点。最近,低功耗系统在HPC中的应用越来越受到人们的关注。我们使用相同的参数进行仿真和分析性能建模。

TaskSim模拟器

  • TaskSim是一种用于多核体系结构的周期精确、跟踪驱动的性能模拟器
  • 它与OmpSs运行时系统进行交互。
  • 运行时系统调度模拟应用程序的任务实例,以便在模拟处理器内核上执行。
  • TaskSim具有详细和快速转发模式。详细模式基于Lee等人提出的有序缓冲区占用分析模型。
    • 在详细模式下运行时,TaskSim会模拟用户定义的内存层次结构,包括专用和共享缓存、互连结构和DRAM。
    • 在快速转发模式(突发模式)中,TaskSim只考虑事件之间的CPU周期数,在我们的例子中,是任务实例执行开始和结束之间的CPU周期数。
  • 在现有实现中,TaskSim从应用程序跟踪中读取任务实例的周期计数。这是在用于跟踪生成的系统上执行任务实例所需的周期数。
  • 然而,我们的快速转发机制在模拟开始时计算任务实例的持续时间。利用任务实例 i 所属的任务类型或集群T的样本历史的平均IPC及其动态指令计数 Ii,我们根据 C i = I i I P C T C_{i}=\frac{I_i}{IPC_T} Ci=IPCTIi估计其执行周期数Ci。结果是在IPCT(实例任务类型的平均IPC)的IPC上执行任务实例所需的周期数。从应用程序跟踪读取动态指令计数。
  • 在这项工作中,我们扩展了TaskSim,使其能够在预热、详细和快速转发模式之间切换。
    • 我们的快进模式实现使用快进机制预测的周期计数,而不是使用跟踪中先前记录的周期计数。
    • 据我们所知,这是第一例将不同IPC应用于基于任务的程序的不同任务实例的快速转发机制。
    • 我们的机制允许快速转发动态调度的并行程序,其中每个线程的指令流是先验未知的。

评估

结果概览

在这里插入图片描述

  • 图6给出了表2中介绍的两种架构模拟结果的概览
  • 采样结果由8线程仿真得出,并在下一节中用于确定我们使用的采样参数
  • 该图显示了聚类算法的误差和加速比
    • 基于任务类型(TP)
    • 使用k-means(TP+KMEANS)
    • 使用DBSCAN(TP+DBS)和使用结合分析建模的DBSCAN(TP+DBS+MOD)
  • 误差是完整详细模拟使用TaskPoint的模拟之间的相对执行时间差
    • 该图清楚地表明,k-means聚类比仅使用任务类型改善了模拟误差,但代价是模拟性能较差
    • DBSCAN单独实现了最高的仿真性能,但仿真误差较大
  • 我们利用分析建模的相对精度,在每个聚类的基础上纠正此错误,有效地将详细模拟的精度与分析模型的速度结合起来。
    • 这种方法将8线程的模拟误差平均减少到0.46%,最差情况下减少到7.9%。
    • 220x的模拟加速比仅DBSCAN慢2.3%,但比基于任务类型的聚类快11.7%,比k-means快77.5%。
  • 总的来说,具有分析建模功能的DBSCAN在低仿真误差和低误差方差的情况下实现了高仿真速度,在仿真速度和复杂度之间提供了出色的权衡。

评估模型参数

在这里插入图片描述

  • 我们采用增量方法确定最佳预热和采样参数。
    • 首先,我们确定模拟开始时预热所需的最佳任务实例数(W)。
    • 然后,我们考虑构成样本历史(H)的不同数量的任务实例。
    • 最后,我们探讨了采样周期(P)的一系列值。
  • 我们的结果表明,模型参数一旦确定,就可以应用于不同的聚类技术,而不会显著增加模拟误差。
  • 我们还考虑了动态确定采样参数的方法。这种更复杂的技术在模拟误差和加速方面取得了类似的结果,但却大大增加了复杂性。
  • 为了确定W的最佳值,我们设定H=10和P=∞,并评估从W=0(无预热)到W=10的不同值。
    • 图7a显示了用32和64个线程模拟时,对比全详细模拟产生的平均误差和加速比。报告的数值是在若干基准和内核上的平均,这些内核或基准至少对其中一个W值会产生 5% 以上的误差,包括 d-convolution, 3d-stencil , atomic-monte-carlo-dynamics, knn , fft , merge-sort, black-scholes , dedup, freqmine 和 x264。
    • 我们发现,W=2产生的平均误差小于2%。较大的W值不会显著降低平均误差,但对于某些基准测试,较大的W导致更长的详细模拟,会显著降低加速比。
    • 因此,在本文的其余部分,我们将W设置为2。
  • 接下来,我们评估H的不同值,即样本历史的大小。
    • 我们设P=∞。注意,我们已经设置了W=2。
    • 图7b显示了样本历史中不同大小的误差和加速比,在上述基准点的32和64个线程的模拟中平均。我们发现H=4使平均误差最小化。(该值还使平均误差的标准差最小化)
    • H值越大,平均误差越大,模拟加速比也越低。因此,对于本文的剩余部分,我们设置H=4。
  • 最后,我们探讨不同大小的采样周期P。在W=2和H=4已经固定的情况下,P是唯一剩下的参数。
    • 图7c示出了P值在10到1000之间的平均误差。我们发现,平均误差和加速比随着采样周期的增大而增大。
    • P值越大,在快进模式下模拟的任务实例越多。由于程序的任务实例总数是恒定的,因此详细模拟的分数会减少,从而导致加速比增加。
    • 对于P ≥ 1000,误差和加速比保持不变。此时,所有被仿真的程序都没有足够的任务实例来对模拟进行至少一次重采样,导致周期采样基本等同于延迟采样。
    • 我们的目标是使模拟误差小于1%。采样周期P=250产生的误差为0.8%,模拟加速比为15.1倍,在我们的敏感性分析中使用的基准上表现较为平均。
    • 在本节的其余部分中,我们将评估P=250周期采样和延迟采样(相当于P=∞的周期采样)的任务点。

基于任务类型的聚类

  • 在本文的其余部分,我们将重点关注表2中介绍的高性能体系结构的仿真,可以预期在低功耗架构上将取得类似的结果。
    在这里插入图片描述
  • 图8显示了基于任务类型对任务实例进行集群时的模拟误差和加速比。64个线程的平均模拟误差高达3.21%。
  • 我们观察到的最大模拟误差在40.8%处,由归并排序产生,这也是图1中显示每个任务类型的最大性能变化范围(-59% ~ 45%)的基准。
  • 显示出高模拟误差的其他基准是fft , freqmine 和 dedup。这些基准也是性能变化最大的基准之一(fft:-38% ~ 45%,freqmine:-28% ~ 24%,dedup:-15% ~ 11%)。
  • 另一方面,图1中显示低性能变化的基准测试在基于任务类型对任务实例进行聚类时也显示低模拟误差。例如2d-convolution, 3d-stencil 和 atomic-monte-carlo-dynamics.
  • 对于一些基准测试,例如3d-stencil , atomic-monte-carlo-dynamics 和n-body,随着模拟线程数量的增加,模拟误差会增加。我们发现,对于这些基准测试,每千指令的最后一级缓存未命中数(MPKI)随着线程数的增加而增加,这也增加了性能变化。可以通过增加样本历史的大小来改善这些错误,但以牺牲模拟加速为代价。
  • 对于只有一种任务类型的基准点,如swaptions,可以观察到最大的模拟加速比,其显示的加速比为471x。平均加速比范围从8个线程的197倍到64个线程的22倍。
  • 对于延迟采样,模拟加速主要受模拟应用程序的任务实例数的限制。模拟线程越多,需要详细模拟越多任务实例,从而减少可以在快进模式下模拟的部分。
  • 如图2a所示,基于任务类型的任务实例集群可以产生不同性能的任务实例集群。对于性能不规则的应用程序或同一任务类型实例之间的多类行为,尤其如此。这证明了可以使用更精细的聚类技术来识别任务实例的类,这些类可以作为彼此的样本。

采用k-means聚类

在这里插入图片描述

  • 图9显示了基于k-means的任务实例聚类的模拟误差和加速比。
  • 我们通过使用任务实例的BBV作为SimPoint工具的输入来对任务实例进行集群,SimPoint工具依赖于k-means。
  • 我们将SimPoint的maxK设置为20,使最大集群数为20。
  • SimPoint会找到聚类数最少的聚类,但每个聚类的方差仍然很低。
  • 如图2b所示,k-means将任务实例分类为具有规则性能的集群,而将不规则集群分解为(多个)规则集群。
  • 在我们的评估中,atomic-monte-carlo-dynamics是产生最大数量团簇(k=18)的基准。应用k-means时的模拟误差是所有研究的聚类技术中最低的,平均误差仅为0.36%;在使用16个线程模拟归并排序的时,最大误差为4.1%。
  • 基于k-均值聚类的仿真以牺牲仿真时间为代价,实现了非常高的平均仿真精度。
    • 使用k-means的时候,8个模拟线程的平均模拟加速比为124x,模拟速度比基于任务类型对任务实例进行聚类时慢59%。
    • 这种放缓的原因在于某些应用程序的集群数量增加,导致与基于任务类型的集群相比,更大比例的工作负载进行了详细模拟
    • 模拟速度上的巨大损失表明,我们需要尽可能保持低的集群总数。这可以通过基于密度的聚类算法来实现,例如DBSCAN。

采用DBSCAN

在这里插入图片描述

  • 图10显示了使用DBSCAN对任务实例进行集群的模拟的模拟误差和加速比。
  • 常规应用程序实现了与基于任务类型的集群相似的模拟精度。然而,与基于任务类型的聚类相比,非常规基准出现了更高的模拟误差。我们确定了模拟误差增加的两个原因:
    • 第一,不同任务类型的相似实例由于其BBV的相似性而合并到一个集群中。
    • 第二,DBSCAN可以报告大直径的集群,如图2b所示的归并排序示例。
  • 在fft中,具有类似BBV和不同任务类型的实例由DBSCAN合并到一个集群中,histogram, swaptions 和 x264也受到类似影响。对于这些基准,DBSCAN可以找到若干集群,其数量低于任务类型数。虽然同一集群中的任务实例通常相似,但它们的性能可能不同。
  • 基准mergesort和freqmine包含依赖于输入的任务类型,这些任务类型将多个实例聚集到直径较大的集群中。其结果是同一集群的任务实例之间的性能发生变化,从而增加了模拟误差。
  • 平均而言,DBSCAN发现的群集数量较少,因此比k-均值和基于任务类型的群集实现了更大的模拟加速。模拟加速比范围从8个线程的225x到64个线程的25x。集群可以包含不同性能的任务实例,如果不计入影响,这些差异可能会导致较大的模拟误差,如图10所示。

DBSCAN聚类与分析建模

在这里插入图片描述

  • 图11显示了使用结合分析建模的DBSCAN聚类来识别任务实例类别的模拟误差和加速比。
  • 与仅使用DBSCAN集群的区别在于,在快速转发期间,任务实例是根据等式(1)在IPC上模拟的,而不是其各自任务集群的平均IPC。
  • 与仅使用DBSCAN相比,结合分析建模显著提高了仿真精度。归并排序基准(merge-sort benchmark)显示,仅使用DBSCAN时,误差高达32.8%。在最坏的情况下,分析模型将此误差降低到7.9%。fft的模拟误差从13.7%降低到3.5%。对于freqmine和x264,误差分别从10%以上降低到1.5%和0.1%。
  • 由于评估每个任务实例的分析模型的成本,结合分析建模的DBSCAN的平均加速比略低于仅使用DBSCAN的加速比。在16个模拟线程中可以观察到模拟速度最大相对下降13.5%。然而,由于模拟精度的显著提高,模拟速度的轻微损失是可以接受的。

与动态采样对比

  • 接下来,我们对比了任务点和动态采样的仿真误差和加速比。
  • 动态采样将基于先前看到的性能在快进模式中对线程进行采样,并在看到内部模拟器统计数据发生变化时重新评估该进度。
  • 为了进行这种比较,我们使用了COTSon模拟器,它与动态采样的实现一起分发。
    • 我们将COTSon配置为模拟类似于表2中低功耗架构的架构,运行Ubuntu 16.04服务器作为其操作系统。
    • 我们使用4个模拟内核运行COTSon,并分析了五个导致与完整基准集类似平均误差的应用程序。
    • 我们对这些应用程序使用与TaskPoint模拟中相同的应用程序二进制文件和输入集。
  • 我们评估了动态采样的参数空间,我们发现,令预热、详细模拟和快进的间隔长度为10万个周期,再加上100的重采样阈值,可以很好地平衡模拟速度和精度。仅当监控指标超过阈值时,才会触发重采样,即我们允许无限多个连续快进间隔。
    在这里插入图片描述
  • 图12显示了用1个线程和4个线程模拟的5个带有TaskPoint和动态采样的基准测试的模拟误差和加速比。
    • 对于1个线程,这两种技术都显示出很高的模拟精度。我们将略高的动态采样误差归因于模拟操作系统引入的影响,这在我们使用TaskPoint执行的用户级模拟中是不模拟的。
    • 对于4个模拟线程,动态采样显示平均模拟误差为2.94%,而TaskPoint的平均误差为0.15%。同样,这两种技术都显示了可接受的模拟误差水平。
  • 除了操作系统的影响外,我们还将动态采样的较大误差归因于这样一个事实,即快速转发机制没有模拟由执行相同静态代码的任务实例引起的资源争用变化,而是表现为与输入相关的行为。
  • TaskPoint将这些任务实例聚类到不同的集群中,并以特定的速率快速转发它们。使用TaskPoint模拟的加速比动态采样的加速高出约一个数量级。此外,我们的快进机制最大限度地减少了详细的模拟量,避免了快进应用程序部分的功能模拟,从而在模拟时间上实现了更高的加速。

小结

在本节中,我们将使用不同的聚类技术(即基于任务类型、k-means和DBSCAN的聚类)比较TaskPoint的模拟精度和加速比。我们的结果表明:

  • 对于每个任务类型性能正常(同一任务类型的实例执行时间差异不明显)的程序,基于任务类型的聚类可以提供良好的准确性和加速比。该技术的平均误差为2.95%,加速比为197倍。
  • k-means聚类在所有基准测试中都实现了显著更高的模拟精度,但与基于任务类型的聚类相比,牺牲了高达59%的模拟加速比。
    • 对于8个线程仿真,k-means的平均误差为0.21%,平均加速比为124x。
  • 我们发现,在归并排序中,仅DBSCAN聚类就显示了高达32.8%的模拟误差。尽管8个线程的平均模拟误差较低,为1.87%,加速倍数为225x,但不同基准测试的误差变化很大,如图6所示。
  • 结合分析建模的DBSCAN将8个线程的平均模拟误差降低到0.46%。在加速220倍时,与没有分析建模的DBSCAN相比,平均模拟加速比仅降低2.3%。同样重要的是,所有基准的误差变化也得到了显著改善。
  • 总的来说,在所有研究的基准测试中,具有分析建模的DBSCAN在高仿真速度下产生了良好的仿真精度。
  • 最后,我们证明了TaskPoint的准确性与现有技术相当。与现有的动态采样技术相比:
    • TaskPoint的加速比高一个数量级,平均误差更低。
    • TaskPoint将耗时的详细模拟量降至最低。一旦获得样本,就可以将样本用于剩余的模拟,通过分析性能模型确保高精度。
    • 我们的快速转发机制不需要借助被仿真程序的功能模拟进入详细模拟(Furthermore, our fast-forwarding mechanism does not rely on functional simulation of the simulated application to advance to the next detailed region)。

结合点:
1、输入:如何确保关键的for循环不被快进仿真跳过
2、输出:可以提供什么样的数据,帮助找出瓶颈问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值