Gem5模拟器学习之旅——翻译自官网

news2025/1/18 9:05:35

文章目录

      • 安装并使用gem5 模拟器
        • 支持的操作系统和环境
        • 依赖
        • 在 Ubuntu 22.04 启动(gem5 >= v21.1)
        • Docker
        • 获取代码
        • 用 SCons 构建
        • 用法
        • 首次构建 gem5
          • gem5 二进制类型
          • 调试
          • opt
          • 快速
        • 常见错误
          • 错误的 gcc 版本
          • Python 位于非默认位置
          • 未安装 M4 宏处理器
          • Protobuf 3.12.3 问题

安装并使用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 代码基础之上构建的一种便捷方法,不会将你的新源代码与上游源代码混淆。这样,你就可以独立于主代码库管理你的新代码。

首次构建 gem5

让我们从构建一个基本的 x86 系统开始。目前,必须为要模拟的每个 ISA 分别编译 gem5。此外,如果使用 ruby-intro-chapter,还必须为每种高速缓存一致性协议单独编译。

要编译 gem5,我们将使用 SCons。SCons 使用 SConstruct 文件(gem5/SConstruct)来设置一些变量,然后使用每个子目录中的 SConscript 文件来查找和编译所有 gem5 源代码。

首次执行时,SCons 会自动创建一个 gem5/build 目录。在这个目录中,你会找到由 SCons 和编译器等生成的文件。你用来编译 gem5 的每一组选项(ISA 和高速缓存一致性协议)都会有一个单独的目录。

build_opts 目录中有许多默认编译选项。这些文件指定了初始编译 gem5 时传递给 SCons 的参数。我们将使用 X86 默认值,并指定要编译所有的 CPU 型号。你可以查看 build_opts/X86 文件,查看 SCons 选项的默认值。你也可以在命令行中指定这些选项,以覆盖任何默认值。

python3 which scons build/X86/gem5.opt -j9

gem5 二进制类型

gem5 中的 SCons 脚本目前有 5 种不同的二进制文件可以为 gem5 构建:调试、选项和快速。这些名称大多不言自明,但下面会详细说明。

调试

不带优化和调试符号。在使用调试器调试时,如果需要查看的变量在 gem5 的 opt 版本中已被优化,则此二进制文件非常有用。与其他二进制文件相比,使用 debug 运行速度较慢。

opt

此二进制文件在构建时开启了大部分优化(如 -O3),但包含调试符号。此二进制文件比 debug 快得多,但仍包含足够的调试信息,能够调试大多数问题。

快速

在生成时进行了所有优化(包括在支持的平台上进行链接时优化),不包含调试符号。fast 是性能最高的二进制文件,比 opt 小得多。不过,只有当你认为代码不太可能存在重大错误时,才适合使用 fast。
传给 SCons 的主要参数是你要编译的内容,即 build/X86/gem5.opt。在本例中,我们要编译 gem5.opt(带有调试符号的优化二进制文件)。我们要在 build/X86 目录中构建 gem5。由于该目录目前不存在,SCons 将在 build_opts 中查找 X86 的默认参数。(注:我在这里使用 -j9 在我的机器上的 8 个内核中的 9 个内核上执行编译。你应该为你的机器选择一个合适的数字,通常是内核+1)。

输出结果应如下所示:
在这里插入图片描述
编译完成后,你就可以在 build/X86/gem5.opt 目录下获得一个可运行的 gem5 可执行文件。编译可能需要很长时间,通常需要 15 分钟或更长时间,尤其是在 AFS 或 NFS 等远程文件系统上编译时。

常见错误
错误的 gcc 版本

在这里插入图片描述
更新环境变量以指向正确的 gcc 版本,或安装更新版本的 gcc。请参阅 "构建要求 "部分。(building-requirements-section)

Python 位于非默认位置

如果您使用的是非默认版本的 Python(例如,默认版本是 2.5,而您使用的是 3.6 版),那么在使用 SCons 生成 gem5 时可能会出现问题。RHEL6 版本的 SCons 使用了 Python 的硬编码位置,导致了这个问题。在这种情况下,gem5 通常能成功编译,但可能无法运行。以下是运行 gem5 时可能看到的一个错误。
在这里插入图片描述
要解决这个问题,可以通过运行 python3 which scons build/X86/gem5.opt 而不是 scons build/X86/gem5.opt 来强制 SCons 使用环境的 Python 版本。

