基于聚类获取应用程序乱序访存行为模式的方法与流程

文档序号:15850285发布日期:2018-11-07 09:45阅读:297来源:国知局
基于聚类获取应用程序乱序访存行为模式的方法与流程

本发明属于软硬件协同设计技术领域,具体地涉及一种基于聚类获取应用程序乱序访存行为模式的方法。

背景技术

目前的高级处理器,为了提高内部逻辑元件的利用率以提高运行速度,通常会采用多指令发射、乱序执行等各种措施。其中,乱序执行机制通过将指令重新排序,分开发送给各相应电路单元处理,从而加快了程序的执行速度。

在芯片的性能评估体系中,cache的miss率是一个很重要的参数。因为cache的访存拥有空间局部性和时间局部性,所以访存指令的执行顺序会影响cache的miss率。乱序处理器的乱序执行机制可以打乱程序原有的指令顺序,但是,对于不同的程序,乱序后指令的执行顺序与程序本身的指令顺序之间的差异也不相同,我们称这种情况为乱序程度的不一致。显然,不同的程序经过乱序执行后其cache的miss率的变化也不一样。

当前,研究者们通常使用堆栈距离的概念来表征程序的执行顺序。访存堆栈距离指对同一cacheline的两次连续访存请求之间的请求地址个数。基于lru替换策略的cache结构,可直接利用访存堆栈距离分布,根据cache组关联数直接获取访问缺失次数。乱序执行机制对指令顺序的改变会影响到堆栈距离的分布,不同的乱序程度也就意味着不同的堆栈距离分布变化。目前虽然已经有研究者注意到了这种乱序程度因程序而异的情况,但是一般的应用程序都较大,执行过程较为复杂,整个程序的乱序程度是由一系列的更小的乱序执行单位共同影响造成的。如今业内缺少一种可以用来研究乱序程度的最小变化单位,而本发明就是针对这个问题,提供程序乱序程度的最小变化单位的提取方法。



技术实现要素:

针对上述存在的技术问题,本发明目的是:提供了一种基于聚类获取应用程序乱序访存行为模式的方法,使用该方法获得的访存行为模式可以作为一个程序内部指令乱序的最小变化单位,提供更细粒度的乱序行为分析。

本发明的技术方案是:

一种基于聚类获取应用程序乱序访存行为模式的方法,其特征在于,包括以下步骤:

s01:对应用程序的乱序执行流进行重排序,得到访存顺序执行流,分别提取顺序执行流堆栈距离分布和乱序执行流堆栈距离分布;

s02:计算每个线程的顺序执行流堆栈距离分布和乱序执行流堆栈距离分布的堆栈距离分布变化百分比;

s03:对所有线程的堆栈距离分布变化百分比进行聚类;

s04:根据聚类结果,从每一类中选出距离质心最近的线程的程序片段。

优选的,所述步骤s01堆栈距离分布计算方法,包括:

设置第一哈希表和第二哈希表,所述第一哈希表采用地址中tag与set位域作为索引,获取内容无效化标志以及前次同地址访存的序号,所述第二哈希表采用地址set位域索引,获取指向红黑树的指针;

通过在第一哈希表中索引到的sn号,在红黑树中找到存储位置,所述红黑树中存储访存序号为sn,并按照升序排列,计算该位置与红黑树尾端的距离作为当前访存请求在cacheset内的堆栈距离;

计算堆栈距离完成后,将当前访存序号更新到在哈希表和红黑树中索引的sn处,当检测到写操作时,依据写地址找到第一个哈希表中对应的内容失效位置1。

优选的,所述步骤s02包括,

将顺序执行流的堆栈距离分布和乱序执行流的堆栈距离分布分别转化为各个堆栈距离的百分比dp(i),dp(i)的计算公式为:

其中,d(i)为堆栈距离为i的指令数量,imax为i取指的上限,dp(i)为堆栈距离为i的指令占总体的百分比;

将乱序指令流的堆栈距离百分比dpout(i)减去顺序指令流的堆栈距离百分比dpin(i),得到堆栈距离分布变化百分比δdp(i),即:

δdp(i)=dpout(i)-dpin(i)。

优选的,所述步骤s03中采用k-means聚类算法进行聚类,具体步骤为:

(1)从n个数据对象任意选择k个对象作为初始聚类中心;

(2)根据每个聚类对象的均值作为中心对象,计算每个对象与中心对象的距离,并根据最小距离重新对相应对象进行划分;

(3)重新计算每个聚类的均值;

(4)循环(2)到(3)直到每个聚类不再发生变化。

与现有技术相比,本发明的优点是:

该方法可以用来提取程序内部的多种乱序访存行为模式,当前的研究都是以整个程序的乱序程度作为探索乱序执行机制对程序的指令执行顺序的影响的切入点,而本发明可以提供更细粒度的乱序行为分析,将乱序程度的研究从整体程序转换到了各个有代表性的程序片段上,这为之后的研究做出铺垫。

附图说明

