gem5学习(13):使用默认配置脚本——Using the default configuration scripts

本文主要是介绍gem5学习(13):使用默认配置脚本——Using the default configuration scripts,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、A tour of the directory structure

1、boot/

2、common/

3、dram/

4、example/

5、learning_gem5/

6、network/

7、nvm/

8、ruby/

9、splash2/

10、topologies/

二、Using se.py and fs.py

三、Some common options se.py and fs.py


在这个教程中,将探讨如何使用gem5附带的默认配置脚本。

gem5附带了许多配置脚本,使用户快速使用gem5。但是在使用gem5进行计算机体系结构研究时,应该充分了解正在模拟的系统。这个教程就是指导用户了解系统中的默认配置脚本的重要选项和部分内容。

前面介绍的是从头开始创建自己的脚本,这样可以自定义系统参数。但是例如完整的ARM或x86系统等架构非常复杂,难以用我们自己创建的方法进行设置。所以gem5的开发人员提供了许多脚本来启动构建系统的过程。

一、A tour of the directory structure

可以用tree命令在config目录中查看当前目录文件结构。

tree
configs/boot:
bbench-gb.rcS  bbench-ics.rcS  hack_back_ckpt.rcS  halt.shconfigs/common:
Benchmarks.py   Caches.py  cpu2000.py    FileSystemConfig.py  GPUTLBConfig.py   HMC.py       MemConfig.py   Options.py     Simulation.py
CacheConfig.py  cores      CpuConfig.py  FSConfig.py          GPUTLBOptions.py  __init__.py  ObjectList.py  SimpleOpts.py  SysPaths.pyconfigs/dist:
sw.pyconfigs/dram:
lat_mem_rd.py  low_power_sweep.py  sweep.pyconfigs/example:
apu_se.py  etrace_replay.py  garnet_synth_traffic.py  hmctest.py    hsaTopology.py  memtest.py  read_config.py  ruby_direct_test.py      ruby_mem_test.py     sc_main.py
arm        fs.py             hmc_hello.py             hmc_tgen.cfg  memcheck.py     noc_config  riscv           ruby_gpu_random_test.py  ruby_random_test.py  se.pyconfigs/learning_gem5:
part1  part2  part3  READMEconfigs/network:
__init__.py  Network.pyconfigs/nvm:
sweep_hybrid.py  sweep.pyconfigs/ruby:
AMD_Base_Constructor.py  CHI.py        Garnet_standalone.py  __init__.py              MESI_Three_Level.py  MI_example.py      MOESI_CMP_directory.py  MOESI_hammer.py
CHI_config.py            CntrlBase.py  GPU_VIPER.py          MESI_Three_Level_HTM.py  MESI_Two_Level.py    MOESI_AMD_Base.py  MOESI_CMP_token.py      Ruby.pyconfigs/splash2:
cluster.py  run.pyconfigs/topologies:
BaseTopology.py  Cluster.py  CrossbarGarnet.py  Crossbar.py  CustomMesh.py  __init__.py  MeshDirCorners_XY.py  Mesh_westfirst.py  Mesh_XY.py  Pt2Pt.py

其中对每个目录进行详细解释说明。

1、boot/

这些是在完整系统模式下使用的 rcS 文件。这些文件在Linux启动后由模拟器加载,并由shell执行。其中大部分用于在完整系统模式下控制基准测试。有些是实用函数,例如 hack_back_ckpt.rcS。这些文件在完整系统模拟章节中会更详细地介绍。

2、common/

该目录包含了一些辅助脚本和函数,用于创建模拟系统。例如,Caches.py类似于前几章中创建的caches.py和caches_opts.py文件。

  • Options.py包含了各种可以在命令行上设置的选项,比如CPU的数量、系统时钟等等。如果想要更改的选项已经有命令行参数,可以在这个文件中进行查看。
  • CacheConfig.py包含了用于设置经典内存系统缓存参数的选项和函数。
  • MemConfig.py提供了一些辅助函数,用于设置内存系统。
  • FSConfig.py包含了设置多种不同类型系统的完整系统仿真所需的函数。完整系统仿真中有进一步的讨论。
  • Simulation.py包含了许多辅助函数,用于设置和运行gem5。该文件中的许多代码用于管理保存和恢复检查点。下面examples/目录中的示例配置文件使用该文件中的函数来执行gem5仿真。该文件相当复杂,但也允许以灵活的方式运行仿真。

3、dram/

这个文件夹中主要是用于测试DRAM的脚本。

4、example/

该目录包含一些示例gem5配置脚本,可以直接使用来运行gem5。特别是se.py和fs.py非常有用。关于这些文件的更多信息可以在下一节中找到。此外,该目录还包含一些其他实用的配置脚本。

