上一篇中我们讲了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 切片完整步骤相关推荐

  1. 【Ubuntu】虚拟机VirtualBox安装win7完整步骤

    在Ubuntu16.04中使用VirtualBox安装win7,亲测可以完美使用; 完整步骤参见如下链接: 1.VirtualBox安装步骤:http://www.xitongcheng.com/ji ...

  2. BigData预处理(完整步骤)

    BigData预处理(完整步骤) 虽然题目是完整步骤,实际上并不完整,以下是原文内容 一:为什么要预处理数据? (1)现实世界的数据是肮脏的(不完整,含噪声,不一致) (2)没有高质量的数据,就没有高 ...

  3. 【SSL】使用Keytool工具生成证书及签名完整步骤

    前言 jdk 1.8 OS:redhat 7.0 linux 命令的换行符为 \. window 命令的换行符为 ^.本文中的命令在 redhat 上进行的测试.如果使用windows时,将下面的命令 ...

  4. spring 加载java类_在Spring中基于Java类进行配置的完整步骤

    在Spring中基于Java类进行配置的完整步骤 发布于 2020-7-7| 复制链接 基于Java配置选项,可以编写大多数的Spring不用配置XML,下面 前言JavaConfig 原来是 Spr ...

  5. 预算里怎样计算机械作业费,用实物法编制施工图预算的完整步骤有( )等。 A.计算工程量B.套用预算人工、材料、机械 - 作业在线问答...

    相关题目与解析 用实物法编制施工图预算的完整步骤有()等.A.计算工程量B.套用预算人工.材料.机械台 用实物法编制施工图预算时,分项工程量计算之后的步骤是().A.套用预算定额单价B. 实物量法编制 ...

  6. Linux安装MySQL的完整步骤并有关MySQL8.0版本的问题方法

    目录 QUESTION:Linux安装MySQL的完整步骤? ANSWER: 一:使用wget 直接下载 二:安转软件源,将platform-and-version-specific-package- ...

  7. 大数据基础系列 1:Windows 安装 VMware Workstation 虚拟机完整步骤及需要注意的问题

    文章目录 前言 一.下载正版虚拟机不同版本 1.1.通过官网进行下载 VM 虚拟机 1.1.1.选择所需版本下载 1.1.2.VM 15.1.0 Pro for Windows 下载 1.2.免注册账 ...

  8. ssh 配置:在 Linux 中 ssh 配置无密码登陆完整步骤以及易错点分析

    文章目录 前言 一.什么是 SSH? 二.ssh 配置无密码登陆原理 三.Linux 系统上生成 SSH 密钥和公钥 四.登录验证 总结 前言 对于 Hadoop 的伪分布式和全分布式而言,Hadoo ...

  9. 大数据基础系列 4:伪分布式 Hadoop 在 Ubuntu 上的安装流程完整步骤及易错点分析

    文章目录 前言 一.创建 Ubuntu 用户 二.安装 Java 2.1.查看本地 Java 版本 2.2.验证 Java 在本地的配置情况 三.安装 ssh 服务 3.1.安装 openssh-se ...

最新文章

  1. Python 函数不定长参数
  2. 【TX2】安装NVIDIA SDK Manager(JetPack 4.6)后,下载kernel和u-boot源码
  3. linux ssh 下实现免密码登录
  4. Python统计网站访问日志log中的IP信息,并排序。。
  5. IDAE启动报错:Intellij idea Cannot start internal HTTP server. Git integration, JavaScript debugger...
  6. MySQL复制--slave设置读取binlog的位置
  7. JavaWeb 项目启动时,后台开启一个线程的方法
  8. 使用AsyncEnumerator简化异步操作
  9. ShadeGraph教程之节点详解7:Utility Nodes
  10. python采集代理ip_Python采集代理ip并判断是否可用和定时更新的方法
  11. 题目1111:单词替换
  12. error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
  13. 云算子矩阵计算机,《CASIOfx-5800P矩阵编程计算器测量程序集锦梁宝禄.pdf》-支持高清全文免费浏览-max文档...
  14. Wordpress鼠标指针样式自定义
  15. Nginx服务器日常发包命令
  16. Centos7.2离线安装Docker和nvidias-docker2安装教程
  17. Demand Side Platform (需求方平台)名词一览
  18. 微信小程序实现FBX模型的动画加载
  19. 区域治理杂志区域治理杂志社区域治理编辑部2022年第40期目录
  20. 说一下如何下载各论坛免费文档

热门文章

  1. 基于c语言图像灰度拉伸算法实现,c语言实现图像灰度均衡化
  2. Arduino从零开始学习(一)
  3. 工业机器人实训实验平台
  4. 智能合约--如何实现可升级的智能合约
  5. 3GPP TS 23501-g51 中英文对照 | 4.2.5a Radio Capabilities Signalling optimisation
  6. 【DBC专题】-5-DBC文件格式解析
  7. 解除excel工作表密码保护方法
  8. 汉语中的词频及笔画数分布规律探析
  9. 转载:解决服务器上 w3wp.exe 和 sqlserver.exe 的内存占用率居高不下的方案
  10. Python--进程池与线程池