目录

12.1。概观12.2。使用基本块向量创建SimPoints12.3。BBV命令行选项12.4。基本块向量文件格式12.5。履行12.6。线程可执行支持12.7。验证12.8。性能

要使用此工具,必须--tool=exp-bbv在Valgrind命令行上指定 。

12.1。概观

基本块是具有一个入口点和一个出口点的代码的线性部分。甲基本块矢量(BBV)是程序执行过程中输入的所有的基本块的列表,以及每个基本块多少次运行的计数。

BBV是一种生成用于SimPoint 分析工具的基本块向量的 工具。SimPoint方法可以通过仅运行程序的一小部分,然后从这个小部分推断出整体行为,从而加速架构模拟。大多数程序表现出基于阶段的行为,这意味着在执行期间的不同时间,程序将遇到时间间隔,其代码的行为类似于之前的间隔。如果您可以检测到这些间隔并将它们组合在一起,则可以通过仅模拟最小数量的间隔,然后缩放结果来获得总体程序行为的近似值。

在计算机体系结构研究中,在循环精确模拟器上运行基准测试可能会导致1000倍的减速,从而需要数周,数周甚至更长的时间才能运行完整的基准。通过使用SimPoint可以显着降低,通常为90-95%,同时仍然保持合理的准确性。

T. Sherwood,E.Perelman,H. Hamerly和B. Calder在“自动表征大规模程序行为”的文章中可以找到SimPoint如何工作的更完整的介绍。

12.2。使用基本块向量创建SimPoints

要快速创建一个基本的块向量文件,您将像这样调用Valgrind:

valgrind --tool = exp-bbv / bin / ls

在这种情况下,我们正在运行/bin/ls,但这可以是任何程序。默认情况下,bb.out.PID将创建一个调用的文件 ,其中PID被正在运行的进程的进程ID替换。该文件包含基本的块向量。对于长时间运行的程序,此文件可能相当大,因此使用gzip或其他压缩程序进行压缩可能是明智之举。

要创建实际的SimPoint结果,您将需要可从SimPoint网页获得的SimPoint实用程序 。假设您下载了SimPoint 3.2并对其进行了编译,请使用以下命令创建SimPoint结果:

./SimPoint.3.2/bin/simpoint -inputVectorsGzipped \-loadFVFile bb.out.1234.gz \-k 5 -saveSimpoints results.simpts \-saveSimpointWeights results.weights

其中bb.out.1234.gz是由BBV生成的压缩基本块向量文件。

SimPoint实用程序使用15维进行随机线性投影,然后使用k均值聚类来计算哪些间隔是感兴趣的。在本例中,我们使用-k 5选项指定了5个间隔。

SimPoint运行的输出是 results.simpts 和results.weights文件。第一个是程序的最相关的5个间隔。当外推全程序行为时,秒数保持缩放每个间隔的权重。间隔和权重可以与支持快进的模拟器结合使用; 您快速转到感兴趣的间隔,收集所需间隔长度的统计数据,然后使用与权重结合使用的统计量来计算结果。

12.3。BBV命令行选项

BBV特定的命令行选项有:

--bb-out-file=<name> [default: bb.out.%p]

此选项选择基本块向量文件的名称。的 %p%q格式说明可以用来嵌入进程ID和/或名称的环境变量的内容,由于是用于芯选项的情况下 --log-file

--pc-out-file=<name> [default: pc.out.%p]

此选项选择PC文件的名称。该文件保存各种基本块的程序计数器地址和功能名称信息。这可以与基本块向量文件结合使用,通过函数名称快速转换,而不仅仅是指令计数。的 %p%q格式说明可以用来嵌入进程ID和/或名称的环境变量的内容,由于是用于芯选项的情况下 --log-file

--interval-size=<number> [default: 100000000]

此选项选择要使用的间隔的大小。默认值是100万条指令,这是一个常用的值。其他尺寸可以使用; 较小的间隔可以帮助程序更精细的阶段。然而,较小的间隔大小可能导致由于预热效应导致的准确性问题(当快速转发各种架构特征将被初始化时,在将“预热”到状态之前需要一些数量的指令进行完全模拟将没有快进,大间隔时间往往会减轻这种情况。)

--instr-count-only [default: no]

该选项指示该工具仅显示指令计数总计,并且不生成实际的基本块向量文件。这对于调试和收集指令计数信息而无需生成大型基本块向量文件非常有用。

12.4。基本块向量文件格式

基本块向量以固定间隔倾倒。这通常是每1亿个指令完成的; 该 --interval-size选项可用于更改此选项。