下面结合附图及实施例对本发明作进一步描述:

图1为本发明基于聚类获取应用程序乱序访存行为模式的方法的流程图;

图2为访存堆栈距离计算框图;

图3为堆栈距离变化百分比示意图;

图4为k-means聚类算法聚类过程流程图。

具体实施方式

以下结合具体实施例对上述方案做进一步说明。应理解,这些实施例是用于说明本发明而不限于限制本发明的范围。实施例中采用的实施条件可以根据具体厂家的条件做进一步调整,未注明的实施条件通常为常规实验中的条件。

实施例:

如图1所示,本发明的基于聚类获取应用程序乱序访存行为模式的方法,该方法的重点在于使用了堆栈距离概念来表征访存指令的执行状态;借助时钟精确型仿真模型获得访存指令顺序执行与乱序执行的堆栈距离分布,并以两个堆栈距离分布的差值为标准进行聚类,获取不同程序执行阶段的乱序访存行为模态,具体包括以下步骤:

步骤1.在gem5上运行目标程序,依据gem5指令取指序号对乱序执行流进行重排序,获取访存顺序执行流。指令取指序号是指gem5模拟cpu取指阶段时为每一个指令分配的序列号。在顺序执行指令的cpu中,指令的取指顺序就是其执行顺序,所以我们统计乱序执行时访存指令的序列号,根据序列号重新排列来达到不需要额外执行一遍程序就能获取顺序执行流的目的。

设计堆栈距离算法,分别对顺序执行流与乱序执行流提取堆栈距离分布。设置gem5为每当发生线程切换时将统计数据写至一个文件内;

步骤2.根据步骤1得到的顺序执行流堆栈距离分布和乱序执行流堆栈距离分布来计算每个线程的乱序前后的堆栈距离分布变化百分比;

步骤3.使用k-means聚类算法对所有线程的堆栈距离变化百分比进行聚类;

步骤4.根据聚类结果,从每一类中选出距离质心最近的那个线程。

如图2所示,堆栈距离指,针对同一cacheline的两次连续访存请求间的访存地址个数。本发明将红黑树与哈希表组合,设计算法计算堆栈距离。本发明采用的访存trace包含2个模块,一是当前访存请求地址,二是当前访存请求序号sn。算法中包含两个哈希表,一是采用地址中tag与set位域作为索引,获取内容无效化标志以及前次同地址访存的序号。二是通过地址set位域索引,获取指向红黑树的指针。利用set位域索引是为了统计每个cacheset内的访存堆栈距离。红黑树中存储访存序号sn,并按照升序排列。通过在第一个哈希表中索引到的sn号,在红黑树中找到存储位置,计算该位置与红黑树尾端的距离即为当前访存请求在cacheset内的堆栈距离。完成堆栈距离计算后,将当前访存序号更新到在哈希表和红黑树中索引的sn处。当检测到写操作时,依据写地址找到第一个哈希表中对应的内容失效位置1。

堆栈距离分布变化百分比的获取

先将顺序执行流的堆栈距离分布和乱序执行流的堆栈距离分布分别转化为各个堆栈距离的百分比dp(i),dp(i)的计算公式为:

其中,d(i)为堆栈距离为i的指令数量,imax为i取指的上限,dp(i)为堆栈距离为i的指令占总体的百分比;

然后将乱序指令流的堆栈距离百分比dpout(i)减去顺序指令流的堆栈距离百分比dpin(i),得到堆栈距离分布变化百分比δdp(i),如图3所示,即:

δdp(i)=dpout(i)-dpin(i)。

对所有线程的堆栈距离变化百分比进行聚类

将步骤2所得的堆栈距离变化百分比以矩阵的格式导入matlab或其他可以实现k-means聚类算法的工具中,使用该工具的的k-means聚类算法对该矩阵进行聚类。本方法所采用k-means聚类的具体流程,如图4所示,包括:

(1)从n个数据对象任意选择k个对象作为初始聚类中心;

(2)根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离,并根据最小距离重新对相应对象进行划分;

(3)重新计算每个(有变化)聚类的均值(中心对象);

(4)循环(2)到(3)直到每个聚类不再发生变化为止。聚类数量根据线程总数而定,一般为总数的30%,过多可能会出现重复的类别。

优选的,使用python脚本来实现k-means聚类算法,并使用该脚本进行聚类。

获取所有类别的代表性程序片段

步骤3获得了每个类别的聚类质心,但是这些质心并不一定对应程序的某一个线程,所以我们需要找到这个类别中最具代表性的线程,即距离质心位置最近的那个线程。具体方案是使用matlab脚本对步骤3所得到的聚类质心进行测距,找到每一类中距离质心最近的那个线程。matlab脚本如下:

1d=d;

2[c,i]=min(d);

d为n*k的矩阵,存储的是每个点与所有质心的距离,该变量可以由步骤3聚类后得到;c存储的是k个最小距离;i是k个最小距离的行号,即线程编号。

上述实例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人是能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所做的等效变换或修饰,都应涵盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1