gem5学习(9):构建gem5——Building gem5

目录

一、Requirements for gem5

二、Getting the code

三、Your first gem5 build

1、gem5 binary types

四、Common errors

1、gcc版本过低

2、使用非默认版本的python

3、未安装M4宏处理器

4、Protobuf版本过低


前面的gem5学习(3)—(8)是gem5官网的learning_gem5中的Modifying/Extending章节的,但是后续对源码进行更改的时候发现有些基础教程由于看的时间太久已经忘了,英文阅读又太麻烦,不如重新整理成中文版学习笔记,供后续学习。

官方教程:gem5: Building gem5

这个j教程是最基础的设置gem5开发环境并构建gem5。

一、Requirements for gem5

在Ubuntu上,使用以下命令安装所有必需的依赖项。

sudo apt install build-essential git m4 scons zlib1g zlib1g-dev libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev python-dev python

下面这部分就是对相关依赖版本的要求。

  • gcc 7+(GCC Versions >=7, up to GCC 11
  • SCons 3.0+
  • Python 3.6+
  • prptobuf 2.1+ (Optional)【使用protobuf进行跟踪生成和回放时,需要安装该依赖项】
  • Boost (Optional)

二、Getting the code

下载gem5仓库。

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

三、Your first gem5 build

从构建一个基本的x86系统开始。

必须为每个想模拟的ISA单独编译gem5。

注意:如果使用了ruby-intro-chapter,还必须为每个缓存一致性协议分别进行编译。

模拟器使用SCons来构建gem5。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
  • python3是指使用Python 3解释器来运行后续的命令。
  • which scons用于查找系统中安装的SCons构建工具的路径。这个命令返回SCons可执行文件的完整路径。
  • build/X86/gem5.opt指定了gem5的构建目标。在这种情况下,它表示要构建gem5的优化版本(gem5.opt)。构建目标的路径相对于gem5源代码根目录。
  • -j9选项表示要使用9个并行作业来加速构建过程。这允许同时运行多个编译任务,加快构建速度。具体可以根据系统配置和可用的处理器核心数量来调整并行作业的数量。

因此,命令的意思是使用Python 3解释器运行SCons构建工具,并使用9个并行作业来构建gem5的优化版本。

1、gem5 binary types

在gem5中,SCons脚本目前支持构建5个不同的gem5二进制文件,分别是debug、opt和fast。

  • debug(调试):Debug版本是为了方便调试和排除错误而构建的。它包含了用于调试目的的符号表和调试信息,可以在调试器中进行逐步调试,并提供更详细的日志和错误报告。但是,由于包含了额外的调试信息,Debug版本的gem5可能会比其他版本稍微慢一些。

  • opt(优化):Opt版本是经过优化的版本,旨在提供更高的性能和执行速度。它在编译过程中进行了各种优化,例如代码优化和编译器优化,以提高gem5的运行效率。Opt版本通常用于正式的性能评估和实际使用场景。

  • fast(快速):Fast版本是为了快速原型设计和快速验证而构建的。它在编译过程中进行了更多的优化,以追求更快的构建速度,而不是运行时的最佳性能。Fast版本可能会牺牲一些性能,但可以更快地进行实验和快速迭代。

传递给SCons的主要参数是我们上述命令行要构建的目标,即build/X86/gem5.opt。在本例中,我们正在构建gem5.opt(带有调试符号的优化二进制文件,如果不需要优化的话可以直接构建gem5.debug版本)。

命令行希望将gem5构建在build/X86目录中。由于该目录当前不存在,SCons将在build_opts中查找X86的默认参数(注意:在这里使用了-j9,通常是核心数加1)。

最后没有报错,同时出现:scons: done building targets.表示构建成功。

四、Common errors

问题都比较简单,只列不改,教程中有详细的解决办法。

1、gcc版本过低

2、使用非默认版本的python

3、未安装M4宏处理器

M4是一个宏处理器,通常用于生成复杂的代码或配置文件。

4、Protobuf版本过低

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

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

相关文章

基于Java SSM框架实现游戏论坛平台系统项目【项目源码+论文说明】

基于java的SSM框架实现游戏论坛平台系统演示 摘要 本论文主要论述了如何使用java语言开发一个游戏论坛平台的设计,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构、ssm 框架和 java 开发的 Web 框架,基于Werkzeug WSGI工具箱和…

react antd EditableProTable - 可编辑表格

与编辑表格外的内容联动 value 同 dataSource,传入一个数组,是 table 渲染的元数据 T[] undefined onChange dataSource 修改时触发,删除和修改都会触发,如果设置了 value,Table 会成为一个受控组件。 (value:T[])>void undefined recordC…

梨花妖传说

在这个现代都市的喧嚣中,有一座被人们称之为“梨花城”的城市。这里是一个充满了高楼大厦、繁华街道和现代科技的城市,然而,在这个城市的某个角落,隐藏着一个神秘而美丽的存在——梨花妖。 梨花妖的名字叫做梨儿,她拥…

Hello 2024(A~D,F1)

新年坐大牢 A - Wallet Exchange 题意:共有俩钱包,每回合从其中一个钱包中拿走一块钱,谁拿走最后一块钱谁赢。 思路:奇偶讨论即可。 // Problem: A. Wallet Exchange // Contest: Codeforces - Hello 2024 // URL: https://cod…

BERT 模型是什么

科学突破很少发生在真空中。相反,它们往往是建立在积累的人类知识之上的阶梯的倒数第二步。要了解 ChatGPT 和 Google Bart 等大型语言模型 (LLM) 的成功,我们需要回到过去并谈论 BERT。 BERT 由 Google 研究人员于 2018 年开发&…

docker的安装使用以及优势

前段时间和朋友开发电商分布式项目作为学习,由于远程开发的需要,需要将redis,mysql,mq等一些基础的服务放在阿里云服务器上,并使用docker来安装这些服务,使容器服务化。 1.使用docker的优势 将 Redis 和 MySQL 等数据库直接安装在…

C++合并K个有序链表

本篇博客介绍如何使用C合并k个有序链表,在代码中会用到std::priority_queue,首先需要介绍一下std::priority_queue的用法,介绍完std::priority_queue后将介绍如何使用std::priority_queue来辅助合并k个有序链表。 一、C priority_queue用法介…

RTMO:迈向高性能的单阶段实时多人姿态估计

摘要 https://arxiv.org/pdf/2312.07526.pdf 实时多人姿态估计在平衡速度和精度方面提出了重大挑战。虽然两阶段自上而下的方法随着图像中人数增加而变慢,但现有的单阶段方法往往无法同时提供高精度和实时性能。本文介绍了RTMO,这是一种单阶段姿态估计框…

用通俗易懂的方式讲解:如何提升大模型 Agent 的能力?

大型语言模型(LLM)的出现带火了Agent。利用LLM理解人类意图、生成复杂计划并且能够自主行动的能力。Agent具有无与伦比的能力,能够做出类似于人类复杂性的决策和完成一些复杂的工作。 目前市面上已经出现非常多得Agent框架:XAgen…

make_unique 数组,智能指针

【C14算法】make_unique_c make_unique-CSDN博客 #include <iostream> #include <memory>int main() {std::size_t size 5;std::unique_ptr<int[]> ptr std::make_unique<int[]>(size);for (std::size_t i 0; i < size; i) {ptr[i] i 1;}std:…

MongoDB复制集原理

复制集高可用 复制集选举 MongoDB 的复制集选举使用 Raft 算法&#xff08;https://raft.github.io/&#xff09;来实现&#xff0c;选举成功的必要条件是大多数投票节点存活。在具体的实现中&#xff0c;MongoDB 对 raft 协议添加了一些自己的扩展&#xff0c;这包括&#x…

Spring Retry(方法重试、方法重新调用)

Spring Retry——方法重试、方法重新调用 简介&#xff1a;使用1. 配置 2.使用 总结注意 简介&#xff1a; Spring Retry 是一个 Spring Boot 官方提供的支持重试机制的库。它提供了一种简单而灵活的方式来处理方法调用可能失败的情况&#xff0c;通过自动重试失败的操作&…

Mysql大数据量下流式查询优化:Jdbc中的useFetchSize参数及其原理解析

前言 最近我朋友公司有个需求场景&#xff1a;查询千万级数据量并写入txt文件的程序优化需求。 朋友找到我对程序进行优化&#xff0c; 不然饭碗不保......&#x1f4a6; 下面就分享一下解决这个优化问题的过程和思路&#xff0c;并总结一下&#xff0c;在以后不要在踩同样的坑…

加油吧! 学习无线电!

pyhackrf2 已经修复 pyhackrf2 修改bw问题-CSDN博客 OOK 已经写出来了 ook 模块 基础测试完成 准备调整参数-CSDN博客 最先后一个程序 关于 wfm解码

C++指南——拷贝构造函数和赋值运算符重载

文章目录 1 举个例子&#xff08;问题由来&#xff09;2 拷贝构造函数与构造函数不同3 默认拷贝构造函数是浅拷贝4 默认赋值运算符是浅拷贝 1 举个例子&#xff08;问题由来&#xff09; 在C中&#xff0c;使用Car car2 car1; 这种形式的语句被称为拷贝构造&#xff08;用一个…

[算法]使用aes进行数据加密

一、需求 有一段信息需要进行安全加密。 二、方案 对称加密和非对称加密两种方案&#xff0c;其中由于公钥密钥的管理还未形成规范&#xff0c;因此考虑使用对称加密。其中&#xff0c;对称加密算法使用openssl中&#xff0c;关于aes的部分&#xff0c;输出结果为128位数据。…

【青书学堂】 2023年第二学期 刑法学(总论)(直播课) 作业

【青书学堂】 2023年第二学期 刑法学(总论)(直播课) 作业 为了方便日后复习&#xff0c;青书学堂成人大专试题整理。 若有未整理的课程&#xff0c;请私信我补充&#xff0c;欢迎爱学习的同学们收藏点赞关注&#xff01;文章内容仅限学习使用&#xff01;&#xff01;&#xff…

自然语言处理中的语言模型

知乎好文章&#xff0c;建议参考学习语言模型 语言模型&#xff08;Language Model, LM&#xff09;是用于计算或预测一系列词语&#xff08;句子或文本段落&#xff09;出现概率的统计模型。它们能够基于已知的词序列来预测下一个词或者评估一个句子的语言学合理性。 发展历程…

【代码学习】einops,更简单的张量变化

官方教程&#xff1a;https://github.com/arogozhnikov/einops/blob/master/docs/2-einops-for-deep-learning.ipynb 常见操作&#xff1a; 维度变换 rearrange 维度变换 y rearrange(x, b c h w -> b h w c) # 已经 表明 x的每个轴 变量 b c h w guess(y.shape)flatten…

oracle-undo

tips&#xff1a;串行化隔离级别&#xff1a;事务开始后&#xff0c;对一张表不会被别人影响&#xff0c;对于审计工作比较有用&#xff0c;避免了幻读。 undo表空间&#xff1a;自动生成段&#xff0c;自动生成区&#xff0c;自动维护的&#xff0c;不像一般的表空间&#xff…