所使用的 gem5 相关信息如下:
项目 gem5 Vector Engine
也可以使用PLCT的版本,并附有实现分析
环境 Linux(含WSL2),需要支持Python2
注意 自2020.10起官方gem5过渡至全面支持Python3(下称新一代),而该项目是基于旧一代(2020之前)的gem5开发的
配置区分 旧一代的配置文件中主从模式所使用的成员为master,slave
配置完成后的大小为 33.0 GB
Python2配置下面将以 Ubuntu 20.04 作为介绍,其它发行版类似
- 启用universe源仓库并更新软件包索引
sudo add-apt-repository universe sudo apt update安装Python2
sudo apt install python2下载get-pip.py脚本,这里需要根据当前的Python2版本来下载,我的本机上是Python 2.7.18
# 查看Python版本 $ python2 --version Python 2.7.18
# 下载get-pip.py curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py通过python2运行脚本来安装pip,忽略"过期已不支持"的警告(黄色显示)即可
sudo python2 get-pip.py检查Python2和pip2的版本信息,以及默认python和pip是不是关联正确
$ python2 --version Python 2.7.18 $ pip2 --version pip 20.3.4 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7) # python和pip必须与上面的结果一致 $ python --version Python 2.7.18 $ pip --version pip 20.3.4 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
原本的操作是:
curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py
可是get-pip.py需要和Python2的版本对应,安装失败时会提示到一个指定链接(包含了Python2的版本号)下载,重复步骤3
Q: 我安装成功了,可是在之后的配置中反复遇到Python相关的问题?这个项目的 SConscript 默认调用的是python(而不是python2)
请执行步骤5(最后一步)检查python默认与哪一个解释器关联了
$ python --version Python 2.7.18
如果你没做过类似alias python=python3这类操作,python会自动关联至python2,对于pip也是同理
如果没有的话可以通过修改~/.bashrc,添加alias python="/usr/bin/python2.7"来完成 (未测试!)
参考 安装教程
请在配置好 Python2 的前提下继续
- 安装所有的依赖包
sudo apt install build-essential git m4 scons zlib1g zlib1g-dev libprotobuf-dev protobuf-compiler libprotoc-dev libgoogle-perftools-dev python-dev python从GitHub上clone develop分支 到本地
git clone -b develop git@github.com:RALC88/gem5.git
开始编译master分支是上一代的stablegem5,不包括向量引擎!
scons build/RISCV/gem5.opt -j 4然后开始漫长的等待.<{=....运行任意一个默认配置,检查是否能正常工作
build/RISCV/gem5.opt configs/example/hmc_hello.py或
build/RISCV/gem5.opt configs/example/riscv_vector_engine.py --cmd=tests/test-progs/hello/bin/riscv/linux/hello将输出类似下面的结果
gem5 version [DEVELOP-FOR-V20.1]
gem5 compiled Jan 6 2022 17:53:18
gem5 started Jan 6 2022 22:38:42
gem5 executing on DESKTOP-9F2JKA5, pid 7395
command line: build/RISCV/gem5.opt configs/example/hmc_hello.py
Global frequency set at 1000000000000 ticks per second
0: system.remote_gdb: listening for remote gdb on port 7000
info: Entering event queue @ 0. Starting simulation...
warn: readlink() called on '/proc/self/exe' may yield unexpected results in various settings.
Returning '/mnt/d/AC/gem5/tests/test-progs/hello/bin/riscv/linux/hello'
info: Increasing stack size by one page.
Hello world!
对于Vim大佬,“高亮补齐什么的都是浮云”;然而作为VSCode忠实用户的本菜鸡只相信Pylance(确信)
需要配置 m5与SimObjects源码 的路径,使得VSCode Pylance能成功识别 SimObjects 从而提供代码补全及高亮
进入build/RISCV/python/,需要将它的路径添加到sys.path中
定位到 site-packages 中,可以通过查看sys.path,其中包含 site-packages 的路径就是了
$ python Python 2.7.18 (default, Mar 8 2021, 13:02:45) [GCC 9.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/yuxuan-z/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages'] >>> exit() # 退出,已经定位到 '/home/yuxuan-z/.local/lib/python2.7/site-packages'
将当前所在目录(比gem5的父目录)导入 site-packages 的新文件 gem5.pth中,使得sys.path中包含了该目录
$ pwd > '/home/yuxuan-z/.local/lib/python2.7/site-packages/gem5.pth' $ cat '/home/yuxuan-z/.local/lib/python2.7/site-packages/gem5.pth' /mnt/d/AC/gem5/build/RISCV/python
再次查看,确认包含在内
$ python Python 2.7.18 (default, Mar 8 2021, 13:02:45) [GCC 9.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import sys >>> sys.path ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/yuxuan-z/.local/lib/python2.7/site-packages', '/mnt/d/AC/gem5/build/RISCV/python', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages'] >>>
到这里我们解决了m5和m5.objects包未识别的问题,但没有解决SimObjects无法高亮的问题,需要进一步配置
gem5的SimObjects定义都位于目录src/下的各个子文件夹内,为了方便日后复用我们将src/拷贝一份至api/
cp src/ -r api/
同第2到4步依次加入
# 追加进入gem5.pth中 # 不选择gem5/api是为了之后能直接识别 from api. 并注释掉 echo /mnt/d/AC/tools/gem5/ >> '/home/yuxuan-z/.local/lib/python2.7/site-packages/gem5.pth' echo /mnt/d/AC/tools/gem5/api/python/ >> '/home/yuxuan-z/.local/lib/python2.7/site-packages/gem5.pth'
为什么不导入build/RISCV/呢?这时因为在生成完毕后,SimObjects所在的源文件 会被清空,这时导入是无意义的
如果我选择导入gem5/api/而不是gem5/可以吗?可以,之后的config.sh稍微要做修改(见第10步)
此时通过导入这些src/下的"伪头部",就可以实现VSCode Pylance的高亮与代码补全,但是要注意因为这些"伪头部"是未编译的,所以执行的话会出错!记得注释掉!
# a simple test script # **必须导入** (就像) import m5 from m5.objects import * from common.Caches import * # 导入SimObjects,完成后记得注释掉! # from api.sim.System import System # from api.sim.Process import Process # from api.sim.ClockDomain import ClockDomain system = System() ...
为了避免污染gem5环境,请在独立于gem5的一个工作区内编写配置脚本(见上),只要指定路径就可以运行了
$ /mnt/d/AC/gem5/build/RISCV/gem5.opt /mnt/d/DEV/hello-world.py
为了简化第8, 9步,可以写一个config.sh来执行:根据架构和路径不同修改 安装路径GEM5_DIR,指令架构ARCH,生成的二进制类型BIN,在执行时指定将 配置脚本的位置 和 workload(即需要载入的可执行文件)作为命令行参数传入即可
# config.sh script
# Usage: $ ./config.sh [config_script.py] [abspath of exe]
# ? location of gem5
readonly GEM5_DIR=/mnt/d/AC/tools/gem5
# ? ISA compiled
readonly ARCH=RISCV
# ? bin type built
readonly BIN=opt
# ! pseudo-headers MUST NOT appear in script
# * comment them (debug)
sed -i '/from api./ s/^/# /' $1
# * OR remove them (release), with a back-up
# sed -i.bak '/from api./d' $1
# * exec gem5 config
$GEM5_DIR/build/$ARCH/gem5.$BIN $1 --cmd=$2 ${@:3}
其中$1表示 配置文件,$2为 workload的绝对路径
使用时:
$ ./config.sh hello-world.py /mnt/d/AC/tools/gem5/tests/test-progs/hello/bin/riscv/linux/hello
在第7步中,如果加入的是gem5/api/的话,导入时不需要加上api.
# a simple test script # **必须导入** (就像) import m5 from m5.objects import * from common.Caches import * # 不需要加上api. # from sim.System import System # from sim.Process import Process # from sim.ClockDomain import ClockDomain system = System() ...
相应的config.sh要能直接识别伪头部所在的所有文件夹(不再是识别from api.了):
# config.sh script # Usage: $ ./config.sh [config_script.py] [abspath of exe] # ? location of gem5 readonly GEM5_DIR=/mnt/d/AC/tools/gem5 # ? ISA compiled readonly ARCH=RISCV # ? bin type built readonly BIN=opt # TODO: modify this # ! pseudo-headers MUST NOT appear in script # * comment them (debug) sed -i '/from (arch|base|cpu|dev|gpu-compute|kern|mem|proto|python|sim|systemc|unittest)./ s/^/# /' $1 # * OR remove them (release) # sed -i.bak '/from (arch|base|cpu|dev|gpu-compute|kern|mem|proto|python|sim|systemc|unittest)./d' $1 # * exec gem5 config $GEM5_DIR/build/$ARCH/gem5.$BIN $1 --cmd=$2
没试过,请 hhh
<教程> 旧一代教程<文档> 旧一代文档{教学视频} J. Lowe-Power(开发人员) @ 油管 查看系统配置图
通过gem5.opt运行系统配置后会在当前工作路径(cwd)下创建./m5out/的文件夹,里面包含了提供相关配置信息的config.dot
安装 Graphiz
sudo apt install graphviz
Graphiz是pydot的后端,如果没安装即使装了pydot也没用
通过pip2安装pydot
pip2 install pydot
运行配置文件,这时会在cwd下自动创建./m5out/
进入./m5out/,里面有(默认生成的)可供查看的.svg和.pdf
若想将config.dot导出为其它格式(比如.png),可以执行dot命令(参考第4节)
dot -Tpng -o config.png config.dot
效果如下:



