Analysis of Redundancy and Application Balance in the SPEC CPU2006 Benchmark Suite
-
摘要:
- 使用spec2006可能出现的问题:研究人员由于仿真时间限制,编译器困难,lib库或者系统调用的问题等原因,可能会选择其中部分测试集,但是一个随机的子集就可能会出现误导结果的可能。
- 文章工作:
- 在几个系统平台上,利用性能计数器实验分析了spec 2006的特征
- 利用主成分分析和聚类等统计技术对测试集的相似性和冗余性进行推断,从而给出了一个有意义的子集
- 结论:
- spec2006中没有继续包含EDA应用领域的测试集,但是从基本程序特征的角度分析,目前所包含的程序提供了比EDA程序更广的特征空间
- 对于整个spec2006套件,使用一个子集包括6个定点程序和8个浮点程序就可以包含大部分的套件信息
-
介绍
- spec2006是第五代spec,包括29个程序,12个定点,17个浮点程序。每一代更新时,容易受到不公平编译器优化影响的程序被停用,程序运行时间增加,程序的内存访问强度增加
- Is SPEC CPU2006 well-balanced? (spec cpu2006是不是均衡的?)
- 之前的spec中包含了EDA软件程序,但是2006中没有,因此是否会损失这类应用的特征或者其它程序中是否提供了和EDA程序类似的特征?
- 当包含同一个领域中的多个程序时,是否有足够的特有的特征,保证这些程序不会相互包含(冗余)
- 论文工作:使用多元统计分析技术,例如PCA和聚类分析
- 研究spec2006套件是否足够平衡(全面)
- 识别spec2006程序之间的相似和不同之处
- 识别多个输入集之间的相似之处,并找出具有代表性的输入集
- 提出能够代表整个套件的程序子集
-
spec cpu2006的介绍
-
整数程序12个,使用C/C++编写;浮点17个,使用C/C++/Fortran语言
-
论文通过在Pentium D processor (2.1 GHz, 16KB L1 data and instruction caches, and 2x2MB L2 cache)运行spec2006,得到了一些指令组成分析结果和指令局部性的分析结果
-
指令的组成分析
-
29个程序中,有24个程序的动态指令数超过了万亿(trillion),剩余五个为(429.mcf,471.omnetpp,433.milc, 477.soplex,453.povray)
-
整数程序,分支指令占比接近20%,但是456.hmmer和464.h246ref只有7%左右的分支。最高的是483.xalancbmk ,有25%的分支指令(动态指令中)。在浮点程序中只有三个程序(447.dealll, 450.soplex, 453.povray)的分支大概在15%左右,其余的基本都在5%一下。10.bwaves, 470.lbm,
436.cactusADM中甚至分支指令小于1% -
通过子程序分析确定指令的局部性。利用PIN工具分析子程序的调用频率,识别热点子程序,同时计算子程序中动态/静态指令的数量。下图为统计结果,横轴为子程序的静态指令数,纵轴为动态指令数。图中第二点,第三点,第四点和五点分别代表前五,十,十五和二十个子程序。当折线的斜率非常大时,意味着局部性非常好
-
指令局部性的结论,与上一代SPEC CPU基准测试套件中的程序类似,SPEC CPU2006基准测试中的大多数都表现出良好的指令局部性,但也有一些明显的例外
-
-
执行过程中的一些其它额外信息(和运行环境相关 16KB L1 data and instruction caches, and 2x2MB L2 cache)
-
-
Spec 2006套件中的冗余性——实验方法
-
基本思想:统计每个程序的静态信息和动态信息,通过聚类分析,进行冗余性分析。(指令局部性,数据局部性,分支可预测性和指令的分布情况等)
-
问题1:动态信息和微体系结构紧密相关,因此需要考虑思考消除这种微架构可能带来的偏差。
解决:在基于四种ISA和编译器的五种机器上分别测试每个程序的特征(IBM Power,Sun UltraSparc, Itanium,x86)
问题2:某些测量得到的性能计数器特征可能对性能(CPI)的影响非常小
解决:在实际实验过程中,根据结果,选择和性能有较大相关的特征
-
测量数据的重新处理(主成分分析,取出变量/特征之间的相关性):如果每个机器(n个)测量m个特征,则每个程序将会有n*m个特征变量。但是这些特征变量之间有相关性,如果直接使用这些变量,某些特征将会在结果中占据更大的比例,因此需要消除这种变量之间的相关性
-
PCA:消除特征变量之间的相关性(主要工作:降维)
-
为了消除每个变量的数量级不同,将所有数据归一化到正态分布,均值为0,方差为1
-
PCA会使用一组新的变量替代之前的变量。将P个原本的变量X转换为P个新的变量Z
Zi=∑j=0paijXjVar[Z1]>=Var[Z2]....>=Var[Zp] Z_i=\sum_{j=0}^{p}{a_{ij}X_j}\\Var[Z_1]>=Var[Z_2]....>=Var[Z_p] Zi=j=0∑paijXjVar[Z1]>=Var[Z2]....>=Var[Zp]
Var代表特征值,即最终选择特征值最大的n个变量作为新的特征向量。特征值越大意味着对结果的影响和作用越大。 -
选择标准(kaiser标准):特征值大于或者等于1则被保留。某些情况下,如果变量之间有相关性,则可以使用少部分变量获取大部分信息
-
-
利用聚类分析,测量相似性。论文在两种聚类方法中选择了一种(K-means和层级聚类),前一种需要事先指令需要聚类的个数,后者则不需要
-
层级聚类(hierarchical)思想:利用构建树的方式聚类。开始时,每个程序属于单独的一类,然后计算相互之间的距离(利用特征向量计算欧式距离),将两个距离最短的程序划分为一类,然后重复这个过程,直到最后变为一类
-
计算两个子簇之间的距离的方法:
-
取两个类中最近的样本计算
-
取两个类中最远的样本计算
-
将两个类中两两点之间的距离放在一起求平均等多种方法
-
-
通过这种算法得到的聚类结果可以绘制成一张树状结构图。如下,横轴代表两个类之间的距离,纵轴没有特殊含义
-
-
-
选择spec 2006的子集
-
测量数据为之前表格中的数据,然后利用PCA分析和层级聚类得到树状图。对于定点程序,选择特征值大于1的7个主成分,能够保留94%的方差。对于浮点程序,选择5个主成分,能够保留85%的方差
-
通过在类似于Figure2中的图中选择何时的连接距离来选择出一个具有代表性的子集
-
当有两个以上程序的类被选择时,如何选择其中一个程序:选择最靠近类中心的程序作为类的代表(需要重新计算每个点到类中心的距离)
-
不应该将挑选的子集中程序类型的混合误认为实际工作负载中程序类型的混合
-
-
评估挑选的子集的代表性:在八个不同的商业系统上测试子集的有效性
-
AMD Tyan Thunder K8E, Apple iMac 2.0GHz Intel Core Duo,
Fujitsu SC CELSIUS M440, Intel DG965WH motherboard,
Intel DG965WH motherboard, Bull SAS NovaScale B260 (Intel Xeon E5320,1.86GHz),
Dell Precision 690 (Intel Xeon 5160, 3.00 GHz),
HP Integrity BL860c (1.6GHz Dual-Core Intel Itanium 2)
-
根据官网上提供的spec cpu2006在不同计算机的执行时间和在参考机器上的执行时间,将程序子集的加权平均(几何平均)加速比和整个套件的平均加速比进行比较。
-
当计算子集的平均加速比时,每个子集中的程序会被赋予一个权重,该权重为该程序所属的子类中程序的个数,然后整体求平均值
-
结果:
-
-
选择每个程序具有代表性的输入集
- 上述的分析过程重新做一遍,但是将所有程序和其所有的输入集都需要参与。对于CINT,根据kaiser标准选择七个主成分可以覆盖89%的方差;对于CFP,选择6个主成分覆盖88%的方差。
- 上述的分析过程重新做一遍,但是将所有程序和其所有的输入集都需要参与。对于CINT,根据kaiser标准选择七个主成分可以覆盖89%的方差;对于CFP,选择6个主成分覆盖88%的方差。
-
根据分支和存储行为特征选择子集
- 根据数据访问性能特征和分支预测特征分析程序之间的相似性,从而选择适合研究数据缓存和分支预测的研究子集
- 针对于分支特征在三个不同的系统中测量数据,选择两个主成分基本能够覆盖92%的方差。
- 大部分的CFP程序聚集在一起,CINT程序则展示出多样性。
- 一些分支占比较少的CINT程序和CFP出现了重叠(464.h264ref, 456.hmmer)
- 对于PC1的值较大的程序,分支较容易预测
- 对于数据访问特征同样在三个系统中测量数据,最后选择4个主成分,能够覆盖84%的方差
- 对于PC1为负值的程序,数据访问行为较差,容易导致更高的数据缓存缺失率(mcf, omnettp)
- 对于PC2较高的CFP程序,具有较高的内存访问占比
-
Spec cpu2006套件是否足够平衡(balance)
-
某些领域的应用并没有在套件中涉及(例如EDA,spec2000中有),同时某些领域却有多个代表性的程序(例如AI,sjeng,gobmk,astar)
-
针对于spec2006没有包含EDA领域的测试程序,论文将spec2000中的整数程序和spec2006中的整数程序都进行主成分分析,选择四个主成分。然后将PC1和PC2绘制散点图,PC3和PC4绘制散点图。
- 结论:spec2000中的EDA程序非常类似于spec2006中的astar和bzip2程序,同时EDA程序完全在cpu2006所覆盖的工作负载空间的范围内,因此没有EDA不会带来很大的影响
-
同一个领域中的程序所具有的差异
- 通过之前对程序之间的相似分析,可以看出同一个领域的不同程序之间的相似性
- 结果:表格中加重的程序意味着更加相似
-
-
CPU2006和CPU2000之间的比较
- 通过将两者的程序的主成分分析结果绘制成散点图,可以看出,cpu2006的工作负载的范围更广泛
- cpu2006中的483.xalancbmk和456.hmmer使得PC1和PC2覆盖的范围更加广泛
- PC3和PC4的散点图中,可以看出445.gobmk, 483.xalancbmk, 462.libquantum和458.sjeng提供了更加广泛的多样性
- 两者共有的一些程序,行为基本上也很相似。虽然动态指令数和数据访问足迹不太一样,但是控制流基本没有变化
- 在浮点方面,spec cpu2006展现出更加多样的特征
-
程序对性能特征的敏感性
- 实验方法:在五台机器上运行所有程序,记录分支预测行为和数据缓存的行为,然后在每台机器的结果中按照记录的行为特征进行排序,最后计算一个程序在不同机器上的差异程度。通过该结果代表程序对一个给定特征的敏感程度
- 结果:462.libquantum, 456.hmmer, 464.h264ref 在不同机器上的数据缓存的缺失率变化最明显,456.hmmer在分支变化上更明显。gcc的变化非常小,意味着gcc消除了平台的敏感性