未安装 M4 宏处理器

如果未安装 M4 宏处理器,则会出现类似下面的错误:
在这里插入图片描述
仅安装 M4 宏包可能无法解决这个问题。您可能还需要安装所有 autoconf 工具。在 Ubuntu 上,可以使用以下命令。

sudo apt-get install automake

Protobuf 3.12.3 问题

使用 protobuf 编译 gem5 可能会导致以下错误、
在这里插入图片描述
这里讨论了问题的根本原因: [https://gem5.atlassian.net/browse/GEM5-1032]。
要解决这个问题,您可能需要更新 ProtocolBuffer 的版本、

sudo apt update
sudo apt install libprotobuf-dev protobuf-compiler libgoogle-perftools-dev

之后,在重新编译 gem5 之前,你可能需要清理 gem5 的构建文件夹

python3 which scons --clean --no-cache # cleaning the build folder
python3 which scons build/X86/gem5.opt -j 9 # re-compiling gem5

如果问题仍然存在,你可能需要在重新编译 gem5 之前完全删除 gem5 生成文件夹

rm -rf build/ # completely removing the gem5 build folder
python3 which scons build/X86/gem5.opt -j 9 # re-compiling gem5

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

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

相关文章

Pandas中loc和iloc函数(提取某几列或者行的数据)

loc函数&#xff1a;通过行索引&#xff08;列名、行名&#xff09; 中的具体值来取行数据&#xff08;如取"Index"为"A"的行&#xff09; iloc函数&#xff1a;通过行号&#xff08;数字&#xff09;来取行数据&#xff08;如取第二行的数据&#xff09;…

JAVA刷题之字符串的一些个人思路

感谢您的阅读&#xff01; ꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯…

【Spring总结】基于配置的方式来写Spring

本篇文章是对这两天所学的内容做一个总结&#xff0c;涵盖我这两天写的所有笔记&#xff1a; 【Spring】 Spring中的IoC&#xff08;控制反转&#xff09;【Spring】Spring中的DI&#xff08;依赖注入&#xff09;Dependence Import【Spring】bean的基础配置【Spring】bean的实…

计算机msvcr120.dll丢失的解决方法,分享多种亲测可靠的方法

在使用计算机的过程中&#xff0c;我们有时可能会遇到一些技术问题&#xff0c;其中之一就是提示丢失msvcr120.dll文件。当计算机提示丢失msvcr120.dll文件时&#xff0c;可能是由于某些程序无法找到这个文件&#xff0c;从而导致程序无法正常运行。那么我们需要如何解决修复好…

一文读懂:testcafe框架和页面元素交互

一、互动要求 使用 TestCafe 与元素进行交互操作&#xff0c;元素需满足以下条件&#xff1a;☟ 元素在 body 页面窗口或 iframe 窗口的元素内。如果某个元素在视口之外&#xff0c;则 TestCafe 通过滚动可以滚动到元素可见。 元素是可见的&#xff0c;具有以下属性&#…

Leetcode—剑指OfferII LCR 022.环形链表II【中等】

2023每日刷题&#xff08;三十三&#xff09; Leetcode—LCR 022.环形链表II 算法思想 参考k神的博客 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode *detectCycle(struct List…

2.3 调用智谱 API

调用智谱 API 1 申请调用权限2 调用智谱 AI API3 使用 LangChain 调用智谱 AI参考&#xff1a; 智谱 AI 是由清华大学计算机系技术成果转化而来的公司&#xff0c;致力于打造新一代认知智能通用模型。公司合作研发了双语千亿级超大规模预训练模型 GLM-130B&#xff0c;并构建了…

Python------列表 集合 字典 推导式(本文以 集合为主)

推导式&#xff1a; 推导式comprehensions&#xff08;又称解析式&#xff09;&#xff0c;是Python的一种独有特性。推导式是可以从一个数据序列 构建 另一个 新的数据序列&#xff08;一个有规律的列表或控制一个有规律列表&#xff09;的结构体。 共有三种推导&#xff…

HUAWEI华为笔记本MateBook X 2021款i5集显(EULD-WFH9,WXX9)原装出厂Windows11系统工厂模式包

下载链接&#xff1a;https://pan.baidu.com/s/1gQ_O203SSm83Nc-zDk1iNA?pwd4exz 提取码&#xff1a;4exz 系统带F10一键智能还原功能隐藏恢复分区、所有驱动、Office办公软件、华为电脑管家等预装程序 所需要工具&#xff1a;32G或以上的U盘 文件格式&#xff1a;zip …

TensorRt推理加速框架Python API服务器部署教程以及运行Helloworld程序

一、确认cuda工具包和n卡相关驱动是否安装 在终端中输入以下命令&#xff1a; nvcc -V如果出现以下提示&#xff0c;则已经成功安装 在终端中输入以下命令&#xff1a; nvidia-smi如果出现即为成功&#xff0c;我在这里就不去介绍怎么下载cuda和驱动怎么下载了&#xff0c;…

【Linux系统化学习】进程的父子关系 | fork 进程

个人主页点击直达&#xff1a;小白不是程序媛 Linux专栏&#xff1a;Linux系统化学习 目录 前言&#xff1a; 父子进程 父子进程的引入 查看父子进程 查询进程的动态目录 更改进程的工作目录 fork创建进程 fork的引入 fork的使用 fork的原理 fork如何实现的&#…

2023-2024华为ICT大赛-计算赛道-广东省省赛初赛-高职组-部分赛题分析【2023.11.18】

2023-2024华为ICT大赛 计算赛道 广东省 省赛 初赛 高职组 部分赛题 分析【2023.11.18】 文章目录 单选题tpcds模式中存在表customer&#xff0c;不能成功删除tpcds模式是&#xff08; &#xff09;以下哪个函数将圆转换成矩形&#xff08; &#xff09;下列哪个选项表示依赖该D…

一键云端,AList 整合多网盘,轻松管理文件多元共享!

hello&#xff0c;我是小索奇&#xff0c;本篇教大家如何使用AList实现网盘挂载 可能还是有小伙伴不懂&#xff0c;所以简单介绍一下哈 AList 是一款强大的文件管理工具&#xff0c;为用户提供了将多种云存储服务和文件共享协议集成在一个平台上的便利性。它的独特之处在于&am…

cesium雷达效果(脉冲圆)

cesium雷达效果(脉冲圆) 下面富有源码 实现思路 使用ellipse方法加载圆型,修改ellipse中‘material’方法重写glsl来实现当前效果 示例代码 index.html <!DOCTYPE html> <html lang="en"><head>

Typora——优雅的排版也是一种品味

电脑中用于编辑文本的软件&#xff0c;一直以来可谓是层出不穷&#xff0c;大家脑海中一定会浮现出很多名字&#xff1a;word&#xff0c;OneNote&#xff0c;记事本&#xff0c;wps&#xff0c;LaTeX&#xff0c;还有各种小众的office工具&#xff0c;等等等等。今天学长将介绍…

java回调函数

在java中是存在回调函数的&#xff0c;我们可以把回调函数理解为一个被作为参数传递的函数。 类似于&#xff0c;我可以设置一个功能给系统&#xff0c;但是只有特定时候才会触发&#xff0c;触发的时候就会把函数作为参数的形式传递到另外的函数中。一般都是使用系统中写好的…

科研学习|科研软件——面板数据、截面数据、时间序列数据的区别是什么?

一、数据采集方式不同 面板数据是通过在多个时间点上对同一组体进行观测而获得的数据。面板数据可以是横向面板数据&#xff0c;即对同一时间点上不同个体的观测&#xff0c;也可以是纵向面板数据&#xff0c;即对同一个体在不同时间点上的观测。采集面板数据需要跟踪相同的个体…

文章分类列表进行查询(实体类日期格式设置)

categoryController GetMappingpublic Result<List<Category>> list(){List<Category> cs categoryService.list();return Result.success(cs);} categoryService //列表查询List<Category> list(); categoryServiceImpl Overridepublic List<Cat…

深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

kafka入门(一):kafka消息消费

安装kafka&#xff0c;创建 topic&#xff1a; Windows安装kafka, 详情见&#xff1a;https://blog.csdn.net/sinat_32502451/article/details/133067851 Linux 安装kafka&#xff0c;详情见&#xff1a;https://blog.csdn.net/sinat_32502451/article/details/133080353 添…