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中点信息使用模拟器运行程序的若干个片段了。
Simpoint - 0x1 切片完整步骤相关推荐
- 【Ubuntu】虚拟机VirtualBox安装win7完整步骤
在Ubuntu16.04中使用VirtualBox安装win7,亲测可以完美使用; 完整步骤参见如下链接: 1.VirtualBox安装步骤:http://www.xitongcheng.com/ji ...
- BigData预处理(完整步骤)
BigData预处理(完整步骤) 虽然题目是完整步骤,实际上并不完整,以下是原文内容 一:为什么要预处理数据? (1)现实世界的数据是肮脏的(不完整,含噪声,不一致) (2)没有高质量的数据,就没有高 ...
- 【SSL】使用Keytool工具生成证书及签名完整步骤
前言 jdk 1.8 OS:redhat 7.0 linux 命令的换行符为 \. window 命令的换行符为 ^.本文中的命令在 redhat 上进行的测试.如果使用windows时,将下面的命令 ...
- spring 加载java类_在Spring中基于Java类进行配置的完整步骤
在Spring中基于Java类进行配置的完整步骤 发布于 2020-7-7| 复制链接 基于Java配置选项,可以编写大多数的Spring不用配置XML,下面 前言JavaConfig 原来是 Spr ...
- 预算里怎样计算机械作业费,用实物法编制施工图预算的完整步骤有( )等。 A.计算工程量B.套用预算人工、材料、机械 - 作业在线问答...
相关题目与解析 用实物法编制施工图预算的完整步骤有()等.A.计算工程量B.套用预算人工.材料.机械台 用实物法编制施工图预算时,分项工程量计算之后的步骤是().A.套用预算定额单价B. 实物量法编制 ...
- Linux安装MySQL的完整步骤并有关MySQL8.0版本的问题方法
目录 QUESTION:Linux安装MySQL的完整步骤? ANSWER: 一:使用wget 直接下载 二:安转软件源,将platform-and-version-specific-package- ...
- 大数据基础系列 1:Windows 安装 VMware Workstation 虚拟机完整步骤及需要注意的问题
文章目录 前言 一.下载正版虚拟机不同版本 1.1.通过官网进行下载 VM 虚拟机 1.1.1.选择所需版本下载 1.1.2.VM 15.1.0 Pro for Windows 下载 1.2.免注册账 ...
- ssh 配置:在 Linux 中 ssh 配置无密码登陆完整步骤以及易错点分析
文章目录 前言 一.什么是 SSH? 二.ssh 配置无密码登陆原理 三.Linux 系统上生成 SSH 密钥和公钥 四.登录验证 总结 前言 对于 Hadoop 的伪分布式和全分布式而言,Hadoo ...
- 大数据基础系列 4:伪分布式 Hadoop 在 Ubuntu 上的安装流程完整步骤及易错点分析
文章目录 前言 一.创建 Ubuntu 用户 二.安装 Java 2.1.查看本地 Java 版本 2.2.验证 Java 在本地的配置情况 三.安装 ssh 服务 3.1.安装 openssh-se ...
最新文章
- Python 函数不定长参数
- 【TX2】安装NVIDIA SDK Manager(JetPack 4.6)后,下载kernel和u-boot源码
- linux ssh 下实现免密码登录
- Python统计网站访问日志log中的IP信息,并排序。。
- IDAE启动报错:Intellij idea Cannot start internal HTTP server. Git integration, JavaScript debugger...
- MySQL复制--slave设置读取binlog的位置
- JavaWeb 项目启动时,后台开启一个线程的方法
- 使用AsyncEnumerator简化异步操作
- ShadeGraph教程之节点详解7:Utility Nodes
- python采集代理ip_Python采集代理ip并判断是否可用和定时更新的方法
- 题目1111:单词替换
- error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
- 云算子矩阵计算机,《CASIOfx-5800P矩阵编程计算器测量程序集锦梁宝禄.pdf》-支持高清全文免费浏览-max文档...
- Wordpress鼠标指针样式自定义
- Nginx服务器日常发包命令
- Centos7.2离线安装Docker和nvidias-docker2安装教程
- Demand Side Platform (需求方平台)名词一览
- 微信小程序实现FBX模型的动画加载
- 区域治理杂志区域治理杂志社区域治理编辑部2022年第40期目录
- 说一下如何下载各论坛免费文档
热门文章
- 基于c语言图像灰度拉伸算法实现,c语言实现图像灰度均衡化
- Arduino从零开始学习(一)
- 工业机器人实训实验平台
- 智能合约--如何实现可升级的智能合约
- 3GPP TS 23501-g51 中英文对照 | 4.2.5a Radio Capabilities Signalling optimisation
- 【DBC专题】-5-DBC文件格式解析
- 解除excel工作表密码保护方法
- 汉语中的词频及笔画数分布规律探析
- 转载:解决服务器上 w3wp.exe 和 sqlserver.exe 的内存占用率居高不下的方案
- Python--进程池与线程池