Gem5模拟器学习之旅

news2024/7/6 18:16:36

安装gem5 模拟器

在这里插入图片描述
翻译自官网(https://www.gem5.org/documentation/learning_gem5/part1/building/)

支持的操作系统和环境

gem5的设计考虑到了Linux环境。我们定期在 Ubuntu 18.04、Ubuntu 20.04 和 Ubuntu 22.04 上进行测试,以确保 gem5 在这些环境中运行良好。不过,如果安装了正确的依赖项,任何基于Linux的操作系统都能正常运行。我们确保 gem5 可使用 gcc 和 clang 进行编译(有关编译器版本信息,请参阅下面的 “依赖关系”)。
使用 clang 编译器编译时,Mac OS 在安装了所有其他依赖项后应能正常运行。不过,目前我们并未在 Mac OS 上正式测试我们的构建版本。因此,我们无法保证希望在Mac OS上编译和运行gem5的用户能获得与在基于Linux的系统上相同的稳定性。在gem5的后续版本中,我们希望通过改进测试来更有效地支持Mac OS。
从gem5 21.0开始,我们仅支持在Python 3.6以上版本中编译和运行gem5。 gem5 20.0是我们最后一个支持Python 2的gem5版本。
如果无法在合适的操作系统/环境中运行 gem5,我们提供了预先准备好的 Docker 镜像,可用于编译和运行 gem5。有关详细信息,请参阅下面的 Docker 部分。

依赖
  • git : gem5 使用 git 进行版本控制。
  • gcc:使用 gcc 对 gem5 进行编译。必须使用 >=7 版本。我们最多支持gcc 第 12 版。注意:可以使用 GCC 第 9 版,但官方不支持该版本,因为它会增加 gem5 对象文件的大小。
  • Clang:也可使用 Clang。目前,我们支持 Clang 6 至 Clang 14(含)。
  • SCons : gem5 使用 SCons 作为其构建环境。必须使用 SCons 3.0 或更高版本
  • Python 3.6+ : gem5 依赖 Python 开发库。gem5 可在使用 Python 3.6+ 的环境中运行。
  • protobuf 2.1+ (可选): protobuf 库用于跟踪生成和回放。
  • Boost(可选): Boost 库是一套通用 C++ 库。如果希望使用 SystemC 实现,则必须依赖该库。
在 Ubuntu 22.04 启动(gem5 >= v21.1)

如果在 Ubuntu 22.04 或相关 Linux 发行版上编译 gem5,可以使用 APT 安装所有这些依赖项:

sudo apt install build-essential git m4 scons zlib1g zlib1g-dev \
    libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev \
    python3-dev libboost-all-dev pkg-config
Docker

对于正在努力建立环境以构建和运行 gem5 的用户,我们提供了以下 Docker 映像:

包含所有可选依赖项的Ubuntu 22.04:gcr.io/gem5-test/ubuntu-22.04_all-dependencies:v22-1(源Dockerfile)。

Ubuntu 22.04(包含最少依赖项):gcr.io/gem5-test/ubuntu-22.04_min-dependencies:v22-1(源 Dockerfile)。

Ubuntu 20.04(包含所有可选依赖项):gcr.io/gem5-test/ubuntu-20.04_all-dependencies:v22-1(源 Dockerfile)。

Ubuntu 18.04(包含所有可选依赖项):gcr.io/gem5-test/ubuntu-18.04_all-dependencies:v22-1(源 Dockerfile)。

  • 获得docker镜像

docker pull

例如,Ubuntu 20.04 包含所有可选的依赖项:

docker pull gcr.io/gem5-test/ubuntu-20.04_all-dependencies:v22-1

那么,要在这种环境中工作,我们建议使用以下方法:

docker run -u U I D : UID: UID:GID --volume :/gem5 --rm -it

其中,<gem5 目录> 是文件系统中 gem5 的完整路径, 是拉取的映像(例如,gcr.io/gem5-test/ubuntu-22.04_all-dependencies:v22-1)。

在此环境下,你将能在 /gem5 目录中构建并运行 gem5。

获取代码

git clone https://github.com/gem5/gem5

用 SCons 构建

gem5 的构建系统基于 SCons,这是一个用 Python 实现的开源构建系统。有关 scons 的更多信息,请访问 http://www.scons.org。主 scons 文件名为 SConstruct,位于源代码树的根部。附加的 scons 文件被命名为 SConscript,遍布整个源代码树,通常靠近与之关联的文件。

在 gem5 目录的根目录中,gem5 可以使用 SCons 文件构建:

scons build/{ISA}/gem5.{variant} -j {cpus}

其中 {ISA} 是目标(客户)指令集架构,而 {variant} 则指定编译设置。在大多数情况下,opt 是一个很好的编译目标。-j标志是可选的,允许编译并行化,{cpus}指定线程数。在某些系统上,从头开始的单线程编译可能需要 2 个小时。因此,我们强烈建议尽可能分配更多线程。

有效的 ISA 有

  • ARM
  • NULL
  • MIPS
  • POWER
  • RISC-V
  • SPARC
  • X86

有效的构建变量有

  • debug 关闭优化。这将确保变量不会被优化掉,函数不会被意外内联,控制流不会以令人惊讶的方式运行。这使得该版本更容易在 gdb等工具中使用,但如果不进行优化,该版本会比其他版本慢很多。在使用 gdb 和 valgrind等工具且不希望任何细节被掩盖的情况下,应选择该版本,但在其他情况下,建议使用更优化的版本。
  • opt 开启了优化,但保留了断言和DPRINTF 等调试功能。这样既能保证仿真速度,又能在出错时洞察发生了什么。在大多数情况下,该版本是最佳选择。
  • fast 打开了优化,并编译了调试功能。该版本在性能上全面提升,但却牺牲了运行时的错误检查和调试输出功能。如果你确信一切运行正常,并希望从模拟器中获得最高性能,建议使用该版本。
    下表概述了这些版本。
    在这里插入图片描述
    例如,使用 opt 在 4 个线程上构建 gem5,目标机型为 x86:

scons build/X86/gem5.opt -j 4

此外,用户还可使用 "gprof "和 "pperf "构建选项来启用剖析功能:

  • gprof 允许 gem5 与 gprof 分析工具一起使用。可通过使用 --gprof 标志编译来启用它。例如,scons build/ARM/gem5.debug --gprof.
  • pprof 允许 gem5 与 pprof 分析工具一起使用。可以通过使用 --pprof 标志编译来启用它。例如,scons build/X86/gem5.debug --pprof.
用法

编译完成后,可以使用

./build/{ISA}/gem5.{variant} [gem5 options] {simulation script} [script options]

使用 --help 标志运行将显示所有可用选项:

使用方法
=====
  gem5.opt [gem5 选项] script.py [脚本选项]

gem5 是受版权保护的软件;请使用 --copyright 选项了解详情。

选项
=======
--version 显示程序的版本号并退出
--help、-h 显示帮助信息并退出
--build-info, -B 显示构建信息
-copyright, -C 显示完整的版权信息
--readme, -R 显示自述文件
--outdir=DIR, -d DIR 将输出目录设置为 DIR [默认:m5out]
--redirect-stdout, -r 重定向 stdout(和 stderr,不含 -e)到文件
--redirect-stderr, -e 将 stderr 重定向到文件
--stdout-file=FILE-r重定向的文件名 [默认值:simout]
--stderr-file=FILE-e 重定向的文件名 [默认值:simerr]
--监听器模式={,,自动}
                        端口(如 gdb)监听模式(auto: 如果
                        默认值:auto
--只接收回传连接
                        端口监听器只接受通过
                        环回设备上的连接
--交互式, -i 运行脚本后调用交互式解释器
                        脚本后调用交互式解释器
--pdb 在运行脚本前调用 python 调试器
--path=PATH[:PATH], -p PATH[:PATH]
                        调用
                        脚本
--quiet,-q 降低冗余度
--verbose, -v 增加冗长度

统计选项
------------------
--stats-file=FILE 设置统计输出文件 [默认:
                        stats.txt]
--stats-help 显示可用统计访问者的文档

配置选项
---------------------
--dump-config=FILE转储配置输出文件 [默认值:config.ini]
--json-config=FILE 创建配置的 JSON 输出 [默认值:
                        config.json] --dot-config=FILE
--dot-config=FILE创建配置的 DOT 和 pdf 输出文件
                        [默认值:config.dot]
--dot-dvfs-config=FILE 创建 DVFS 配置的 DOT 和 pdf 输出
                        [默认值:无]

调试选项
-----------------
--debug-break=TICK[,TICK](调试断点
                        在 TICK(s)处创建断点(如果未连接调试器,则杀死进程
                        如果没有连接调试器,则会杀死进程)
--debug-help 打印调试标志帮助
--debug-flags=FLAG[,FLAG](调试标记
                        设置调试输出的标志(-FLAG 关闭一个
                        标志)。
--debug-start=TICK在 TICK 开始调试输出
--debug-end=TICK在TICK处结束调试输出
--debug-file=FILE设置调试输出文件[默认:cout]
--debug-ignore=EXPR忽略 EXPR 模拟对象
--远程 gdb-port=REMOTE_GDB_PORT
                        远程 gdb 基本端口(设为 0 则禁止监听)

帮助选项
------------
--列出所有内置模拟对象及其参数和默认值。
                        值

EXTRAS scons 变量可用于在 gem5 中构建额外的源文件目录,方法是将其设置为以冒号分隔的额外目录路径列表。EXTRAS 是在 gem5 代码基础之上构建的一种便捷方法,不会将你的新源代码与上游源代码混淆。这样,你就可以独立于主代码库管理你的新代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1224041.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WeTab--颜值与实力并存的浏览器插件

一.前言 现在的浏览器花花绿绿&#xff0c;有大量的广告与信息&#xff0c;令人目不暇接。有没有一款好用的浏览器插件可以解决这个问题呢&#xff1f;我愿称WeTab为版本答案。 WeTab的界面&#xff1a; 干净又整洁。最最关键的是还有智能AI供你服务。 这个WeTabAI就像chatgp…

如何去掉照片中多余路人?一分钟帮你搞定

在外出拍照时&#xff0c;可能会遇到一些不希望出现在照片中的路人&#xff0c;比如在旅游景点、公共场所或者街头拍摄时突然闯入镜头的人。这些路人的出现可能会破坏照片的整体氛围&#xff0c;影响照片的美观度。因此&#xff0c;需要使用一些方法去掉这些多余的路人&#xf…

Python编程技巧 – 对象和类

Python编程技巧 – 对象和类 Python Programming Skills – Object and Class Python是一种面向对象的高级程序语言。 本文简要介绍用Python如何实现面向对象&#xff0c;对象和类的声明及使用&#xff0c;以及面向对象的特征&#xff0c;及其如何使用属性和方法的介绍&#x…

[深度学习]卷积神经网络的概念,入门构建(代码实例)

# 不再任何人,任何组织的身上倾注任何的感情,或许这就是能活得更开心的办法 0.写在前面: 卷积神经网络的部分在之前就已经有所接触,这里重新更全面地总结一下关于深度学习中卷积神经网络的部分.并且在这里对如何构建代码,一些新的思想和网络做出一点点补充,同时会持续更新一些…

深信服AC密码认证(外部认证:LDAP认证)

拓扑图 搭建好自己AD域服务器&#xff0c;我搭建的服务器域名叫做liyanlongyu.com&#xff0c;如何搭建这里我就不做演示了 一.在AC中添加自己AD域服务器 二.添加LDAP认证策略 验证&#xff1a; 未认证发现&#xff0c;无法上网 点击网页&#xff0c;弹出认证页面 认证后&…

HAL库STM32串口开启DMA接收数据

STM32CubeMx的配置 此博客仅仅作为记录&#xff0c;这个像是有bug一样&#xff0c;有时候好使&#xff0c;有时候不好&#xff0c;所以趁现在好使赶紧记录一下&#xff0c;很多地方用到串口接收数据&#xff0c;DMA又是一种非常好的接收方式&#xff0c;可以节约CPU的时间&…

【C语言】深入理解数据表示与存储

文章目录 1.分析上述源程序中的变量在机器内是如何表示的1.1.并给出变量在内存中的存储情况&#xff08;变量占多少个字节&#xff0c;每个字节的地址和存放的数据是多少&#xff09;1.2.说明其存放顺序&#xff08;大端、小端次序&#xff1f;&#xff09;1.3.对齐方式&#x…

2023.11.18 - hadoop之zookeeper分布式协调服务

1.zookeeper简介 ZooKeeper概念: Zookeeper是一个分布式协调服务的开源框架。本质上是一个分布式的小文件存储系统 ZooKeeper作用: 主要用来解决分布式集群中应用系统的一致性问题。 ZooKeeper结构: 采用树形层次结构&#xff0c;没有目录与文件之分,ZooKeeper树中的每个节点被…

代码随想录 Day49 单调栈01 LeetCode LeetCodeT739每日温度 T496 下一个最大元素I

前言 折磨的死去活来的动态规划终于结束啦,今天秋秋给大家带来两题非常经典的单调栈问题,可能你不清楚单调栈是什么,可以用来解决什么问题,今天我们就来一步一步的逐渐了解单调栈,到能够灵活使用单调栈.注意以下讲解中&#xff0c;顺序的描述为 从栈头到栈底的顺序 什么时候用单…

“流量为王”的时代一去不返!如何押注互联网下一个黄金十年

目录 1“流量为王”的时代一去不返&#xff01;如何押注互联网下一个黄金十年 2AI夺走的第一份工作竟是OpenAI CEO&#xff1f;阿尔特曼被“扫地出门”&#xff0c;网友热评&#xff1a;是被GPT-5取代了吗&#xff1f;马斯克更“毒”&#xff0c;挂出求职申请链接 3GPT-4V新玩…

生活总是自己的,请尽情打扮,尽情可爱,,

同色系拼接羽绒服了解一下 穿上时尚感一下子就突显出来了 90白鸭绒填充&#xff0c;不仅时尚还保暖 设计感满满的羽绒服不考虑一下吗?

9 STM32标准库函数 之 独立看门狗(IWDG)所有函数的介绍及使用

9 STM32标准库函数 之 独立看门狗&#xff08;IWDG&#xff09;所有函数的介绍及使用 1. 图片有格式该文档修改记录&#xff1a;总结 函数描述格式&#xff1a; 函数名外设函数的名称函数原形原形声明功能描述简要解释函数是如何执行的输入参数{x}输入参数描述输出参数{x}输出…

OpenCV快速入门:图像滤波与边缘检测

文章目录 前言一、噪声种类与生成1.1 椒盐噪声1.2 高斯噪声1.3 彩色噪声 二、卷积操作2.1 卷积基本原理2.2 卷积操作代码实现 三、线性滤波3.1 均值滤波均值滤波原理均值滤波公式均值滤波代码实现 3.2 方框滤波方框滤波原理方框滤波公式方框滤波代码实现 3.3 高斯滤波高斯滤波原…

手把手教你用C语言写出“走迷宫”小游戏(能看懂文字就会自己敲系列)

目录 设计迷宫地图 设计主角——小球 完整代码 这次教大家编写一个简单的“走迷宫”小游戏&#xff0c;我们可以通过键盘上的‘W’、‘S’、‘A’、‘D’四个键来控制一个“小球”向上&#xff0c;下&#xff0c;左&#xff0c;右移动&#xff0c;目的就是让这个“小球”从起…

element表格头部加入图标

首先看看效果 下面是代码 <el-table-column prop"integralBalance"><template slot"header" slot-scope"scope"><div style"display: flex;justify-content: center;align-items: center;">积分余额<i class&qu…

mac无法向移动硬盘拷贝文件怎么解决?不能读取移动硬盘文件怎么解决

有时候我们在使用mac的时候&#xff0c;会遇到一些问题&#xff0c;比如无法向移动硬盘拷贝文件或者不能读取移动硬盘文件。这些问题会给我们的工作和生活带来不便&#xff0c;所以我们需要找到原因和解决办法。本文将为你介绍mac无法向移动硬盘拷贝文件怎么回事&#xff0c;以…

Mysql -常见函数

目录 字符串函数 数值函数 日期函数 流程函数 字符串函数 -- 拼接 SELECT CONCAT(Hello, World); -- 小写 SELECT LOWER(Hello); -- 大写 SELECT UPPER(Hello); -- 左填充 SELECT LPAD(01, 5, -); -- 右填充 SELECT RPAD(01, 5, -); -- 去除空格 SELECT TRIM( Hello World )…

sqli-labs关卡20(基于http头部报错盲注)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第二十关通关思路1、判断注入点2、爆数据库名3、爆数据库表4、爆数据库列5、爆数据库关键信息 总结 前言 此文章只用于学习和反思巩固sql注入知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的平台&#xff0c;不能随意去尚…

基于 gin + websocket 即时通讯项目 (一、项目初始化)

基于 gin websocket 即时通讯项目 1、安装环境与初始化 搜索各种包官网 https://pkg.go.dev/ 1.1 安装 grom go get -u gorm.io/grom 1.2 安装 MySQL 驱动 go get -u gorm.io/driver/sqlite go get -u gorm.io/driver/mysql 1.3 安装 gin go get -u github.com/gin-gonic/gi…

深入了解Java 8 新特性:lambda表达式基础

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概000多字&#xff0c;预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&#xf…