体系结构仿真工具Gem5的构建安装

Gem5是什么?

Gem5是一个模块化的离散事件驱动的计算机系统仿真平台。也就是说:

1. gem5的组件可以被轻松地重排、参数化、扩展或替换以满足你的需求。

2. 它在时间上仿真一系列离散事件。

3. 它的预期用途是仿真一个或多个计算机系统。

4. Gem5不只是个仿真器,它是一个可以让你用足够多的预制组件搭建你自己的仿真系统的仿真平台。

Gem5由C++和python编写,其提供的大部分组件都使用BSD类许可证。它可以在完整系统模式(FS模式)下模拟带有设备和操作系统的完整系统,也可以在系统调用模拟模式(SE模式)下由仿真器提供系统服务的仿真运行用户空间程序。Gem5对执行Alpha、ARM、MIPS、Power、SPARC、RISC-V和64位x86二进制的CPU模型有不同程度的支持,包括两个简单的单周期模型、一个乱序模型和一个顺序流水线模型。还可以灵活地从缓存和互联或提供更灵活的内存系统建模的Ruby模拟器中建立内存系统。

还有许多组件和功能没有在此提及,但仅从这个部分列表中就可以看出,gem5是一个复杂而有能力的仿真平台。即便Gem5现在的功能已经十分强大,在个人和一些公司的支持下,我们仍在不断地开发、添加新功能和改进旧功能。

构建gem5

Gem5构建要求

http://www.gem5.org/documentation/general_docs/building#dependencies了解详细的要求

在Ubuntu中,你可以通过以下命令安装需要的软件:

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

加速库(可选)

加速库是一系列通用C++库。如果你想使用SystemC的话,它是一个必要的依赖。

sudo apt install libboost-all-dev

下载代码

先切换到你想存放gem5代码的目录。之后使用git克隆代码仓库。

git clone https://gem5.googlesource.com/public/gem5

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

第一次构建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构建:debug、opt和fast。这些名称大多是不言自明的,但详细情况如下。

debug

构建时没有优化和调试符号。如果你需要查看的变量在gem5的opt版本中被优化掉了,那么这个二进制文件在使用调试器进行调试时很有用。与其他二进制文件相比,带调试的运行速度很慢。

opt

这个二进制文件是在大多数优化开启的情况下构建的(例如,-O3),但包含了调试符号。这个二进制文件比调试文件快得多,但仍然包含足够的调试信息,能够调试大多数问题。

fast

构建时开启了所有的优化(包括支持平台上的链接时间优化),没有调试符号。此外,任何断言都被删除,但panic和fatal错误仍被包括在内。fast是性能最高的二进制文件,比opt小得多。然而,只有当你觉得你的代码不太可能有重大错误时,才适合使用fast。

传递给SCons你想要构建的东西对应的参数。在本例中,我们要构建 gem5.opt(一个带有调试符号的优化二进制文件)。我们想在 build/X86 目录下构建 gem5。由于这个目录目前并不存在,SCons将在build_opts中寻找X86的默认参数。(注意:我在这里使用 -j9 来在我的机器上的 8 个核心中的 9 个上执行构建。你应该为你的机器选择一个合适的数字,通常是核心数+1)。

接下来你应该会看到类似下列的打印信息:

Checking for C header file Python.h... yes

Checking for C library pthread... yes

Checking for C library dl... yes

Checking for C library util... yes

Checking for C library m... yes

Checking for C library python2.7... yes

Checking for accept(0,0,0) in C++ library None... yes

Checking for zlibVersion() in C++ library z... yes

Checking for GOOGLE_PROTOBUF_VERIFY_VERSION in C++ library protobuf... yes

Checking for clock_nanosleep(0,0,NULL,NULL) in C library None... yes

Checking for timer_create(CLOCK_MONOTONIC, NULL, NULL) in C library None... no

Checking for timer_create(CLOCK_MONOTONIC, NULL, NULL) in C library rt... yes

Checking for C library tcmalloc... yes

Checking for backtrace_symbols_fd((void*)0, 0, 0) in C library None... yes

Checking for C header file fenv.h... yes