输出文件如下所示:

T:45:1024:189:99343
T:11:78573:15:1353:56:1
T:18:45:12:135353:56:78 314:4324263

每个新的间隔以T开始。在相同的行上跟随一系列基本块和频率对,一个在间隔期间输入的每个基本块。每个块/频率对的格式是冒号,后跟一个数字,唯一标识基本块,另一个冒号,然后是频率(这是块输入的次数乘以在块)。这些对由一个空格彼此分开。

频率计数乘以基本块中的指令数,以便权重计数,使得小基本块中的指令不被计入比大基本块中的指令更重要的位置。

SimPoint程序只处理以“T”开头的行。所有其他行都被忽略。传统的注释是用一个“#”字符开始的。一些其他BBV生成工具,如PinPoints,生成以“T”以外的字母开始的行,以指示有关正在运行的程序的更多信息。我们不会生成这些,因为SimPoint实用程序忽略它们。

12.5。履行

Valgrind提供创建BBV文件所需的所有信息。在当前的实现中,所有指令都将进行检测。这比使用基本块级别的方法慢(约两倍),但是有一些复杂性(特别是使用代表前缀检测),使得该方法更加困难。

Valgrind实际上提供了超级块级的仪器。超级块有一个入口点,但不同于基本块可以有多个出口点。一旦一个分支出现在一个块的中间,它被分割成一个新的基本块。由于Valgrind不能产生“真实”基本块,因此生成的BBV向量将与其他工具生成的不同。实际上,这似乎并不影响SimPoint结果的准确性。我们在内部强制 --vex-guest-chase-thresh=0 选择Valgrind,这迫使更基本的块状行为。

当超级块是第一次运行时,它会用我们的BBV程序进行测试。分配块信息(bbInfo)结构,其保存块的各种信息和统计信息。将唯一的块ID分配给块,然后将结构放入有序集中。然后,该块中的每个本地指令被调用为使用指向块信息结构的指针作为参数来调用指令计数例程。

在运行时,我们的指令计数例程每个本机指令被调用一次。访问相关的块信息结构,更新块计数和总指令数。如果总指令计数溢出间隔大小,则我们走排序集,写出在该间隔中访问的任何块的统计信息,然后将块计数器重置为零。

在x86和amd64架构上,计数代码具有处理代表前缀字符串指令的额外代码。这是因为实际的硬件将一个前缀的指令作为一个指令进行计数,而一个天真的Valgrind实现将会计数尽可能多(可能数百,数千甚至数百万)的指令。我们特别处理代表前缀的指令,以使结果与硬件性能计数器匹配。

BBV也计算fldcw指令。该指令以各种方式用于x86机器上; 将浮点值转换成整数时最常见。在Pentium 4系统上,退出的指令性能计数器将该指令计数为两条指令(所有其他已知处理器仅计数为一条)。当在Pentium 4系统上使用SimPoint时,这可能会影响结果。我们提供fldcw计数,以便用户可以评估是否会影响其结果,以避免使用奔腾4机器进行实验。可以为此工具添加一个模拟双重计数的选项,以便生成的BBV文件可用于使用Pentium 4系统上硬件性能计数器的实验。

12.6。线程可执行支持

BBV支持线程程序。当程序有多个线程时,会为每个线程创建一个附加的基本块向量文件(每个附加文件是指定的文件名,结尾附加了线程号)。

没有官方的方法使用SimPoint与线程工作负载。最常见的方法是独立运行每个线程的SimPoint,并使用一些确定性执行方法来尝试匹配原始工作负载。这可以用当前的BBV来实现。

12.7。验证

BBV已经在x86,amd64和ppc32平台上进行了测试。早期版本的BBV已经使用硬件性能计数器进行了详细的测试,这项工作在VMweaver和SA McKee的HiPEAC'08大会“使用动态二进制仪器生成多平台SimPoints:方法和准确性”的论文中进行了描述。

12.8。性能

使用此程序可以通过本地执行将执行速度降低约40倍。这取决于所使用的机器和正在运行的基准。在3.4 GHz Pentium D处理器上运行的SPEC CPU 2000基准测试中,减速范围从24x(mcf)到340x(vortex.2)。

