- 博客(56)
- 收藏
- 关注
原创 GEM5 Garnet Standalone 命令行与stats.txt结果分析 (2)
上一篇:时隔几年,竟然还是自己看自己的博客才看懂怎么操作。补一点具体的实验和步骤,以及命令行 :以及在具体的代码之前,聊一下我对gem5的代码分层: 用户使用层,编译配置层(build+config),自我创造层(自己写source code,比如自己写一个控制单元)。
2025-02-01 06:47:01
757
原创 笔记1月5
再次验证以后,发现just exit能运行,blacksholes不行。所以删除kvm的checkpoint。下一步是用kvm的checkpoint 运行cpu-type=X86AtomicSimpleCPU .这个调用checkpoint只要几十秒钟,确切一点,在我的10700k上是19秒。
2025-01-06 06:40:03
824
原创 GEM5 Garnet +DSENT: NoC power model 功耗模型
其实很好理解,大家一般是用Synopsys的工具或者intel之类公司发布的文章数据作为ground truth,建了个model说在这些条件下算的值是比较准的,然后外推到其他没有ground truth的条件。但是自己写的unit是没有流片或者rtl参考值的,也就没人(包括DSENT)建model。除非自己流片或者自己写个rtl让合成工具给功耗估计值。
2024-06-17 18:46:35
1420
原创 gem5 garnet 合成流量: packet注入流程
下图就是全部. 剩下文字部分是细节补充,但是内容不变: bash调用python,用python配置好configuration, 一个cpu每个tick运行一次,requestport发出pkt. 这个博客总结了GEM5里,一个PYTHON文件如何生成pkt,这个pkt如何变成msg的. 以及一个msg如何变成flit的. msg如何从sequencer生成,到被Networkinterface操作有待下一篇完善细节..
2024-02-15 02:54:20
1612
4
原创 GEM5 Garnet Standalone 命令行与stats.txt结果分析
1.提供garnet standalone模式下命令行与结果的具体分析.2.提供一个参考的设置. 运行是10e6 的cycles,注入率从0.012 packet/flit慢慢增加, 2*10e4的packet数, 默认的delay是3个cycle queueing, 79的network delay.
2024-01-27 00:51:54
1157
原创 GEM5 Garnet Standalone packet injection pattern garnet包的生成路径:packet message flit
在不同的消息类别上对不同的一致性消息类型进行建模。//// GarnetSyntheticTraffic 采用 Garnet_standalone 一致性协议// 它对三个消息类/虚拟网络进行建模。// 它们是:请求、转发、响应。// 请求和转发是“控制”数据包(通常为 8 字节),// 而响应是“数据”包(通常为 72 字节)。//// 数据包从测试仪进入网络的生命周期:// (1) 该函数generatePkt()生成其中之一的数据包。
2024-01-25 21:33:34
1205
原创 GEM5 McPAT教程:源代码解读McPAT NoC功耗 arbiter部分
McPAT用的很多,大多只是写个python或perl脚本替换xml文件.没有深入到为什么xml脚本这些值要换,以及这写填进去xml的值是怎么影响计算的.本问从源代码一步步读下来,解释每一步是如何计算的.
2024-01-12 19:12:06
969
原创 GEM5 c++ python 文件 层级划分
gem5的pyton文件和c++文件很多,不同层级的文件让人很困扰,这里根据armgem5的作者提供的教程做一个统一的划分: python script, python objects, c++ objects.如果改python script,更像是做一些学习实验,如果改python object,相当于改一些调用方式,但还是复用了gem5 已有的功能,如果要加新功能,就得去改c++的objects.不然就得从下往上 读懂所有python object 才能调整,这样事倍功半.
2023-12-22 18:11:58
311
原创 gem5 garnet 拓扑结构之port: NI CPU ROUTER L1 L2
该协议对两级缓存层次结构进行建模。L1 缓存是核心私有的,而 L2 缓存是核心之间共享的。L1 Cache 分为指令缓存和数据缓存。L1 和 L2 缓存之间保持包含关系。在高层,协议有四个稳定状态:M、E、 S和I。处于M状态的块意味着该块是可写的(即具有独占许可)并且已被弄脏(即它是片上唯一有效的副本)。E状态表示具有独占权限(即可写)但尚未写入的缓存块。S 状态意味着缓存块是只读的,并且它可能存在于多个私有缓存以及共享缓存中的多个副本。I的意思是缓存块无效。
2023-12-22 04:47:09
2118
原创 gem5 RubyPort: mem_request_port作用与连接,以simple-MI_example.py为例
对rubyport最关键的代码出现了:src/mem/ruby/system/Sequencer.py没错,竟然没有一个单独的python文件 RubyPort.py 而是在 Sequencer.py里。step1 这个代码把c++和python联系起来了。step2 这个代码创建了新的python里的名字in_port同时也是弃用的slaveinterrupt_out_port同时也是弃用的masterpio_request_port同时也是弃用的 pio_master_port。
2023-12-21 22:59:59
2031
6
原创 GEM5 Garent CPU cache消息传递路径:1. NI部分
这段注释说明了peek在SLICC代码中的特殊用法,以及如何利用这个特殊的peek函数和in_msg变量来处理输入端口上的消息。这是实现gem5中复杂缓存一致性协议的关键机制之一,允许开发者以一种高效且声明式的方式来处理协议中的消息。
2023-12-21 05:07:57
957
2
原创 gem5 添加自定义打印信息到stats.txt & debug print信息
在 gem5/src/base/stats/group.hh 中VA_ARGSADD_STAT 宏通常在 gem5 源代码的统计系统相关的头文件中定义。这些头文件位于 src/base/stats/ 目录中。} stats;
2023-12-21 05:07:35
1280
原创 gem5 garnet router 连上 l1 l2 cache的创建与相连
我们用的是gem5/configs/deprecated/example/fs.py我们去看gem5/configs/ruby/Ruby.py 中的 create_system 和 define_options。第1段代码关注于根据用户选择的协议创建和配置仿真系统。第2段代码关注于定义用户可以通过命令行设置的仿真选项。虽然两者都动态导入并利用了特定的协议模块,但它们各自处理的是仿真配置的不同方面。
2023-12-21 01:06:59
1870
3
原创 GEM5教程: config.ini 结果分析
gem5 config ini 结果很多有4000多行,但是没有一个教程详细的介绍到底哪些参数对应哪些意思。我们分析了config ini的结果。
2023-12-21 00:21:40
222
原创 hack_back_ckpt.rcs 教程:gem5 从检查点恢复并使用和检查点不同的script
gem5 检查点可以作为加速,跳过不需要的部分。但是每次restore恢复的时候,因为disk fixed,使用的仍然是创建检查点时的脚本。这样每一次运行不同的脚本的时候就需要创建不同的检查点,失去了用检查点从而跳过系统启动时间的意义。hack_back_ckpt.rcs可以实现这个过程但是并没有具体的介绍如何使用依旧如何更改。实际上,在2023 gem523的版本,这个文件不能直接使用而是需要更改。我更改的全部代码在文后,并且提供了讲解。
2023-12-18 18:14:26
340
4
原创 Gem5 checkkpoint使用: checkpoint恢复并运行parsec benchmark,运行和checkpoint时不同的新script
Gem5 checkkpoint使用: 如何保存checkpoint,从checkpoint恢复,使用哪一层级的文件夹作为输入,-r 1制定检查点 顺序,并运行parsec benchmark。尤其提供运行和checkpoint时不同的新script的方法。不然每一次restore依旧是运行检查点创建时的脚本,就失去了检查点的加速意义(因为不能通用的跳过系统启动部分,给未知的不同的用途使用)。我们改动了hack_back_ckpt.rcs 在2023年可以使用,可以给任意生成检查点时未知的脚本提供检查点。
2023-12-18 18:02:27
1672
原创 GEM5 McPAT NoC教程: xml设置汇总-2023版
McPAT的xml有一些参数需要设置,noc的部分很多Gem5ToMcpatparser没有设置,也没有给出如何设置的条件。尤其是和活动相关的total access,不知道具体怎么设置,也不知道如何从gem5 stats.txt中导出。本文提供了2023年的收集到getech的教程和设置汇总。最重要的一句话是,system.Noc0:total_accesses = (all cores’) l2_demandaccess*2。
2023-12-15 19:40:01
680
2
原创 GEM5 +McPAT 联合仿真功率面积: McPAT论文
这里有4个部分,wire,array,和logic,以及一个时钟分配网络。这文章介绍了mcpat,先是介绍了它的工作原理以及和已有的物理存在的芯片对比,然后外推到多核。
2023-11-21 19:48:30
814
原创 GEM5 Garnet DVFS / NoC DVFS教程:ruby.clk_domain ruby.voltage_domain
我们现在知道了system. ruby 中,system是启动需要的硬件描述,ruby则是额外的加进去system的硬件模块的描述,这个增加的模块类名是RubySystem。我们在下面两章节讲述ruby的voltage domain 和 clock domain.system.ruby.clk_domain是1 system 从fs.py中调用了FSConfig.py中的函数(名字叫makeLinuxX86System)调用,生成了system。
2023-11-16 19:21:44
1549
1
原创 GEM5 Garnet官方教程:乔治亚理工课程-L07-09 flow control流量控制
是garnet提出者,在乔治亚理工授课的课程。L10-L12,路由器微架构。关于router的架构。
2023-11-16 04:09:57
306
4
原创 GEM5 Garnet官方教程:乔治亚理工课程-L07-09 flow control流量控制
这是乔治亚理工课程-L07-09 flow control简介。介绍了 vc channel和back pressure。
2023-11-16 00:52:53
387
原创 GEM5 Garnet官方教程:乔治亚理工课程-L05 L06 deadlocks 死锁
关于死锁的部分,了解了课程级别的基础知识。实践中,如果是用于gem5 ruby garnet的延伸研究,可能知道常用的x-y routing就已经够了。
2023-11-15 21:40:47
263
原创 GEM5 Garnet官方教程:乔治亚理工课程-L02 /L03拓扑结构
这是乔治亚理工课程-L02 和l03 TOPOLOGY 1 和 TOPOLOGY 2的部分,主要讲了拓扑结构。
2023-11-15 19:21:58
575
原创 GEM5 Garnet官方教程:乔治亚理工课程-L01 简介
什么是互联网络:有不同的级别,数据中心与超算级别,片上微架构级别,还有电路级别。GEM5 garnet做的是什么:是processor和memory之间,以及他们各自之间的连接具体一点,则会出现相互之间链接的线。下图其实挺关键的,核心是l1私有,l2共享,core取的是l1的数据以及caches missing后取的l2的数据,至于l2怎么找memory取,那是l2看的事情而不是core看的事情。理解了这个,会对后面router以及NoC到底在做什么有比较清晰的了解。
2023-11-15 18:03:16
748
原创 GEM5 fs.py 代码解读 命令行解读
兜兜转转最后还是回到了了fs.py。原因是:1.太多的老教程都用了它,2023年它归于废弃,但是新的能garnet+fs的默认config还没出现,在还需要看fs.py的初始阶段就要自己手写的话那不是何不食肉靡么。自带的ruby_random_test.py支持garnet但是不支持fs。相比之下,arm/ruby_fs.py非常友好u原生就支持ruby_fs,看的出来arm 对gem5的社区支持比较好。
2023-11-15 05:32:25
1182
7
原创 GEM5教程: stats.txt 结果分析
作为对比,我们的用了garnet的x86-moeshi hammer是3.7x1e9的指令,gem5教程的x86用的是看上去4x1e9的指令,arm的则用了2x1e9多一点。如果是gem5 的教程,用了一堆gem5art的,单核跑blackscholes,simsmall是 ~4x1e3 million=4x1e9。用的simsmall, 模拟的2-core 4Ghz ,花了2x1e9。模拟运行了11.6s,我们的simInsts 仿真指令数是3,710,533,377,也就是3.7x1e9.
2023-11-13 21:46:09
979
4
原创 gem5 工具: gem5 resources
简介gem5有提供一些现成的镜像,避免自己手动编译镜像和二进制文件的麻烦。路径:https://resources.gem5.org/ 或者搜索 gem5 resource。
2023-11-10 18:50:12
240
原创 GEM5 Ruby Garnet 学习材料 PPT:Interconnect by Marjan Fariborz
大致就是说corssbars和buses不行,还得是NoC好。(对于研究兴趣在GEM5 Ruby 下Garnet做NoC相关课题的小伙伴来说,其实这就是默认的事情233。那GEM5 有什么类型的网络呢:有simple和garnet两种。simple不行,还得是garnet好!(当然simple network其实对很多不研究noc的研究者完全够用了,我见过挺多人不关心garnet甚至不关心ruby的)
2023-11-09 18:27:52
277
原创 GEM5 Ruby Garnet kernel 源代码解读: 2/38
简介这一篇是gem5 Ruby Garnet kernel的源代码解读。之前写了不少怎么用GEM5以及关于configuration的代码,都是gem5 user层面的代码解读,这一系列会有38个文件,这一篇读一共6个文件。两个文件 是python文件,2个是network.cc/hh两个是router.cc/hh。
2023-11-09 17:45:10
503
原创 GEM5 GARNET DVFS论文阅读 Part 1:Thread Voting DVFS for Manycore NoCs
关于下面这篇文章的笔记和对应的博士论文的笔记:Y. Yao phd thesis “Power and Performance Optimization for Network-on-Chip based Many-Core Processors”, 主要是chapter 2 Performance characteristics based NoC power management。
2023-11-07 18:39:47
269
2
原创 EM5官方教程全流程: part 3 RUBY
这篇大致讲了讲part 3 ruby的部分,主要是关于ruby作为缓存一致性的caches system。而且重点关注了多核情况下的互联。
2023-11-06 21:28:22
828
原创 GEM5官方教程全流程: part 1
gem5有一个很重要甚至离谱的事情是,和计算机领域很多东西一样,它变化很快,所以时间很重要: 这是2023年11月的官方教程。我跑了一遍并记录下来。 本文将教程的A部分入门完成了,下一步是B部分修改和扩展,再下一步是C部分ruby缓存一致性。
2023-11-06 01:12:23
3195
原创 GEM5 Garnet 代码解读:for x86 parsec full system configuration
Garnet 可以用与full system或者standalone模式。standalone模式很多人写过,但是full system模式没有,而且涉及到可用的实验结果的,例如parsec的,更是几乎没有。这里主要是讲garnet的overview,topology,还有频率/DVFS。最后总结,要用garnet就要用ruby,ruby是在mem下面的。也就是说,GEM5仿真的board设置,需要设为ruby,才可以有NoC的相关功能。
2023-11-03 20:52:44
783
2
原创 GEM5 x86 parsec full system configuration x86-parsec-benchmarks.py 设置详解
之前介绍了用默认的python文件作为configuration,跑通结果。如果需要修改配置,则需要了解到底用了哪些东西才能进行更改。本文逐行分析了configs/example/gem5_library/ x86-parsec-benchmarks.py的代码,即官方教程对parsec full system的配置。而且参考了 ruby_random_test.py 的配置,加以分析parsec + garnet的系统配置。
2023-11-02 18:53:55
545
4
原创 GEM5 full system Parsec tutorial 2024 parsec 全系统教程2024年可运行
本文于2023年10月实测可以编译完成GEM5 full system 的parsec benchmar运行。本文提供了一镜到底的手把手全流程教程。gem的build和disk image总有很多问题,这一次用docker和尽可能的下载而非本地编译来实现。也尽可能避开gem5art的组件等花里胡哨带来潜在bug的功能。
2023-10-24 21:40:15
1271
13
原创 手把手python和C++交互,python调用C++程序并在python里显示c++的输出结果_pybind11
用pybind11,python和C++交互,python调用C++程序并在python里显示c++的输出结果。可以用于:已经有一个c++程序,想在python里显示这个c++程序的结果,在python里做一些运算(例如调用ML的库),并且可以返回给c++。自此,我们 通过编译制造一个 example.so 文件,在python里可以调用一个c++的代码,并且在python里显示c++的运行结果。
2023-09-20 22:54:38
572
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人