- 博客(48)
- 收藏
- 关注
原创 SPEC CPU2017的runcpu命令使用
特别注意, 和 是两个不同的参数,它们的作用和用途是不同的: 参数用于生成符合 SPEC 基准测试提交标准 的结果报告。它的主要功能是确保测试结果符合SPEC的规范,可以正式提交给SPEC进行认证和审核。 参数用于指定测试结果文件的 输出文件名 和路径。SPEC CPU2017运行完基准测试后,自动生成的结果会存储在指定的目录中。查看这些结果有多种方式:(1) 结果目录测试结果通常存储在安装目录的 子目录中。每次测试运行都会生成一个新的结果文件夹,文件夹名称通常以时间戳和测试配置命名。例如:(2)
2024-09-05 15:22:09 1415
翻译 Gem5经典缓存
默认的缓存是带有MSHR(未命中状态保持寄存器)和WB(写缓冲区)的非阻塞缓存,用于处理读写未命中。缓存也可以启用预取(通常在最后一级缓存中)。Gem5中实现了多种和。这些策略分别定义了在给定地址的情况下可以用于块替换的块,以及如何使用地址信息找到块的位置。默认情况下,缓存行使用策略进行替换,并使用策略进行索引。
2024-07-23 15:45:52 49
翻译 内存索引策略
索引策略根据地址确定块映射到的位置。索引策略的最重要方法是getPossibleEntries()和regenerateAddr():getPossibleEntries()确定给定地址可以映射到的条目列表。regenerateAddr()使用存储在条目中的地址信息来确定其完整的原始地址。和。
2024-07-23 15:29:19 39
翻译 经典内存系统一致性
上层缓存(即靠近CPU的缓存)的请求以预期的方式向内存传播:L1未命中会在本地L1/L2总线上广播,由总线上的其他L1监听(如果没有响应)并由L2服务。在L2中为所有L1保留一套额外的标签,这样可以同时监听它们(参见Compaq Piranha)——这在层次结构不太深时是合理的,但现在你必须根据上层缓存的数量、大小和配置来调整下层缓存中的标签大小,这会导致配置上的困难。注意:截至2.0b4版本,该协议仍有一些漏洞,特别是如果你有多个L2,每个L2后面有多个L1,但我相信它适用于2.0b3中可行的任何配置。
2024-07-23 15:27:25 38
翻译 Gem5替换策略
Gem5实现了多种替换策略。每种策略使用特定的替换数据来确定驱逐时的替换受害者。所有的替换策略都优先考虑驱逐无效块。一个替换策略包含reset()、touch()、invalidate()和getVictim()方法。每个方法以不同的方式处理替换数据。reset()用于初始化替换数据(即验证)。它应该仅在条目插入时调用,且在失效之前不应再次调用。对条目的第一次访问必须始终是reset()。touch()在访问替换数据时使用,因此应在访问条目时调用。它会更新替换数据。
2024-07-23 15:24:47 59
翻译 M5内存系统
M5的新内存系统(在第一个2.0测试版发布时引入)设计有以下目标:在定时模式下统一定时和功能访问。旧的内存系统中,定时访问没有数据,只是计算操作所需的时间。然后单独的功能访问才使操作对系统可见。这种方法令人困惑,允许模拟组件意外作弊,并且阻止内存系统返回与定时相关的值,这对于执行中执行的CPU模型是不合理的。简化内存系统代码-减少大量的模板化和重复代码。更容易进行更改,特别是允许除了共享总线以外的其他内存互连。关于新的一致性协议的详细信息,请参见2.0b4中引入的(以及重大的缓存模型重写)。
2024-07-23 15:21:59 40
翻译 客户端二进制文件
gsutil是一个Python应用程序,可以让您从命令行访问Cloud Storage。gem5官方提供了一套有用的预构建二进制文件,用户可以下载这些文件(以免用户从头重新编译)。如果遇到问题,我们会尽力帮助,但不保证它们能与最新版本的gem5一起使用。快速模型(使用m5–semi操作):/init.semi.gem5。kvm(使用m5–addr操作):/init.addr.gem5。下面的压缩包包含一组二进制文件:Linux内核和一组引导程序。默认(使用m5操作):/init.gem5。
2024-07-22 15:14:38 38
翻译 构建Android Marshmallow
要在gem5中成功运行Android,需要一个镜像、一个兼容的内核和一个为模拟器配置的设备树二进制文件(.dtb)。本指南展示了如何使用支持Mali的3.14内核构建Android Marshmallow 32位版本。将来会添加一个额外的部分,介绍如何构建支持Mali的 4.4 内核。
2024-07-22 15:11:36 56
翻译 m5终端(m5 term)
m5term程序允许用户连接到全系统gem5提供的模拟控制台接口。M5Term可用于与模拟器交互,但用户必须经常设置各种终端设置才能正常工作。
2024-07-22 12:07:41 66
翻译 创建磁盘镜像
我们使用Packer和QEMU来自动化磁盘创建过程。本质上,QEMU负责设置虚拟机以及在构建过程中与磁盘镜像的所有交互。交互包括将Ubuntu服务器安装到磁盘镜像中,将文件从你的机器复制到磁盘镜像中,以及在Ubuntu安装后在磁盘镜像上运行脚本。不过,我们不会直接使用QEMU。Packer提供了一种更简单的方法,通过JSON脚本与QEMU交互,比从命令行使用QEMU更加直观。默认的 packer 脚本template.json应根据所需的磁盘镜像和构建过程中的可用资源进行修改和调整。
2024-07-22 11:23:25 351
翻译 调试模拟代码
gem5内置了gdb远程调试器接口,支持用户进行远程调试。用户可以启动主机平台的gdb,监控模拟机器上代码在做的事情(FS模式下的内核,或SE模式下的程序)。gdb与模拟的gem5系统进行交互(talk),就像该gem5系统是一个真正的机器/进程一样(由于gem5的执行是确定的,而且gem5的远程调试器接口又能保证不会干扰到模拟系统上的执行,这种做法实际上会更好)。如果正模拟系统的指令集架构(ISA)于其使用的本地主机的指令集架构不同,那么用户就需要用跨架构的gdb工具,可以参考后文的说明。
2024-04-17 10:10:23 96
翻译 gem5应用程序编程接口
应用程序编程接口(Application Programming Interface, API),是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。可以通过gem5的Doxygen Module页面查看被标记为API的全部方法和变量的完整文档。
2024-04-03 18:11:20 77 1
翻译 基于调试器的调试方法
用户可能需要使用调试器(比如gdb)来详细检查gem5在做什么,如果还是单独使用基于跟踪的调试方法就可能不够用了,此时用户肯定都需要使用gem5.debug二进制文件。理想情况下,查看trace至少可以缩小可能出现问题点的周期范围,到达关注问题点的最快方法是使用一个DebugEvent(调试事件),它会进入gem5的事件队列,并在到达指定周期时通过向进程发送一个SIGTRAP信号强制进入调试器。
2024-04-03 17:15:57 77
翻译 基于Trace的调试方法
最简单的gem5调试方法是让gem5自己打印其运行时的跟踪信息。gem5模拟器本身已经包含了许多DPRINTF语句,这些语句可以打印潜在关键事件的跟踪描述信息,而且每个DPRINTF语句都与一个调试标志(debug flag)相关联(例如,总线、缓存、以太网、磁盘等)。
2024-04-03 15:12:41 291
翻译 gem5资源库说明
要在gem5中使用自定义资源,建议使用gem5目前支持的数据源格式之一:MongoDB Atlas、本地JSON文件或远程JSON文件。用户可在运行文件时重写GEM5_DEFAULT_CONFIG这个变量来使用自己的配置文件。需要特别注意的是,用户添加的任何自定义资源都必须符合gem5资源架构。
2024-03-05 11:55:10 129
翻译 在gem5中使用本地资源和数据源
本例将演示如何设置自定义配置并使用用户的本地资源,这里使用JSON格式文件作为资源的数据源来说明。创建自定义资源数据源首先需要为资源创建一个本地JSON对象。这是一个基本资源,本例是一个本地资源(本地JSON)与获取到的资源一起使用例子。这个基本资源需要一个源文件,因此创建一个名为fake-binary的文件,它只是一个空文件。"size": 1,"tags": ["test"],"23.0"],注意:资源的JSON对象应遵循gem5资源架构。
2024-03-04 18:15:14 97
翻译 使用gem5标准库创建自定义板
例如,本文的板没有输入输出(IO)总线,因此,这里has_io_bus函数的实现是返回假(False)值,并且有一个get_io_bus函数,调用它时引发(raise)NotImplementedError异常。本文介绍用户应如何通过使用gem5标准库创建自己的板(board),介绍是基于创建一个继承自MinorCPU的RiscvMatched板,它是一个RISC-V 预构建板,该板可在目录src/python/gem5/prebuilt/riscvmatched下找到。这里创建的板已经有了处理器,
2024-03-04 18:03:07 110
翻译 开发gem5自定义组件
设计中每个可用的gem5组件都继承自上述四个组件之一,用户必须在抽象板类(AbstractBoard)的构造函数中指定其它三者,即指定AbstractProcessor、AbstractMemorySystem和AbstractCacheHierarchy,就本设计而言,可以采用任意板(board),板可以使用继承自AbstractProcessor、AbstractMemorySystem和AbstractCacheHierarchy的组件的任意组合。
2024-02-08 11:23:20 210
翻译 使用gem5标准库构建x86全系统(full-system)仿真
模拟的系统会利用gem5内核切换的能力,允许以KVM快进模式(fast-forward)启动操作系统并切换到精确的(detailed)处理器(cpu)模型以运行基准测试,并在双核设置中使用MESI一致性协议的两级Ruby高速缓存的层次结构。因此,readfile_contents的值会在系统启动时执行。注意:务必确保用户的主机系统支持KVM,如果没有KVM支持则需要删除这里的kvm_required检查,还需要注意的是只有主机平台和仿真的ISA相同时(例如,X86主机和X86模拟),KVM才有效。
2024-02-07 22:45:18 421
翻译 gem5 标准库概述
gem5标准库为用户提供常用的组件、特性和功能以提高开发效率。标准库的前身称为“gem5 components (gem5组件)”,其时以alpha状态发布,自起完全发布。熟悉gem5标准库有助于用户创造出更佳的模拟仿真,本文介绍包括构建系统调用模拟(syscall emulation)仿真和全系统仿真(full-system simulations)的教程,以及用户进行库扩展和参与贡献的指南,gem5仓库下的configs/examples/gem5_library目录包含有使用标准库的示例脚本。
2024-02-06 14:30:07 130
翻译 使用gem5标准库构建“HelloWorld”的例子
from gem5.”表示从gem5的标准库导入,开头是“from gem5.components”的行表示从gem5组件包导入组件,开头是“from gem5.resources”和“from gem5.simulate”的行则分别表示从资源包和模拟包导入资源和模拟,所有的这些包、组件、资源和模拟都是gem5标准库的一部分。再举一个组件更换的例子,本例中使用的NoCache的无缓存结构,也可以更换为其它经典的缓存层次结构,例如更换为PrivateL1CacheHierarchy的缓存层次结构。
2024-02-06 14:13:05 233
翻译 向SimObjects和更多事件中添加参数
gem5的Python接口最强大的部分之一是他将Python的参数传递到gem5中的C++对象。本节探讨SimObjects用到的一些类型的参数,并在中简单HelloObject的基础上学习如何使用参数。
2024-01-16 11:34:48 90
翻译 事件驱动编程
这个名字通常是拥有这个事件的SimObject的名字,当这个名字打印时,字符串 “.wrapped_function_event”会自动附加到名称的尾部。不带参数且没有返回值的函数(std::function),通常是调用成员函数的简单Lambda函数,它实现用户想要的任何功能。在本例中,我们使用一个事件函数封装(EventFunctionWrapper),因为它可以用于执行。继承而来的一个类,但是,gem5提供了一个封装函数,用于创建简单的事件。GEM5 是事件驱动的仿真器。
2024-01-15 17:46:42 106
翻译 调试 gem5
事实上,这里的Exec标志实际是多个调试标志的集合,用户可以通过运行带有--debug-help参数的gem5命令来看到它,同时还可以看到所有可用的调试标志。虽然可以使用gem5中的常规的C/C++ I/O,但强烈建议不要这样做,而是改用gem5 的调试工具。这些标志允许每个组件具有许多debug-print语句,而且这些语句不必同时启动,运行gem5时,用户可以从命令行使能指定的调试标志。(包括大小写),使得用户可以使用该调试标志。因此,用户需要在任何使用调试标志的文件中包含这个自动产生的头文件。
2024-01-15 16:00:50 87
原创 Improving timing for FIFO by adding registers
Every now and then we find that the design's FIFO signals in the critical paths. There are several reasons why a FIFO may be involved:The FIFO's rd_en signal is used in combinatorical logic within the FIFO, which calculates the next read address, which m
2021-12-17 15:25:31 381
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人