一种面向移动智能终端处理器的基准测试程序合成方法
技术领域
本发明涉及一种面向移动智能终端处理器的基准测试程序合成方法,属于处理器体系结构技术。
背景技术
在处理器设计的过程中,设计人员通常需要多次评估测试自己的设计方案,根据测试结果分析硬件性能瓶颈,不断改进设计方案,最终达到设计需求和规格说明。唯一稳定、可靠的性能度量是实际应用的执行时间。然而实际应用的数量无穷尽,只能用少量的测试程序代替大量的实际应用对处理器进行测试。为了使测试程序具有很高的代表性,同时测试时间又在一个可接受的范围内,一种方法是根据原始程序动态执行时的特征统计信息合成新的程序,使得合成的基准测试程序可以代表实际应用对硬件的压力。
因此,测试程序合成方法的重点就在于,要确保合成的测试程序与原应用程序具有相似的负载特征。然而,当前的基准测试程序合成方法中,有的统计信息包含程序执行过程中的部分微结构相关特征,即分支预测错误率、缓存缺失率等。并针对这类程序特征合成测试程序。由于含有微结构相关特征,导致合成的基准测试程序保留了原应用程序在特定硬件上的负载特性,因此跨硬件平台时对实际应用并不具备很好的代表性。
因此更多的基准测试程序合成方法中,选择统计微结构无关的负载特征。然而一些方法中,仅统计了较少的微结构无关特征,包括指令混合比、分支行为相关特征、访存行为相关特征。没有覆盖到其它一些重要的程序特征,比如指令之间的依赖关系,以及移动智能终端上的安卓应用引入的新的程序特征,即串行化指令。导致难以合成出具有较高代表性的测试程序。
此外,当前的合成技术没有很有效地减少测试程序的执行时间,合成的基准测试程序体积仍较大,执行和仿真时间仍然很长,影响硬件架构的评估和优化周期。
发明内容
发明目的:为了克服现有技术中存在的不足,本发明提供一种与体系结构无关的、执行时间缩短的、可以代表多类实际应用对移动智能终端处理器压力的基准测试程序的合成方法。
技术方案:为实现上述目的,本发明采用的技术方案为:
一种面向移动智能终端处理器的基准测试程序合成方法,包括如下步骤:
(1)将原程序按照执行时的线程切换划分为若干切片,分别统计每个切片的动态指令流中的微结构无关特征;
(2)每个切片内部以基本块为单位,通过基本块间的跳转关系构建所属切片的控制流程图,统计每个基本块的执行次数;
(3)对每个切片内部的所有基本块,通过缩减因子去除执行次数低于阈值的基本块;对每个切片内部保留下来的基本块,通过基本块间的跳转关系重新构建所属切片的控制流程图,根据基本块的分支跳转比例和分支跳转变换率确定基本块的分支行为;
(4)对每个切片内部保留下来的基本块,按照微结构无关特征进行聚类,选取每个类别中距离中心点最近的基本块作为所属类别的设计模块;
(5)对每个切片内部保留下来的基本块,使用背包算法从设计模块中选取特定的设计模块替代原始的基本块,更新切片的控制流程图,形成所属切片的基准测试程序,得到的切片的基准测试程序与原切片具有相似的微结构无关特征;
(6)对每个切片的基准测试程序,使用遗传算法进行迭代改进,形成所属切片的优化基准测试程序;
(7)将所有切片的优化基准测试程序进行串行拼接,最终形成完整的基准测试程序,得到的完整的基准测试程序与原应用程序具有相似的微结构无关特征。
优选的,所述微结构无关特征包括分支跳转比例、分支跳转变换率、指令混合比、访存步长、重用距离、关键路径长度和串行指令,相关定义如下:
分支跳转比例:一条条件分支发生跳转的平均概率;
分支跳转变换率:一条条件分支在跳转与非跳转之间变换的概率;对于很高和很低的分支跳转变换率,分支预测器容易预测;
指令混合比:每类指令类型所占的比例,包括整数加减指令、浮点加减指令、整数乘法指令、浮点乘法指令、压栈操作、出栈操作、空指令、读指令和写指令等;
访存步长:时间上连续的两次访存地址的跨度;
重用距离:在两次访问同一地址块的访存操作之间,访问其他特定地址范围内的访存操作的次数;
关键路径长度:关键路径长度的分布是一种量化评估指令间数据依赖关系的方法,对于特定指令窗大小(如m个入口项)的乱序超标量处理器而言,连续m条动态指令之间存在的最长真数据相关依赖链路就是关键路径;关键路径上动态指令的数目即为关键路径长度;一段动态指令流中,关键路径长度是不完全相同的,因此可以采用关键路径长度的分布,量化表征程序内在的指令并行度;
串行指令:通过强制流水线按照顺序执行部分动态指令流,从而保证某些关键操作(比如对处理器状态寄存器的修改,确定访存顺序等)的执行顺序,主要包括数据存储器隔离(DMB),数据同步隔离(DSB)以及指令同步隔离(ISB)。
优选的,所述步骤(3)中,通过缩减因子去除执行次数低于阈值的基本块的具体方法为:将所有基本块的执行次数除以缩减因子R,去除所有计算结果小于1的基本块。
优选的,所述步骤(4)中,对每个切片内部保留下来的基本块,按照微结构无关特征进行k-means聚类。
优选的,所述步骤(6)中,使用遗传算法进行迭代改进的具体方法为:
(61)对由设计模块组合而成的切片的基准测试程序计算切片的理论特征向量,对理论特征向量中的每个值进行二进制编码,然后按设计算法对部分二进制位进行翻转生成N个测试特征向量,对该N个测试特征向量再根据步骤(5)生成N个基准测试程序;
(62)将N个基准测试程序在模拟器上执行并统计得到的N个实际特征向量;
(63)选取N个基准测试程序中,实际特征向量与切片的原始特征向量几何距离最小的两个基准测试程序作为父类测试程序,判断两个父类测试程序的实际特征向量是否收敛:若收敛,则进入步骤(65);否则,进入步骤(64);
(64)对两个父类测试程序的两个测试特征向量中的每个值进行二进制编码,随机互换该两个测试特征向量中的某些特征值,并对部分二进制位进行翻转生成N个测试特征向量,对该N个测试特征向量再根据步骤(5)生成N个基准测试程序,返回步骤(62);
(65)任意选取两个父类测试程序之一作为所属切片的优化基准测试程序。
优选的,所述步骤(7)中,不考虑各个切片的优化基准测试程序之间的数据和控制关系,仅在每个切片的优化基准测试程序的开始和结束为止模拟线程切换时的保护现场和恢复现场动作,将属于不同线程的各个切片的优化基准测试程序进行串行拼接,最终形成完整的基准测试程序。
有益效果:本发明提供的面向移动智能终端处理器的基准测试程序合成方法,合成的测试程序具有更高的代表性,同时能更加有效的缩减程序规模;首先,本发明在合成测试程序时保留的全部是微结构无关特征,使得合成的测试程序可以在不同微结构上代表实际应用程序对硬件的压力;同时,本发明覆盖了程序中更多重要的微结构无关特征,包括指令级并行度,线程级并行度以及串行化指令行为;此外,本发明通过模板代码设计以及背包算法实现模板匹配合成测试程序,再通过遗传算法对测试程序进行迭代改进,提高了程序在各个微结构无关特征维度的合成精度。
附图说明
图1为本发明的实施流程图;
图2为基本块间的跳转示意图;
图3为一个切片的控制流程图以及缩减后的控制流程图;
图4为基本块按照微结构无关特征聚类的示意图;
图5为遗传算法迭代改进的流程图。
具体实施方式
下面结合附图对本发明作更进一步的说明。
如图1所示为一种面向移动智能终端处理器的基准测试程序合成方法实施流程图,下面就各个步骤加以具体说明。
步骤一:通过CPU模拟器将原程序按照执行时的线程切换划分为若干切片,分别统计每个切片的动态指令流中的微结构无关特征,所述微结构无关特征包括分支跳转比例、分支跳转变换率、指令混合比、访存步长、重用距离、关键路径长度和串行指令。
步骤二:每个切片内部以基本块为单位,通过基本块间的跳转关系构建所属切片的控制流程图,统计每个基本块的执行次数。
基本块是指程序执行中的一串指令序列,只有一个入口指令和一个出口指令,分别为该串指令序列中的第一条指令和最后一条指令;入口指令是切片的首条指令,或者是跳转指令目标地址指向的指令,或者是跳转指令后的第一条指令;出口指令是分支指令,基本块间通过分支指令实现跳转。以图2为例,每个基本块都给予特定的标签(如A)并统计其执行次数(如500),基本块前后的箭头表示基本块间的跳转,箭头方向表示跳转方向;根据基本块及基本块间的跳转关系可以构建出所属切片的控制流程图。
步骤三:对每个切片内部的所有基本块,通过缩减因子去除执行次数低于阈值的基本块;对每个切片内部保留下来的基本块,通过基本块间的跳转关系重新构建所属切片的控制流程图,根据基本块的分支跳转比例和分支跳转变换率确定基本块的分支行为。需要说明的是,在这个切片中只有少数基本块是反复执行的,多数的基本块的执行次数很少,这些执行次数很少的基本块对切片的微结构无关特征的贡献不大,为了减少最终合成程序的执行时间,我们仅需要保留执行次数较多的基本块。
如图3所示,对每个切片内部的所有基本块,将所有基本块的执行次数除以缩减因子R,去除所有计算结果小于1的基本块,对保留的基本块,通过基本块间的跳转关系重新构建所属切片的控制流程图;分支跳转变换率可以通过取模运算确定,缩减后的控制流程图如图3所示,缩减因子R取值为100。为了刻画分支预测器对分支的预测行为,通过基本块间的分支跳转比例和分支跳转变换率确定分支行为。
步骤四:对每个切片内部保留下来的基本块,按照微结构无关特征进行k-means聚类,选取每个类别中距离中心点最近的基本块作为所属类别的设计模块。
基本块的特征向量由其微结构无关特征组成,切片的基本特征向量由其基本块的特征向量组成;对每个切片内部保留下来的基本块的特征向量使用k-means算法进行聚类。各个微结构无关特征的设计方法如下:
指令混合比:根据向量中指令混合比分配各类指令数量;
访存步长:根据向量中的访存步长的分布情况计算所有访存指令的目的地址;
重用距离:根据重用距离分布,将特定数目访存其他特定地址范围的访存指令插入到两条访存指令之间;
关键路径长度:构造指令间的真数据相关,即根据统计的关键路径长度分布,选取特定数量的指令,对指令分配架构寄存器,分配方法是按顺序将前一条指令的目的寄存器作为后一条指令的源寄存器,直至所有指令分配完成;
串行化指令:按照统计的串行指令的类型时间局部性,依据其分布在间隔特定的指令数量间插入指定类型的串行化指令。
步骤五:对每个切片内部保留下来的基本块,使用背包算法从设计模块中选取特定的设计模块替代原始的基本块,更新切片的控制流程图,形成所属切片的基准测试程序,得到的切片的基准测试程序与原切片具有相似的微结构无关特征。
背包算法是动态规划算法的一种,其主要原理是在给定容器总容量,给定物品的消耗和价值的前提下,通过对物品的选择,使得在物品消耗小于容器总容量的前提下获得最大的价值。在本例中,容器的总容量为某一切片中的动态指令数(即该某一切片总的指令数量),物品为每一个设计模块,物品的价值即为每个设计模块的特征向量,总价值即为所有选定的设计模块的特征向量之和与切片特征向量之间的距离,本例的背包算法目的是保证切片的基准测试程序在指令数量小于动态指令数的前提下实现基准测试程序与原程序的微结构无关特征相同。本例属于完全背包问题,即同一设计模块可以选取任意次数,最终选取设计模块之后,将设计模块对应到缩减后的控制流程图,合成该切片对应的基准测试程序。
步骤六:对每个切片的基准测试程序,使用遗传算法进行迭代改进,形成所属切片的优化基准测试程序。由步骤五获得的切片的基准测试程序与原切片存在误差,即获得的切片的基准测试程序的微结构无关特征与原切片的微结构无关特征之间存在误差,为了减小这种误差,使得切片的基准测试程序与原切片更加接近,我们采用遗传算法对切片的基准测试程序进行迭代改进。遗传算法是一种通过模拟自然进化过程搜索最优解的方法,在利用遗传算法时,问题的解被定义为染色体,这些染色体在经过遗传、变异、重组形成新的染色体,然后经过筛选获得最优的染色体在进行迭代操作,直至选取的染色体收敛至最优解。使用遗传算法进行迭代改进的具体方法为:
(61)对由设计模块组合而成的切片的基准测试程序计算切片的理论特征向量,对理论特征向量中的每个值进行二进制编码,然后按设计算法对部分二进制位进行翻转生成N个测试特征向量,对该N个测试特征向量再根据步骤(5)生成N个基准测试程序;
(62)将N个基准测试程序在模拟器上执行并统计得到的N个实际特征向量;
(63)选取N个基准测试程序中,实际特征向量与切片的原始特征向量(原程序的特征向量)几何距离最小的两个基准测试程序作为父类测试程序,判断两个父类测试程序的实际特征向量是否收敛:若收敛,则进入步骤(65);否则,进入步骤(64);
(64)对两个父类测试程序的两个测试特征向量中的每个值进行二进制编码,随机互换该两个测试特征向量中的某些特征值,并对部分二进制位进行翻转生成N个测试特征向量,对该N个测试特征向量再根据步骤(5)生成N个基准测试程序,返回步骤(62);
(65)任意选取两个父类测试程序之一作为所属切片的优化基准测试程序。
步骤七:将所有切片的优化基准测试程序进行串行拼接,最终形成完整的基准测试程序,得到的完整的基准测试程序与原应用程序具有相似的微结构无关特征。由于在移动智能终端中的安卓应用通常会分配多个线程,但是各个线程处理不同的事务,彼此间的控制依赖和数据依赖为弱关系;因此,我们不考虑各个切片的优化基准测试程序之间的数据和控制关系,仅在每个切片的优化基准测试程序的开始和结束为止模拟线程切换时的保护现场和恢复现场动作,将属于不同线程的各个切片的优化基准测试程序进行串行拼接,最终形成完整的基准测试程序。
以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。