5、learning_gem5/

该目录包含了learning_gem5教程中的所有gem5配置脚本。

6、network/

该目录包含了HeteroGarnet网络的配置脚本。

相关教程:gem5: HeteroGarnet (Garnet 3.0)

7、nvm/

该目录包含使用NVM接口的示例脚本。

8、ruby/

该目录包含了Ruby及其包含的缓存一致性协议的配置脚本。

相关教程:gem5: Introduction

9、splash2/

该目录包含了用于运行splash2基准套件的脚本,其中包含了一些选项用于配置模拟系统。

10、topologies/

该目录包含了在创建Ruby缓存层次结构时可使用的拓扑结构的实现。有关详细信息,请参阅Ruby章节。

其中还有一些没有详细说明的,deprecated/目录是已经启用。

二、Using se.py and fs.py

在本节中,将讨论一些可以通过命令行传递给se.py和fs.py的常见选项。有关如何运行完整系统仿真的详细信息,请参阅完整系统仿真:gem5: X86 Full-System Tutorial。在这里,只将讨论这两个文件中共有的选项。

本节讨论的大多数选项都可以在Options.py中找到,并在函数addCommonOptions中注册。本节不详细介绍所有选项。要查看所有选项,请使用--help运行配置脚本,或阅读脚本的源代码。

首先,简单地运行hello world程序,不使用任何参数:

build/X86/gem5.debug configs/deprecated/example/se.py --cmd=tests/test-progs/hello/bin/x86/linux/hello

默认情况下,gem5使用原子CPU和原子内存访问,因此没有报告真实的时间数据!要确认这一点,可以查看m5out/config.ini文件。CPU显示在第51行:

为了实际以timing mode模式运行gem5,指定一个CPU类型。在此过程中,还可以为L1缓存指定大小。

build/X86/gem5.debug configs/deprecated/example/se.py --cmd=tests/test-progs/hello/bin/x86/linux/hello --cpu-type=TimingSimpleCPU --l1d_size=64kB --l1i_size=16kB

检查config.ini文件,确保这些选项正确地传播到最终的系统中。在m5out/config.ini中搜索“cache”,没有创建任何缓存。因为尽管指定了缓存的大小,但没有指定系统应该使用缓存,所以没有被创建。正确的命令行【在最后加入--caches】:

build/X86/gem5.debug configs/deprecated/example/se.py --cmd=tests/test-progs/hello/bin/x86/linux/hello --cpu-type=TimingSimpleCPU --l1d_size=64kB --l1i_size=16kB --caches

三、Some common options se.py and fs.py

打印所有可能的选项:

build/X86/gem5.debug configs/deprecated/example/se.py --help

教程中只列出了一部分比较重要的:

--cpu-type=CPU_TYPE

        要运行的CPU类型。这是一个重要的参数,必须设置。默认值是atomic,不执行定时仿真。

--sys-clock=SYS_CLOCK

        系统速度运行的时钟。

--cpu-clock=CPU_CLOCK

        CPU速度运行的时钟,与上面的系统时钟是分开的。

--mem-type=MEM_TYPE

        要使用的内存类型。选项包括不同的DDR内存和Ruby内存控制器。

--caches

        使用经典缓存进行仿真。

--l2cache

        如果使用经典缓存,则使用L2缓存进行仿真。

--ruby

        将Ruby作为缓存系统仿真,而不是使用经典缓存。

-m TICKS, --abs-max-tick=TICKS

        运行到指定的绝对模拟时钟,包括从恢复的检查点中计算的时钟。如果只想模拟一定量的模拟时间,需要使用这个参数。

-I MAXINSTS, --maxinsts=MAXINSTS

        要模拟的总指令数(默认为无限)。如果您想在执行一定数量的指令后停止仿真,需要使用这个参数。

-c CMD, --cmd=CMD

        以系统调用仿真模式运行的二进制文件。

-o OPTIONS, --options=OPTIONS

        传递给二进制文件的选项,整个字符串要用引号括起来。当运行需要选项的命令时,需要使用这个参数。可以通过此变量传递参数和选项(例如,--whatever)。

--output=OUTPUT

        将stdout重定向到文件。如果想将模拟应用程序的输出重定向到文件而不是打印到终端上,需要使用这个参数。注意:要重定向gem5的输出,必须在配置脚本之前传递一个参数。

--errout=ERROUT

        将stderr重定向到文件。类似于上面的操作。

这篇关于gem5学习(13):使用默认配置脚本——Using the default configuration scripts的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/600078

相关文章

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2