Simpoint - 0x1 切片完整步骤

上一篇中我们讲了simpoint的原理和步骤,接下来实践下。

先从简单的开始,要实现切片需要两个软件:程序分析和统计软件;统计数据分析聚类软件。

0x1-1 程序分析和统计

在simpoint文章中使用的程序分析和统计软件是ATOM和simplescalar,ATOM在“A system for building customized program analysis tools“中有介绍,但未找到可使用的ATOM程序,排除。那在看下simplescalar,simplescalar是一个软件模拟CPU、cache、memory等硬件架构的软件,跟GEM5较相似,既然可以模拟CPU,那它支持什么指令集呢?从simplescalar的README说明中可以发现支持两种指令集:ALPHA和PISA,其中PISA是portable ISA的缩写,是simplescalar专门支持的私有ISA,如果要编译支持PISA的软件需要使用特有的工具链。alpha架构则是支持ALPHA自有的指令集,网络上对alpha处理器的介绍挺多,有兴趣的读者可以搜索了解下。既然alpha有真实的硬件推到市场过,应该还是比较成熟的,那我们在编译simplescalar的时候选择支持alpha吧。

OK,选定了simplescalar,那先下载软件吧。官方网站http://www.simplescalar.com

 打开一片空白,试了N次,换了各种网络都不成功。只能求助万能的gitee。还好有乐于分享的同学上传的gitee上,simplescalar_install: simplescalar安装包,里面包含的挺全,有simplescalar的源码和PISA的编译工具链,但simplescalar是有版权保护的,大家传播时还是要慎重。选择下载其中的simplesim-3v0e.tgz,就是simplescalar 3.0的源代码。

simplescalar 3.0官方源码中只包含了模拟器的源码,是不支持切片需要的程序分析和统计功能的,要支持切片还需要对源码做侵入性的修改,要修改的内容可以simpoint中找到。下载并解压后有三个源文件:bbtracker.c/h是做程序分析统计的主要逻辑文件;sim-fast.c是simplescalar中的源文件,但为了支持bbtracker做了部分修改,因为不能确定源码版本跟作者使用的是否完全一致,我们不打算用bbtracker中的sim-fast.c替换simplescalar中的对应文件,而是将sim-fast.c中的修改添加到simplescalar中sim-fast.c的逻辑中。好在要修改的地方不多。修改完成后将bbtracker.c/h也拷贝到simplescalar源码目录,然后在Makefile中将bbtracker.h/c分别添加到SRCS/HDRS和OBJS中,接下来可以编译了。

>> make config-alpha // 配置simplescalar支持alpha架构的指令集
>> make
>> make sim-tests

其中make sim-tests会编译写测试程序来测试simplescalar虚拟机的正确性。

编译完成会生成sim-fast程序,其中就包含了程序的分析和统计功能。下面试下是否能正常的运行。

>> ./sim-fast -interval 100 -outdir bb -outfile bbv tests-alpha/bin/test-fmath

参数:

-interval  是分析时每段的指令流长度。文章中建议是100milion条指令流为一段,但我们使用的程序太小,为了演示方便,设置成了100条。

-outdir  输出文件的目录

-outfile 输出文件的名称,最后输出的其实是gzip压缩过的文件,所以文件名为bbv.tar.gz

可以使用编辑器打开生成的文件,文件格式跟上篇中介绍的步骤1的输出格式相同。

0x1-2 聚类

对于聚类功能,simpoint官方中已经给出了实现,已经发展到了3.2版本,直接拿来使用即可。

下载链接:https://cseweb.ucsd.edu/~calder/simpoint/releases/SimPoint.3.2.tar.gz

 下载解压后进入到Simpoint目录,然后执行:

>> make simpoint

此命令会编译simpoint中analysiscode并将生成的可执行文件放到bin目录下,接下来执行simpoint对步骤1中获取到文件的进行聚类分析。

>> ./bin/simpoint -maxK 30 -saveSimpoints simpoints -saveSimpointWeights weights -loadFVFile input/sample.bb

参数:

-maxK  N  表示K的取值从1到N,然后用BIC选择最合适的k值。

-saveSimpoints  将最终选择的点信息放到文件

-saveSimpointWeights  将选择的每个点的权重放到文件

-loadFVFile 载入Frequence vector文件,就是步骤1生成的文件

-inputVectorsGzipped  表明输入的FV文件是否经过gizpped压缩了,示例中的文件没有经过压缩,所以没有使用此参数

simpoint支持的参数还有很多,这里不再一一列举,有兴趣的同学可以看下simpoint中README文件,有详细说明。

可以打开simpoint生成的simpoints和weights文件,跟上篇中提到的文件格式对比下看是否一致。

OK,到此我们拿到了聚类后的代表点,在真实的场景中,接下来应该需要根据simpoints中点信息使用模拟器运行程序的若干个片段了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值