- 按照gem5官网learning_gem5教程顺序学习,搭建一个简单的系统,并在这个简单系统的基础上加入cache层次结构
学习内容:
- 熟悉并回忆linux系统
- 学习搭建模拟器的一般步骤
- 进度:至Getting Started–Adding cache to the configuration script
学习产出:
意外事件
在自学进度至产生报错1时,休息一会吃个饭之后回来打开电脑之后发生了一系列事件导致最终系统崩坏。
(详情参见Ubuntu20.04+gem5环境搭建记录篇)
脚本文件:
gem5/configs/tutorial/simple.py
gem5/configs/tutorial/caches.py
gem5/configs/tutorial/two_level.py
报错记录:
// 报错信息
AttributeError: object 'System' has no attribute 'l1_cache' (C++
object is not yet constructed, so wrapped C++ methods are
unavailable.)
自己根据教程一步步构建的simple.py会报AttributeError,具体可能需要对比看一下这两个文件差在那里,就知道自己错在哪了,想必是细节上的问题,但还是记录一下
问题原因找到了,果然不能无脑地一直跟随教程,要多思考(简单自我反思一下)
这个simple版本的模型并没有定义cache,教程中出现的l1_cache仅是对主从端口的说明,不应该加到代码中,因为cache并没有实例化并加入system,所以会报system不存在l1_cache的错
最终输出:
在simple结构的基础上加入两级cache,成功运行helloworld测试代码
总结: 理解系统搭建步骤很重要,并且要注重端口连接上的细节
补充内容:
1.向配置脚本中添加选项,以通过选项传参改变脚本参数
// 使用python自带的optparse库 from optparse import OptionParser parser = OptionParser() parser.add_option('--l1i_size', help="L1 instruction cache size") parser.add_option('--l1d_size', help="L1 data cache size") parser.add_option('--l2_size', help="Unified L2 cache size") (options, args) = parser.parse_args() # 在二级缓存配置中加入选项
首先,更改two_level.py,加入选项options
然后,更改caches.py,使用传入参数调用构造函数
2.理解gem5统计数据以及输出
config.ini:包含为模拟创建的每个SimObject及其参数值的列表
config.json:与config.ini相同,但格式为json
stats.txt:为模拟注册的所有gem5统计信息的文本表示形式
3.采用默认的配置脚本
gem5开发人员提供了许多脚本来引导构建系统的过程,而不需要开发人员从头构建整个系统
使用 se.py 和 fs.py// 使用gem5提供的默认配置脚本se.py的示例,可以通过选项来指定系统参数 build/X86/gem5.opt configs/example/se.py --cmd=tests/test-progs/hello/bin/x86/linux/hello --cpu-type=TimingSimpleCPU --l1d_size=64kB --l1i_size=16kB --caches
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)