首页 > 其他分享 >checkpoint 学习分析1 —— 1. SimPoint

checkpoint 学习分析1 —— 1. SimPoint

时间:2024-09-14 18:24:57浏览次数:1  
标签:学习 TimesExecuted BB interval SimPoint checkpoint basic 架构 block

背景

现代计算机架构研究需要理解处理器在执行应用程序时的周期级行为。这需要模拟器模型化每一个周期。但是,这样做是以牺牲速度为代价的。更糟糕的是,为了在性能、复杂性、面积、和功耗之间做权衡,benchemark需要在不同的架构配置上模拟运行。做计算机架构研究就绕不过simpoint,为了度量所实现的微架构的性能,通常都需要在新架构上运行一些大型的benchmark程序,俗称跑分。在多种多样的跑分软件中,SPEC基本上称霸了CPU性能测试的江湖,SPEC对厂商有强约束条件,在跑分时需要严格按照规定的规则运行SPEC benchmark程序,跑出的分数也就更能体现微架构的性能。

既然是作微架构研究,就肯定是要在流片前完成,没有流片而又需要在上面跑程序就只有两种方法:

  1. 软件模拟CPU微架构;
  2. FPGA原型验证;
    • FPGA原型验证需要在RTL完成后进行功能仿真、综合、P&R和时序仿真,然后才能在FPGA上运行,周期长,代价高。

软件模拟有可以分为两种:

  1. EDA功能仿真后进行benchmark跑分,这种方式其实是FPGA原型验证中的一环,速度感人;
  2. 直接用软件模拟CPU各组件,实现模块级的cycle accurate,这种是目前最常用的,功能和架构上跟最终的CPU微架构更接近,速度也可以接受,而GEM5就是这种类型的模拟器中的佼佼者,也是当前微架构研究使用最广泛的,既可以做CPU微架构的研究也可以做memory Hierarchy的性能研究。

但即便是已经使用了GEM5这种性能较好的模拟器,要运行大型程序,如SPEC中包含的benchmark程序,速度上也是较长。为了提高效率,各路大神奇招百出,而simpoint就是很棒的一种方法。

simpoint涉及术语列表

definition describe
Interval 将程序的执行分解为连续的不重叠interval。之前版本的Simpoint要求所有的interval大小相同。Simpoint 3.0仍然支持固定长度区间,但也提供可变长度区间的支持
Phase 程序执行中具有相似行为的一组intervals,一个phase可以有不连续的intervals组成,因此一个phase可以在执行过程中多次出现。
Similarity similarity定义了两个区间之间的行为在某些指标集上的接近程度。良好形成的phase应该包含在各种架构指标(e.g IPC、cache misses、branch misprediction)上表现出相似行为的intervals。
Frequency Vector 每个interval由一个frequency vector表示,该vector表示程序在该interval的执行情况。最常用的frequency vector是basic block vector,它表示在一个interval内每个basic block vector被执行的次数。
frequency vector还可以用于跟踪其他的代码结构,例如branch edges, loops, procedures, registers, opcodes, data, 或program working set行为,只要跟踪这些结构的使用能够提供程序行为的特征。
Similarity Metric 两个interval之间的相似性是通过计算这两个intervals之间的距离来确定的。SimPoint通过计算这两个intervals之间的Euclidean距离来判断相似性。
Phase Classification phase classification将interval根据相似性度量分组为具有相似行为的phase。phase classification是特定于运行特定输入的程序二进制文件。

SimPoint的核心思想

程序运行时所执行的指令流切分成连续的不重叠intervals,然后把有相似行为的intervals聚和成一个phase,然后在每个聚类中选取一个指令interval做代表,使用GEM5仿真的时候只执行选取出的指令interval运行,然后根据每个聚类的切分成连续的不重叠intervals大小对执行的指令interval加权重,再加到一起就是原程序的跑分结果。实验证明在指令集和编译器相同的情况下,与原程序跑分结果约等,可以作为相同指令集/编译器情况下的微架构性能对比。

