其他模拟器

gem5/SST 集成


第一步:安装 SST

我们今天不会做这个。

相反,我们将使用一个安装了 sst 的 docker 容器。

运行以下命令进入 docker 容器。 注意:你不应该像这样交互式地使用容器,但我很懒。

cd /workspaces/2024
docker run --rm --volume
/workspaces/:/workspaces -w `pwd` ghcr.io/gem5/sst-env

gem5 作为库:Hello, World!

要在 SST 中将 gem5 用作”组件”,你需要将其构建为库。 这是另一个独特的构建目标… 注意:如果你在 Mac 上构建,它不是 “.so” 而是 “.dynlib”

将 gem5 编译为库

cd gem5/
scons defconfig build/for_sst build_opts/RISCV
scons build/for_sst/libgem5_opt.so -j8 --without-tcmalloc --duplicate-sources

在 gem5 中构建 gem5 组件

编译 gem5 组件

cd ext/sst
cp Makefile.linux Makefile

将包含 ARCH=RISCV 的行改为 ARCH=for_sst

make -j8

运行模拟,

sst --add-lib-path=. sst/example.py

gem5 作为库:实例化

Diagram showing how gem5 interacts with other simulators w:900px


gem5 作为库:实例化

Diagram showing how gem5 interacts with other simulators w:900px


gem5 作为库:实例化

Diagram showing how gem5 interacts with other simulators w:900px


gem5 作为库:实例化

Diagram showing how gem5 interacts with other simulators w:900px


gem5 作为库

如何在另一个模拟器中设置 gem5?


gem5 作为库:模拟

Diagram showing how gem5 interacts with other simulators w:900px


gem5 作为库:模拟

对于每个外部模拟器时钟周期:

external_simulator.advance_to_next_event()
gem5_system.advance(n_ticks)

其中 n_ticks = 此事件与外部模拟器上一个事件之间的时间差


案例研究:gem5/SST 集成

SST:结构模拟工具包 http://sst-simulator.org/


SST:简要概述


gem5/SST 集成

Diagram showing how gem5 interacts with other simulators w:800px


gem5/SST 集成

Diagram showing how gem5 interacts with other simulators w:800px


gem5/SST 集成


gem5/SST 集成

Snoop protocol


gem5/SST 集成


gem5/SST 集成


gem5/SST 集成


其他注意事项


文档