Ubuntu20.04搭建gem5并运行helloworld

文章目录

相关资料

  1. gem5官网
  2. 知乎-计算机体系结构-gem5模拟器入门
  3. gem5:Hello World Tutorial

一、安装gem5

1.下载依赖

bash 复制代码
sudo apt install build-essential git m4 scons zlib1g zlib1g-dev \
    libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev \
    python3-dev python-is-python3 libboost-all-dev pkg-config

从github或gitee上拷贝gem5代码

bash 复制代码
git clone https://gitee.com/koverlu/gem5.git

拷贝完成后,会多一个gem5的目录我们进入该目录,在执行对应的构建命令。这里构建的是X86架构,如果要构建ARM或其他架构同理

bash 复制代码
cd gem5
scons build/X86/gem5.opt -j9

构建完成后,如果没有错误,说明构建成功。在gem5目录下会多一个名为build的目录。

二、运行helloworld

在安装完gem5的环境后,我们可以编写对应的helloworld程序进行测试。在根目录下(gem5目录下),新建一个名为hello-world.py的python文件。

python 复制代码
from gem5.isas import ISA
from gem5.components.boards.simple_board import SimpleBoard
from gem5.components.cachehierarchies.classic.no_cache import NoCache
from gem5.components.memory.single_channel import SingleChannelDDR3_1600
from gem5.components.processors.simple_processor import SimpleProcessor
from gem5.components.processors.cpu_types import CPUTypes
from gem5.resources.resource import Resource
from gem5.simulate.simulator import Simulator


# Obtain the components.
cache_hierarchy = NoCache()
memory = SingleChannelDDR3_1600("1GiB")
processor = SimpleProcessor(cpu_type=CPUTypes.ATOMIC, isa=ISA.x86, num_cores=1)

#Add them to the board.
board = SimpleBoard(
    clk_freq="3GHz",
    processor=processor,
    memory=memory,
    cache_hierarchy=cache_hierarchy,
)

# Set the workload.
binary = Resource("x86-hello64-static")
board.set_se_binary_workload(binary)

# Setup the Simulator and run the simulation.
simulator = Simulator(board=board)
simulator.run()

这个例子演示了一个最简单的环境,没有Cache,CPU直连主存。值得一提的是,官方文档上给的helloworld示例有问题,SimpleProcessor函数需要有三个参数,还需要指定ISA,在最上方也需要引入from gem5.isas import ISA。否则执行会报错。

使用如下命令运行该程序,如果输出Hello World!,则说明成功.

bash 复制代码
./build/X86/gem5.opt hello-world.py
相关推荐
qq_4609784036 分钟前
html标签怎么表示小字号文字_small标签语义说明【操作】
jvm·数据库·python
qq_4135020238 分钟前
SQL更新语句性能调优技巧_避免对索引列执行函数操作
jvm·数据库·python
2301_8176722639 分钟前
如何正确为包含浮动子元素的父容器设置完整背景色
jvm·数据库·python
2301_8038756144 分钟前
Redis如何通过永不过期策略规避击穿
jvm·数据库·python
2301_816660211 小时前
CSS中relative与absolute的区别_详解相对与绝对定位应用场景
jvm·数据库·python
qq_460978401 小时前
Golang怎么JWT设置过期时间_Golang如何在Claims中配置Token有效期【操作】
jvm·数据库·python
weixin_568996061 小时前
Cgo 中正确设置 C 结构体回调函数指针的完整方案
jvm·数据库·python
Jun6261 小时前
【RV1103】AD4115实现8通道ADC采样,MQTT数据传输,1K采样率
linux·python
LiAo_1996_Y1 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
knight_9___1 小时前
LLM工具调用面试篇1
开发语言·人工智能·python·面试·agent