SimPoint的执行步骤

  1. Basic Block Vector(BBV)。basic block由程序中不包含跳转指令的一段连续指令组成。在simpoint中对程序的运行时先按100Million条指令为单位切interval,然后统计这段时间内,每个basic block执行的次数,再将每个basic block执行的次数和block中包含的指令条数相乘就得到这个basic block的对应的值,所有这些值组成一个向量。如果程序运行时包含N个100Million条指令组成的指令流,就会有N个向量,统称为basic block vector

上面三个图表示一个程序的3个intervals,从图中看每个interval包含5个basic block,使用上面描述方法统计得到的basic block vector如下:

此步骤另一个需要注意的点是,程序的切分intervals和统计是在运行时完成的,所以如果要得到结果需要至少运行一次要跑的程序,并实时的进行统计,然后按固定格式输出到文件中供接下来的步骤使用。

输出文件格式为:

T:BB_X:TimesExecuted :BB_Y:TimesExecuted ... :BB_Z:TimesExecuted
   T:BB_X:TimesExecuted :BB_Y:TimesExecuted ... :BB_Z:TimesExecuted
   T:BB_X:TimesExecuted :BB_Y:TimesExecuted ... :BB_Z:TimesExecuted
    ...
    ...
    ...
   T:BB_X:TimesExecuted :BB_Y:TimesExecuted ... :BB_Z:TimesExecuted
   T:BB_X:TimesExecuted :BB_Y:TimesExecuted ... :BB_Z:TimesExecuted

文件中的每行记录对应一个interval,T为interval的编号,interval编号从0开始;BB_*为basic block的编号;TimesExecuted为对应的basic block的值,值的计算方式为在此interval中对应的block出现的次数和block中指令的个数的乘积。

  1. 聚类。BBV中每条记录对应一个interval中每个basic block的统计值,如果有两条记录中每个block的值完全相同,那跑这两个interval的指令流和跑其中一个interval的指令流两次,在统计概念上来说效果是一样的,聚类也是依赖于此。但要做到两个interval完全一样的可能性比较低,做个退让,把“相似”的interval也归为一类。相似也需要有个度量来确定两个interval是否一致,这里选择使用欧几里得距离或曼哈顿距离来度量interval的相似度。OK,现在可以算每两个interval的距离了,那哪些interval应该聚为一类呢?这是机器学习中的经典问题,而选择也是经典的k-means算法。将BBV中每条记录作为一个M维空间上的点,k-means算法起始于从BBV中选择k个随机点作为中心点,然后计算每个点和这k个中心点的距离,将每个点聚类到跟此点最近的中心点上,由此形成k个点集,然后在每个点集中重新选择中心点,重复此过程直到点集和中心点不在变化。
    通常BBV中记录的维度都很大,导致k-means算法运行时间过长,可通过random linear projection进行降维,实验显示降维到15个维度是最合适的, 不设置参数default=15。

  2. 选择k。k-means算法还有个缺点就是需要提前确定k的值,k表示最后需要聚合成几个类。simpoint中用的方法是按某种规则选择多个k值,分别计算得到聚类的结果后使用beyesian information criteron(BIC)算法进行打分,打分最高的k值作为最终的选择。

simpoint会输出两个文件:simpoints文件和weights文件。simpoints中保存了选择的interval的编号,weights中包含了选择的interval的权重。

  1. 仿真。拿到步骤3的simpoints后就知道选择interval编号了,可以使用GEM5快速forward到对应的interval,然后切换到GEM5的detailCPU模式开始运行。为了在后续仿真时跳过forward过程,加速仿真流程,GEM5提供了checkpoint功能,第一次运行时,forward到interval的起始点后使用checkpoint功能把快照保存起来,以后运行时直接从快照恢复速度很快很多。

refernece

  1. simpoint原理
  2. simpoint-3.0论文

标签:学习,TimesExecuted,BB,interval,SimPoint,checkpoint,basic,架构,block
From: https://www.cnblogs.com/sys-123456/p/18413887

