First of all, thank you to all of the contributors who made this another great gem5 release! We'll be talking about this release and many other cool things that have happened in the gem5 community over the past few years at the gem5 workshop with ISCA 2022. You can find a livestream and recording on our youtube channel.
gem5 version 22.0 has been slightly delayed, but we a have a very strong release! This release has 660 changes from 48 unique contributors. While there are not too many big ticket features, the community has done a lot to improve the stablity and add bugfixes to gem5 over this release. That said, we have a few cool new features like full system GPU support, a huge number of Arm improvements, and an improved HBM model.
See below for more details!
The following RISCV instructions have been added to gem5's RISC-V ISA:
The gem5 standard library's downloader has been re-engineered to more efficiently obtain the resources.json
file. It is now cached instead of retrieved on each resource retrieval.
The resources.json
directory has been moved to a more permament URL at http://resources.gem5.org/resources.json.
Tests have also been added to ensure the resources module continues to function correctly.
The gem5 in SystemC has been revamped to accomodate new research needs. These changes include stability improvements and bugs fixes. The gem5 testing suite has also been expanded to include gem5 in SystemC tests.
Users may now simulate an AMD GPU device in full system mode using the ROCm 4.2 compute stack. Until v21.2, gem5 only supported GPU simulation in Syscall-Emulation mode with ROCm 4.0. See src/gpu-fs/README.md
in gem5-resources and example scripts in configs/example/gpufs/
for example scripts which run GPU full system simulations.
A GPU Ruby random tester has been added to help validate the correctness of the CPU and GPU Ruby coherence protocols as part of every kokoro check-in. This helps validate the correctness of the protocols before new changes are checked in. Currently the tester focuses on the protocols used with the GPU, but the ideas are extensible to other protocols. The work is based on “Autonomous Data-Race-Free GPU Testing”, IISWC 2019, Tuan Ta, Xianwei Zhang, Anthony Gutierrez, and Bradford M. Beckmann.
Via this change, an ARM Board, ArmBoard
, has been added to the gem5 standard library. This allows for an ARM system to be run using the gem5 stdlib components.
An example gem5 configuration script using this board can be found in configs/example/gem5_library/arm-ubuntu-boot-exit.py
.
createAddrRanges
now supports NUMA configurationsWhen the system is configured for NUMA, it has multiple memory ranges, and each memory range is mapped to a corresponding NUMA node. For this, the change enables createAddrRanges
to map address ranges to only a given HNFs.
Jira ticker here: https://gem5.atlassian.net/browse/GEM5-1187.
For instance, the O3CPU
is now the X86O3CPU
and ArmO3CPU
, etc. This requires a number of changes if you have your own CPU models. See https://gem5-review.googlesource.com/c/public/gem5/+/52490 for details.
Additionally, this requires changes in any configuration script which inherits from the old CPU types.
In many cases, if there is only a single ISA compiled the old name will still work. However, this is not 100% true.
Finally, CPU_MODELS
is no longer a parameter in build_opts/
. Now, if you want to compile a CPU model for a particular ISA you will have to add a new file for the CPU model in the arch/
directory.
If you have any specialized CPU models or any ISAs which are not in the mainline, expect many changes when rebasing on this release.
initiateSpecialMemCmd
renamed to initiateMemMgmtCmd
to generalize to other command beyond HTM (e.g., DVM/TLBI)OperandDesc
class added (e.g., see https://gem5-review.googlesource.com/c/public/gem5/+/49731)TheISA
have been removedand
IsCallflags for RISC-V jump instructions by defining a new
JumpConstructor` in “standard.isa”. Jira Ticket here: https://gem5.atlassian.net/browse/GEM5-1139.env
in the SConscript files now requires you to use env['CONF']
to access them. Anywhere that env['<VARIABLE>']
appeared should noe be env['CONF']['<VARIABLE>']
gem5.build
directory