Checking for C header file linux/kvm.h... yes

Checking size of struct kvm_xsave ... yes

Checking for member exclude_host in struct perf_event_attr...yes

Building in /local.chinook/gem5/gem5-tutorial/gem5/build/X86

Variables file /local.chinook/gem5/gem5-tutorial/gem5/build/variables/X86 not found,

using defaults in /local.chinook/gem5/gem5-tutorial/gem5/build_opts/X86

scons: done reading SConscript files.

scons: Building targets ...

[ISA DESC] X86/arch/x86/isa/main.isa -> generated/inc.d

[NEW DEPS] X86/arch/x86/generated/inc.d -> x86-deps

[ENVIRONS] x86-deps -> x86-environs

[ CXX] X86/sim/main.cc -> .o

....

....

....

[ SHCXX] nomali/lib/mali_midgard.cc -> .os

[ SHCXX] nomali/lib/mali_t6xx.cc -> .os

[ SHCXX] nomali/lib/mali_t7xx.cc -> .os

[ AR] -> drampower/libdrampower.a

[ SHCXX] nomali/lib/addrspace.cc -> .os

[ SHCXX] nomali/lib/mmu.cc -> .os

[ RANLIB] -> drampower/libdrampower.a

[ SHCXX] nomali/lib/nomali_api.cc -> .os

[ AR] -> nomali/libnomali.a

[ RANLIB] -> nomali/libnomali.a

[ CXX] X86/base/date.cc -> .o

[ LINK] -> X86/gem5.opt

scons: done building targets.

编译完成后,你应该在build/X86/目录中有一个可以工作的gem5可执行文件gem5.opt。编译可能需要很长的时间,通常是15分钟或更长时间,尤其是当你在AFS或NFS等远程文件系统上进行编译时。

文章作者:速易芯李昊翔

更多详细文章可关注公众号 “速易芯Fastchip” !

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
gem5学习基础完整版,介绍了gem5环境的安装,以及一些基本概念。 gem5仿真器是用于计算机系统体系结构研究的模块化平台,涵盖系统级体系结构以及处理器微体系结构。1、多个可互换的CPU型号。 gem5提供了四种基于解释的CPU模型:简单的单CPI CPU; 有序CPU的详细模型和无序CPU的详细模型。 这些CPU模型使用通用的高级ISA描述。 此外,gem5具有基于KVM的CPU,该CPU使用虚拟化来加速仿真。 2、完全集成的GPU模型,可以执行真实计算机ISA,并支持与主机CPU共享的虚拟内存。 3、NoMali GPU模型。 gem5带有集成的NoMali GPU模型,该模型与Linux和Android GPU驱动程序堆栈兼容,因此无需进行软件渲染。 NoMali GPU不产生任何输出,但可以确保以CPU为中心的实验产生代表性的结果。 4、事件驱动的内存系统。 gem5具有详细的,事件驱动的内存系统,包括高速缓存,交叉开关,探听过滤器以及快速而准确的DRAM控制器模型,用于捕获当前和新兴内存的影响,例如内存。 LPDDR3 / 4/5,DDR3 / 4,GDDR5,HBM1 / 2/3,HMC,WideIO1 / 2。 可以灵活地布置组件,例如,以具有异构存储器的复杂的多级非均匀高速缓存层次结构来建模。 5、基于跟踪的CPU模型,可播放弹性跟踪,这些跟踪是由附着到乱序CPU模型的探针生成的依赖项和定时注释的跟踪。 跟踪CPU模型的重点是以快速,合理的方式而不是使用详细的CPU模型来实现内存系统(高速缓存层次结构,互连和主内存)的性能探索。 6、异构和异构多核。 可以将CPU模型和缓存组合到任意拓扑中,从而创建同构异构的多核系统。 MOESI侦听缓存一致性协议可保持缓存一致性。 7、多种ISA支持。 gem5将ISA语义与其CPU模型解耦,从而实现对多个ISA的有效支持。 目前gem5支持Alpha,ARM,SPARC,MIPS,POWER,RISC-V和x86 ISA。 有关更多信息,请参见支持的体系结构

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

速易芯Fastchip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值