BBV:实验基本块向量生成工具相关推荐

  1. 【NLP】bert4vec:一个基于预训练的句向量生成工具

    一个基于预训练的句向量生成工具 bert4vec:   https://github.com/zejunwang1/bert4vec 环境 transformers>=4.6.0,<5.0 ...

  2. 2022广州大学计算机网络实验--Windows网络测试工具

    广州大学计算机网络实验–Windows网络测试工具 文章目录 广州大学计算机网络实验--Windows网络测试工具 实验目的 实验环境 实验内容 总结 实验目的 理解上述知识点所涉及的基本概念并学会使 ...

  3. GIS二次开发:实验四 编辑工具条的实现

    实验四 编辑工具条的实现 一.实验目的 1.熟悉arcgis中的编辑工具 2.掌握通过arcgis engine 的toolbarcontrol添加编辑工具条 3.掌握自定义工具条的添加 二.实验仪器 ...

  4. 实验四 自动化测试工具-软件测试

    湖北汽车工业学院实验报告  实验四 自动化测试工具 按照上述实验步骤完成利用Junit对Calculator类测试过程,将异常测试.参数化测试等测试类方法的运行结果截图保证在下面. 2.采用QTP对W ...

  5. 微软开源实验环境构建工具 SimuLand,模拟攻击者知识技能

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 微软开源一款工具,名为 "SimuLand",用于构建实验环境,供安全团队模拟攻击并验证微软安全产品的检测效果. Si ...

  6. 计算机系统基础实验1---基本工具的使用

    实验准备 安装debian,并完成相关配置 1)更换apt源 2)配置SSH 在virtualBox网络选项卡中设置端口转发,名称SSH,主机端口22,子系统端口22 3)安装aptitude并用其代 ...

  7. 论文实验图片局部放大工具(可批量操作)

    1. 背景 在写学术论文时,我们经常会需要对实验效果图片进行局部放大,从而突出和其他方法结果的差异.一般大家的做法可能是在 PPT 上一张一张的去画,但这种方法耗时耗力,而且很难保证所有图片放大区域的 ...

  8. 验08利用gdb工具调试c语言程序,实验4_C开发工具和系统函数

    实验四C开发工具和系统函数 (一)C语言开发工具 目的 1.掌握gcc.make.gdb工具 2.熟悉c语言 内容 1.编写一个c语言程序:输出两行文字"Linux下的c也不是太难嘛!&qu ...

  9. 平面设计实验四 绘制工具和修饰工具

    一.实验目的: 通过实验,了解Photoshop各种绘制工具和修饰工具的操作:理解绘制和修饰工具的使用范围和使用方法. 二.实验器材: 硬件:计算机 软件:Photoshop CC 三.试验方法与步骤 ...

最新文章

  1. suffix tree
  2. oracle数据库主键自增序列_oracle数据库ID自增长--序列
  3. Asp.Net Core EndPoint 终结点路由工作原理解读
  4. 【python核心编程】第六章 序列
  5. mesh渲染到ui_在Unity中使用UGUI修改Mesh绘制几何图形
  6. oschina mysql limit_如何提高MySQL Limit查询的性能
  7. Awesomplete 屌爆了
  8. volatile的正确使用姿势
  9. c语言10个裁判,5个裁判可以对10个歌手进行打分,计算各个歌手的最终得分排列...
  10. C++新特性探究(十二):static_assert(提前判误)
  11. linux dd克隆系统后,Ubuntu14.04 dd命令克隆系统镜像安装到另一台机器上
  12. 计算机二级公共知识web,全国计算机等级考试二级web大纲
  13. excel 度分秒转换经纬度
  14. Linux 之查看 OpenCV 版本并卸载重装
  15. VS2008下 天龙客户端编译
  16. python猴子吃桃子的问题_张含韵忍不住一吃再吃的这种湖南美食,你可能买到假货...
  17. opencv4+contrib 编译
  18. 如何切换Linux用户(penguin)
  19. .Net Core 编码规范
  20. Python+Scrapy爬取腾讯新闻首页所有新闻及评论

热门文章

  1. cgi mysql数据库_Perl CGI中操作Mysql数据库
  2. 电脑怎么卸载软件干净_不要说你的电脑卸载很干净!分享两款卸载神器!
  3. TypeError: cannot convert the series to <class ‘float‘>问题解决
  4. 蜜蜂性别调控又有新机制?
  5. DxO FilmPack 5教程:对照片进行艺术渲染,使其具有专业电影的色彩和颗粒感
  6. 2.3 基本算法之递归变递推 1188 菲波那契数列(2) python
  7. 1.3 编程基础之算术表达式与顺序执行 10 计算并联电阻的阻值
  8. mysql pom.xml版本号_maven的pom.xml的依赖,什么情况下可以不写版本号?
  9. ideajdk升级_JDK升级为13
  10. python爱因斯坦的问题_爱因斯坦的思考题.py