simpoint 是什么 局部代表整体 simpoint试图用局部的代码段来代表整个程序。 为什么 CPU性能模型自身限制导致 模型的运行效率慢,运行大型的性能验证程序,如specint,运行时间按月计算; 经典的simpoint流程 输入 特征信息 可以理解为从整个程序抽象出来特征信息,用特征信息来代表整个程序;特征值(特征信息)BBV(basic block vector) BB basic block 简单来说,basic block就是一段顺序执行的代码块,而且只有一个出口和入口;(等于就是按照跳转指令做划分,出现跳转指令就新化BB,leader pc地址相同的BB是一个BB)可以理解为程序执行的基本元素 BBV 可以理解为一个向量,或者数组,代表BB+BB的某个特征 例如下BBV:BB id和BB的执行指令数 参数 BBV的大小: 自己划分:可以把整个程序存到一个BBV里,也可以每隔多少个特定的值(指令数,BB数),划分BBV;一个BBV就是一个切片(代码段),BBV的大小就是切片的大小 simpoint算法(官方的simpoint算法) 聚类 就是对输入的所有BBV进行分类聚类算法 BBV降维 对每一个BBV进行降维,默认降到15维 就是从一个BBV中,取15个bb和bb对应的特征; 随机选择K个随机点作为聚类中心的初始化把相似的BBV分到一类,相似的判断依据使用曼哈顿或者欧几里得距离 曼哈顿距离的计算 对BBV进行归一化处理,例如:BBV存的是bb和bb的次数,就是把这bb和bb的次数这两个数值进行归一化处理(可以消除奇异样本数据导致的不良影响)变为一个值,然后计算曼哈顿距离,也就是两个BBV各个值相减的绝对值的和;归一化 BBV通过将每个元素除以向量中所有元素的和来归一化; 欧几里得距离:平方和的平方根 聚类中心不断修正:更改为其集群中所有点的质心,(质心计算为簇中所有数据点的平均值) 也就是类里面每多一个点,聚类中心就会修正一次; k-means算法 从1到最大的K值,重复上面的聚类过程,使用BIC(贝叶斯信息准则)对每个聚类的拟合进行评分,选择k值最小且满足在最佳得分90%以上的作为最终的聚类个数,也就是切片的个数; 选择 从每个聚类里选择一个最典型的BBV(切片)选择算法 距离聚类中心最近的点,这个点也就是BBV,也就是切片; 权重的计算 最终选择的BBV(切片)所在的聚类占所有BBV的比重; 参数 K值:聚类中类的最大个数 输出 能代表整个程序的局部代码段,也就是一部分BBV,也就是切片