相关文章

  • 全面的 Java 学习路线:从零基础到高级开发
    全面的Java学习路线:从零基础到高级开发Java是一门经典且广泛使用的编程语言,不仅用于企业级应用开发,也在Android开发、分布式系统、云计算等领域中占据重要地位。对于想要学习或深入掌握Java的开发者来说,清晰的学习路线至关重要。本文将为你详细梳理从初学到高级的J......
  • 最短路之 $dijekstra$ 学习笔记
    最短路之\(dijekstra\)学习笔记复习\(dijekstra!\)怎么说,就写一下\(dij\)的实现过程吧\(dij\)的思路就是,将结点分成两个集合:已确定最短路长度的点集(记为$S$集合)的和未确定最短路长度的点集(记为$T$集合)。一开始所有的点都属于$T$集合。初始化$dis(s)=0$,其......
  • 学习资料
    二分答案递归与分治深搜差分和前缀和贪心背包STL双指针图和树的基础和遍历最短路算法最小生成树线段树和树状数组ST表组合数学树形DP线性代数树剖树剖......
  • 最小生成树之 Prim 算法学习笔记
    最小生成树之Prim算法学习笔记emm...在一通瞎搞奋战之后,prim被我收入囊中!\(prim\)的思路其实非常简单,和\(dij\)有一丝相似之处,可能会搞混设最小生成树上的集合为\(S\),所有点一开始到\(S\)的距离都是\(+\infty\)从任意一个点开始,将其放入\(S\),然后更新与这个点相邻......
  • self-play RL学习笔记
    让AI用随机的路径尝试新的任务,如果效果超预期,那就更新神经网络的权重,使得AI记住多使用这个成功的事件,再开始下一次的尝试。——llyaSutskever这两天炸裂朋友圈的OpenAI草莓大模型o1和此前代码能力大幅升级的Claude3.5,业内都猜测经过了自博弈强化学习(self-playRL)。1......
  • 深度学习YOLO人员抽烟AI检测算法在智慧安防领域的创新应用
    随着人工智能技术的飞速发展,计算机视觉和深度学习算法在各个领域的应用日益广泛。其中,人员抽烟AI检测算法以其高效、精准的特点,成为公共场所、工厂、学校等场景中的得力助手。本文将介绍TSINGSEE青犀AI智能分析网关V4人员抽烟检测算法的基本原理、实现步骤以及其在多个实际场景......
  • [Python数据采集]Playwright爬虫数据采集代码示例!!值得深入学习代码
    【Playwright爬虫数据采集代码示例!!值得深入学习代码】为了提高反爬虫的稳定性,代理池和模拟真实用户行为是常见的优化手段。以下我将给出代理池的实现方式,并结合模拟真实用户行为的代码示例。1.代理池实现:通过代理池,可以定期切换IP,避免因同一个IP频繁请求而被封锁。代理池可......
  • apple m芯片的深度学习框架 MLX 安装
    概述二手淘到一个M1MAX64g512g的applestudio。看了一下专为它开发的框架MLX,还有一堆例子。在官方网站的帮助文件中,找到了安装方法。官网安装PythonAPITobuildandinstalltheMLXpythonlibraryfromsource,first,cloneMLXfromitsGitHubrepo:gitclone......
  • 实战中学习:CMA和DMA_CMA导致安装大游戏失败的问题
     在实际遇到的问题中,遇到Android虚机中安装超过1.8G以上的大游戏APK文件时,就会出现安装失败的现象,通过分析,发现在/data/目录下进行大文件拷贝时,就会出现数据不一致,发现时内核打开了CMA和DMA_CMA,解决方法目前主要回退,将CMA和DMA_CMA的配置关闭现象: 拷贝5次:数据不一致/data/app......
  • 春意教育:SpringBoot在线学习平台开发
    第二章关键技术的研究2.1相关技术网络教学平台是在Java+MySQL开发环境的基础上开发的。Java是一种服务器端脚本语言,易于学习,实用且面向用户。全球超过35%的Java驱动的互联网站点使用Java。MySQL是一个数据库管理系统,因为它的体积小但速度快,成本低,或者开源受到中小型网站......