blob: b78abd4bee8201c23afe7ebe2601791e839f5980 [file] [log] [blame] [view]
---
layout: default
---
# gem5 Resources
This repository contains the sources needed to compile the gem5 resources.
The compiled resources are found in the gem5 resources bucket,
http://dist.gem5.org/dist. Though these resources are not needed to compile or
run gem5, they may be required to execute some gem5 tests or may be useful
when carrying out specific simulations.
The following sections outline our versioning policy, how to make changes
to this repository, and describe each resource and how they may be built.
## Versioning
We ensure that for each version of the [gem5 source](
https://gem5.googlesource.com/public/gem5/) there is a corresponding version of
the gem5-resources, with the assumption that version X of the gem5 source will
be used with version X of the gem5-resources. The gem5-resources repository
contains two branches, develop and stable. The stable branch's HEAD points
towards the latest gem5 resources release, which will be the same version id
as the that of the latest gem5 source. E.g., if the latest release of gem5 is
v20.2.0.0, then the latest release of gem5-resources will be v20.2.0.0, with
the HEAD of its stable branch tagged as v20.2.0.0. Previous versions will be
tagged within the stable branch. Past versions gem5-resources can thereby be
checked out with `git checkout <VERSION>`. A complete list of versions can be
found with `git tag`. The develop branch contains code under development and
will be merged into the stable branch, then tagged, as part of the next release
of gem5. More information on gem5 release procedures can be found [here](
https://gem5.googlesource.com/public/gem5/+/refs/heads/stable/CONTRIBUTING.md#releases).
Any release procedures related to the gem5 source can be assumed to be
applicable to gem5-resources.
The compiled resources for gem5 can be found under
http://dist.gem5.org/dist/{VERSION}. E.g. compiled resources for gem5 v20.2
are under http://dist.gem5.org/dist/v20-2 and are compiled from
gem5-resources v20.2. http://dist.gem5.org/dist/develop is kept in sync
with the develop branch, and therefore should not be depended upon for stable,
regular usage.
**Note: Resource files for gem5 v19.0.0.0, our legacy release, can be found
under http://dist.gem5.org/dist/current**.
## Making Changes
Changes to this repository are made to the develop branch via our Gerrit
code review system. Therefore, to make changes, first clone the repository
checkout the develop branch:
```
git clone https://gem5.googlesource.com/public/gem5-resources
git checkout --track origin/develop
```
Then make changes and commit. When ready, push to Gerrit with:
```
git push origin HEAD:refs/for/develop
```
The change will then be reviewed via our [Gerrit code review system](
https://gem5-review.googlesource.com). Once fully accepted and merged into
the gem5-resources repository, please contact Bobby R. Bruce
[bbruce@ucdavis.edu](mailto:bbruce@ucdavis.edu) to have the compiled sources
uploaded to the gem5 resources bucket.
## Resource: RISCV Tests
The RISCV Tests source can be found in the `src/riscv-tests` directory. More
information about these tests can be found in `src/riscv-tests/README.md`.
### RISCV Tests Origins
The RISCV Tests in this repository were obtained from
<https://github.com/riscv-software-src/riscv-tests.git>, revision
e65ecdf941a5484af27f9be223fb655ebcb0398b.
### RISCV Tests Compilation
To compile the RISCV Tests the [RISCV GNU Compiler](
https://github.com/riscv/riscv-gnu-toolchain) must be installed.
Then, to compile:
```
cd src/riscv-tests
autoconf
./configure --prefix=/opt/riscv/target
RISCV_PREFIX=<COMPILER_PREFIX> make
```
As an example for `make`, if the binary name for the RISCV compiler is
`riscv64-linux-gnu-gcc`, then the make command is the following:
```
RISCV_PREFIX=riscv64-linux-gnu- make
```
This RISCV binaries can then be found within the `src/riscv-tests/benchmarks`
directory.
### RISCV Tests Pre-built binaries
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/dhrystone.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/median.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/mm.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/mt-matmul.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/mt-vvadd.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/multiply.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/pmp.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/qsort.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/rsort.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/spmv.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/towers.riscv>
<http://dist.gem5.org/dist/v22-0/test-progs/riscv-tests/vvadd.riscv>
## Resource: simple
The simple resources are small binaries, often used to run quick tests and
checks in gem5. They are baremetal.
### simple Compilation
Simple single source file per executable userland or baremetal examples.
The toplevel executables under `src/simple` can be built for any ISA that we
have a cross compiler for. The current cross compilers supported are :
- `x86_64` (as installed via APT with `sudo apt install build-essential`)
- [`aarch64-linux-gnu-gcc/arch64-linux-gnu-g++`](
https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/)
- [`arm-linux-gnueabihf-gcc/arm-linux-gnueabihf-g++`](
https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/)
- [`riscv64-linux-gnu-gcc/riscv64-linux-gnu-g++`](
https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler/)
Examples that build only for some ISAs specific ones are present under
`src/simple/<ISA>` subdirs, e.g. `src/simple/aarch64/`,
The ISA names are meant to match `uname -m`, e.g.:
- `aarch64`
- `arm`
- `riscv`
- `x86_64`
- `sparc64`
You have to specify the path to the gem5 source code with `GEM5_ROOT` variable so that
m5ops can be used from there. For example for a native build:
cd src/simple
make -j`nproc` GEM5_ROOT=../../../
The default of that variable is such that if you place this repository and the gem5
repository in the same directory:
./gem5/
./gem5-resources/
you can omit that variable and build just with:
make
After the building, the generated files are located under:
./out/<ISA>/
For example, some of the userland executables built on x86 are:
./out/x86_64/user/hello.out
./out/x86_64/user/x86_64/mwait.out
Or if you build for a different ISA:
make ISA=aarch64
some of the executables would be:
./out/aarch64/user/hello.out
./out/aarch64/user/aarch64/futex_ldxr_stxr.out
By default, only userland executables are built. You can build just the baremetal
ones instead with:
make ISA=aarch64 bare
or both userland and baremetal with:
make ISA=aarch64 all
A sample baremetal executable generated by this is:
out/aarch64/bare/m5_exit.out
Only ISAs that have a corresponding `src/simple/bootloader/` file can build for
baremetal, e.g. `src/simple/bootloader/aarch64.S`.
Note that a some C source files can produce both a baremetal and an userland.
For example `m5_exit.c` produces both:
out/aarch64/bare/m5_exit.out
out/aarch64/user/m5_exit.out
However, since the regular userland toolchain is used rather than a more
specialized baremetal toolchain, the C standard library is not available.
Therefore, only very few C examples can build for baremetal, notably the ones
that use m5ops.
There are also examples that can only build for baremetal, e.g.
`aarch64/semihost_exit` only builds for baremetal, as semihosting is not
available on userland.
The `simple` directory is also able to generate squashfs images containing
only a single userland executable at `/sbin/init` for any of the userland
executables. This can be done with a command of type:
make ISA=aarch64 out/aarch64/squashfs/m5_exit.squashfs
Squashfs is a filesystem type that the Linux kernel understands natively,
exactly like ext4, except that it is a bit more convenient to create, and
write-only.
You can therefore give those squashfs images to gem5 exactly as you
would give a normal ext4 raw image, by pointing to it for example with
`fs.py --disk-image=m5_exit.squashfs` as shown at:
https://www.gem5.org/documentation/general_docs/fullsystem/building_arm_kernel
Linux will then run the given userland executable after Linux boots as the
init program.
The initial motivation for this was to generate simple test images for
Linux boot.
Since this is a less common use case, squashfs images are not currently
generated by any single phony target all at once.
### simple Pre-built binaries
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/x86/test_pthread_create_seq>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/x86/test_pthread_create_para>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/x86/test_pthread_mutex>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/x86/test_atomic>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/x86/test_pthread_cond>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/x86/test_std_thread>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/x86/test_std_mutex>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/x86/test_std_condition_variable>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch32/test_pthread_create_seq>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch32/test_pthread_create_para>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch32/test_pthread_mutex>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch32/test_atomic>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch32/test_pthread_cond>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch32/test_std_thread>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch32/test_std_mutex>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch32/test_std_condition_variable>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch64/test_pthread_create_seq>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch64/test_pthread_create_para>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch64/test_pthread_mutex>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch64/test_atomic>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch64/test_pthread_cond>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch64/test_std_thread>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch64/test_std_mutex>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/aarch64/test_std_condition_variable>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/riscv64/test_pthread_create_seq>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/riscv64/test_pthread_create_para>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/riscv64/test_pthread_mutex>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/riscv64/test_atomic>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/riscv64/test_pthread_cond>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/riscv64/test_std_thread>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/riscv64/test_std_mutex>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/riscv64/test_std_condition_variable>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/sparc64/test_pthread_create_seq>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/sparc64/test_pthread_create_para>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/sparc64/test_pthread_mutex>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/sparc64/test_atomic>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/sparc64/test_pthread_cond>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/sparc64/test_std_thread>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/sparc64/test_std_mutex>
<http://dist.gem5.org/dist/v22-0/test-progs/pthreads/sparc64/test_std_condition_variable>
## Resource: Square
### Square Compilation
To compile:
**Note**: Make sure you are in gem5-resources directory (resources like square are not present in the gem5 repository)
To clone the gem5-resources repository, run the following command:
```
git clone https://gem5.googlesource.com/public/gem5-resources
```
```
cd src/gpu/square
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu make gfx8-apu
```
The compiled binary can be found in `src/gpu/square/bin`
### Square Pre-built binary
<http://dist.gem5.org/dist/v22-0/test-progs/square/square>
# Resource: HSA Agent Packet Example
Based off of the Square resource in this repository, this resource serves as
an example for using an HSA Agent Packet to send commands to the GPU command
processor included in the GCN_X86 build of gem5.
The example command extracts the kernel's completion signal from the domain
of the command processor and the GPU's dispatcher. Initially this was a
workaround for the hipDeviceSynchronize bug, now fixed. The method of
waiting on a signal can be applied to other agent packet commands though.
Custom commands can be added to the command processor in gem5 to control
the GPU in novel ways.
## Compilation
To compile:
```
cd src/gpu/hsa-agent-pkt
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu make gfx8-apu
```
The compiled binary can be found in `src/gpu/hsa-agent-pkt/bin`
# Resource: HIP Sample Applications
The [HIP sample apps](
https://github.com/ROCm-Developer-Tools/HIP/tree/roc-1.6.0/samples) contain
applications that introduce various GPU programming concepts that are usable
in HIP.
The samples cover topics such as using and accessing different parts of GPU
memory, running multiple GPU streams, and optimization techniques for GPU code.
Certain apps aren't included due to complexities with either ROCm or Docker
(hipEvent, profiler), or due to lack of feature support in gem5 (peer2peer)
## Compilation
```
cd src/gpu/hip-samples
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu make
```
Individual programs can be made by specifying the name of the program
By default, this code builds for gfx801, a GCN3-based APU. This can be
overridden by specifying `-e HCC_AMDGPU_TARGET=<target>` in the build command.
## Pre-built binary
<http://dist.gem5.org/dist/v22-0/test-progs/hip-samples/2dshfl>
<http://dist.gem5.org/dist/v22-0/test-progs/hip-samples/dynamic_shared>
<http://dist.gem5.org/dist/v22-0/test-progs/hip-samples/inline_asm>
<http://dist.gem5.org/dist/v22-0/test-progs/hip-samples/MatrixTranspose>
<http://dist.gem5.org/dist/v22-0/test-progs/hip-samples/sharedMemory>
<http://dist.gem5.org/dist/v22-0/test-progs/hip-samples/shfl>
<http://dist.gem5.org/dist/v22-0/test-progs/hip-samples/stream>
<http://dist.gem5.org/dist/v22-0/test-progs/hip-samples/unroll>
# Resource: Heterosync
[Heterosync](https://github.com/mattsinc/heterosync) is a benchmark suite used
to test the performance of various types of fine-grained synchronization on
tightly-coupled GPUs. The version in gem5-resources contains only the HIP code.
The README in the heterosync folder details the various synchronization primitives
and the other command-line arguments for use with heterosync.
## Compilation
```
cd src/gpu/heterosync
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu make release-gfx8
```
The release-gfx8 target builds for gfx801, a GCN3-based APU, and gfx803, a
GCN3-based dGPU. There are other targets (release) that build for GPU types
that are currently unsupported in gem5.
## Pre-built binary
<http://dist.gem5.org/dist/v22-0/test-progs/heterosync/gcn3/allSyncPrims-1kernel>
# Resource: lulesh
[lulesh](https://computing.llnl.gov/projects/co-design/lulesh) is a DOE proxy
application that is used as an example of hydrodynamics modeling. The version
provided is for use with the gpu-compute model of gem5.
## Compilation and Running
```
cd src/gpu/lulesh
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu make
```
By default, the Makefile builds for gfx801, and is placed in the `src/gpu/lulesh/bin` folder.
lulesh is a GPU application, which requires that gem5 is built with the GCN3_X86 architecture.
To build GCN3_X86:
```
# Working directory is your gem5 directory
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu scons -sQ -j$(nproc) build/GCN3_X86/gem5.opt
```
The following command shows how to run lulesh
Note: lulesh has two optional command-line arguments, to specify the stop time and number
of iterations. To set the arguments, add `--options="<stop_time> <num_iters>`
to the run command. The default arguments are equivalent to `--options="1.0e-2 10"`
```
# Assuming gem5 and gem5-resources are in your working directory
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu gem5/build/GCN3_X86/gem5.opt gem5/configs/example/apu_se.py -n3 --mem-size=8GB --benchmark-root=gem5-resources/src/gpu/lulesh/bin -clulesh
```
## Pre-built binary
<http://dist.gem5.org/dist/v22-0/test-progs/lulesh/lulesh>
# Resource: halo-finder (HACC)
[HACC](https://asc.llnl.gov/coral-2-benchmarks) is a DoE application designed to simulate the
evolution of the universe by simulating the formation of structure in collisionless fluids
under the influence of gravity. The halo-finder code can be GPU accelerated by using
the code in RCBForceTree.cxx
`src/gpu/halo-finder/src` contains the code required to build and run ForceTreeTest from `src/halo_finder` in the main HACC codebase.
`src/gpu/halo-finder/src/dfft` contains the dfft code from `src/dfft` in the main HACC codebase.
## Compilation and Running
halo-finder requires that certain libraries that aren't installed by default in the
GCN3 docker container provided by gem5, and that the environment is configured properly
in order to build. We provide a Dockerfile that installs those libraries and
sets the environment.
In order to test the GPU code in halo-finder, we compile and run ForceTreeTest.
To build the Docker image and the benchmark:
```
cd src/gpu/halo-finder
docker build -t <image_name> .
docker run --rm -v ${PWD}:${PWD} -w ${PWD}/src -u $UID:$GID <image_name> make hip/ForceTreeTest
```
The binary is built for gfx801 by default and is placed at `src/gpu/halo-finder/src/hip/ForceTreeTest`
ForceTreeTest is a GPU application, which requires that gem5 is built with the GCN3_X86 architecture.
To build GCN3_X86:
```
# Working directory is your gem5 directory
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID <image_name> scons -sQ -j$(nproc) build/GCN3_X86/gem5.opt
```
To run ForceTreeTest:
```
# Assuming gem5 and gem5-resources are in the working directory
docker run --rm -v $PWD:$PWD -w $PWD -u $UID:$GID <image_name> gem5/build/GCN3_X86/gem5.opt gem5/configs/example/apu_se.py -n3 --benchmark-root=gem5-resources/src/gpu/halo-finder/src/hip -cForceTreeTest --options="0.5 0.1 64 0.1 1 N 12 rcb"
```
## Pre-built binary
<http://dist.gem5.org/dist/v22-0/test-progs/halo-finder/ForceTreeTest>
# Resource: DNNMark
[DNNMark](https://github.com/shidong-ai/DNNMark) is a benchmark framework used
to characterize the performance of deep neural network (DNN) primitive workloads.
## Compilation and Running
To build DNNMark:
**NOTE**: Due to DNNMark building a library, it's important to mount gem5-resources
to the same directory within the docker container when building and running, as otherwise the benchmarks
won't be able to link against the library. The example commands do this by using
`-v ${PWD}:${PWD}` in the docker run commands
```
cd src/gpu/DNNMark
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu ./setup.sh HIP
docker run --rm -v ${PWD}:${PWD} -w ${PWD}/build -u $UID:$GID gcr.io/gem5-test/gcn-gpu make
```
DNNMark uses MIOpen kernels, which are unable to be compiled on-the-fly in gem5.
We have provided a python script to generate these kernels for a subset of the
benchmarks for a gfx801 GPU with 4 CUs by default
To generate the MIOpen kernels:
```
cd src/gpu/DNNMark
docker run --rm -v ${PWD}:${PWD} -v${PWD}/cachefiles:/root/.cache/miopen/2.9.0 -w ${PWD} gcr.io/gem5-test/gcn-gpu python3 generate_cachefiles.py cachefiles.csv [--gfx-version={gfx801,gfx803}] [--num-cus=N]
```
Due to the large amounts of memory that need to be set up for DNNMark, we have
added in the ability to MMAP a file to reduce setup time, as well as added a
program that can generate a 2GB file of floats.
To make the MMAP file:
```
cd src/gpu/DNNMark
g++ -std=c++0x generate_rand_data.cpp -o generate_rand_data
./generate_rand_data
```
DNNMark is a GPU application, which requires that gem5 is built with the GCN3_X86 architecture.
To build GCN3_X86:
```
# Working directory is your gem5 directory
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu scons -sQ -j$(nproc) build/GCN3_X86/gem5.opt
```
To run one of the benchmarks (fwd softmax) in gem5:
```
# Assuming gem5 and gem5-resources are sub-directories of the current directory
docker run --rm -v ${PWD}:${PWD} -v ${PWD}/gem5-resources/src/gpu/DNNMark/cachefiles:/root/.cache/miopen/2.9.0 -w ${PWD} gcr.io/gem5-test/gcn-gpu gem5/build/GCN3_X86/gem5.opt gem5/configs/example/apu_se.py -n3 --benchmark-root=gem5-resources/src/gpu/DNNMark/build/benchmarks/test_fwd_softmax -cdnnmark_test_fwd_softmax --options="-config gem5-resources/src/gpu/DNNMark/config_example/softmax_config.dnnmark -mmap gem5-resources/src/gpu/DNNMark/mmap.bin"
```
# Resource: pennant
pennant is an unstructured mesh physics mini-app designed for advanced
architecture research. It contains mesh data structures and a few
physics algorithms adapted from the LANL rad-hydro code FLAG, and gives
a sample of the typical memory access patterns of FLAG.
## Compiling and Running
```
cd src/gpu/pennant
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu make
```
By default, the binary is built for gfx801 and is placed in `src/gpu/pennant/build`
pennant is a GPU application, which requires that gem5 is built with the GCN3_X86 architecture.
pennant has sample input files located at `src/gpu/pennant/test`. The following command shows how to run the sample `noh`
```
# Assuming gem5 and gem5-resources are in your working directory
docker run --rm -v ${PWD}:${PWD} -w ${PWD} -u $UID:$GID gcr.io/gem5-test/gcn-gpu gem5/build/GCN3_X86/gem5.opt gem5/configs/example/apu_se.py -n3 --benchmark-root=gem5-resources/src/gpu/pennant/build -cpennant --options="gem5-resources/src/gpu/pennant/test/noh/noh.pnt"
```
The output gets placed in `src/gpu/pennant/test/noh/`, and the file `noh.xy`
against the `noh.xy.std` file. Note: Only some tests have `.xy.std` files to
compare against, and there may be slight differences due to floating-point rounding
## Pre-built binary
<http://dist.gem5.org/dist/v22-0/test-progs/pennant/pennant>
## Resource: SPEC 2006
The [Standard Performance Evaluation Corporation](
https://www.spec.org/benchmarks.html) (SPEC) CPU 2006 benchmarks are designed
to provide performance measurements that can be used to compare
compute-intensive workloads on different computer systems. SPEC CPU 2006
contains 12 different benchmark tests.
`src/spec-2006` provides resources on creating a SPEC 2006 disk image, and
necessary scripts to run the SPEC 2006 benchmarks within X86 gem5 simulations.
Please consult the `src/spec-2006/README.md` for more information.
**Please note, due to licensing issues, the SPEC 2006 iso cannot be provided
as part of this repository.**
## Resource: SPEC 2017
The [Standard Performance Evaluation Corporation](
https://www.spec.org/benchmarks.html) (SPEC) CPU 2017 benchmarks are designed
to provide performance measurements that can be used to compare
compute-intensive workloads on different computer systems. SPEC CPU 2017
contains 43 benchmarks organized into four suites: SPECspeed 2017 Integer,
SPECspeed 2017 Floating Point, SPECrate 2017 Integer, and SPECrate 2017
Floating Point.
`src/spec-2017` provides resources on creating a SPEC 2017 disk image, and
necessary scripts to run the SPEC 2017 benchmarks within X86 gem5 simulations.
Please consult the `src/spec-2017/README.md` for more information.
**Please note, due to licensing issues, the SPEC 2017 iso cannot be provided
as part of this repository.**
## Resource: GAP Benchmark Suite (GAPBS) tests
[GAPBS](http://gap.cs.berkeley.edu/benchmark.html) is a graph processing benchmark suite and it contains 6 kernels: Breadth-First Search, PageRank, Connected Components, Betweenness Centrality, Single-Source Shortest Paths, and Triangle Counting.
### GAPBS Origin
We obtained the GAPBS benchmark suite from http://gap.cs.berkeley.edu/benchmark.html
### Building the GAPBS image
`src/gapbs` contains resources to build a GAPBS disk image which may
be used to run the benchmark on gem5 X86 simulations.
`src/gapbs/README.md` contains build and usage instructions.
### GAPBS Pre-built disk image
<http://dist.gem5.org/dist/v22-0/images/x86/ubuntu-18-04/gapbs.img.gz>.
## Resource: PARSEC Benchmark Suite
The [Princeton Application Repository for Shared-Memory Computers (PARSEC)](
https://parsec.cs.princeton.edu/) is a benchmark suite composed of
multithreaded programs.
### PARSEC Origins
We used PARSEC 3.0, available from <https://parsec.cs.princeton.edu>.
### Building the PARSEC image
In `src/parsec` we provide the source to build a disk
image which may be used, alongside configuration files, to run the PARSEC
Benchmark Suite on gem5 architectural simulations. Please consult
`src/parsec/README.md` for build and execution information.
### GAPBS Pre-built disk image
<http://dist.gem5.org/dist/v22-0/images/x86/ubuntu-18-04/parsec.img.gz>.
## Resource: NAS Parallel Benchmarks (NPB) Tests
The NAS Parallel Benchmarks (NPB) are a small set of programs designed to
help evaluate the performance of parallel supercomputers. The set consists of
five Linux Kernels and three pseudo-applications. gem5 resources provides a
disk image, and scripts allowing for the NPB image to be run within gem5 X86
simulations.
### NPB Origins
We use NPB 3.4.1, available from
<https://www.nas.nasa.gov/publications/npb.html>.
### NPB Building
The npb resources can be found in `src/npb`. It consists of:
- npb disk image resources
- gem5 run scripts to execute these tests
The instructions to build the npb disk image, a Linux kernel binary, and how to
use gem5 run scripts to run npb are available in the [README](
src/npb-tests/README.md) file.
### NPB Pre-built disk image
<http://dist.gem5.org/dist/v22-0/images/x86/ubuntu-18-04/npb.img.gz>
## Resource: Linux Boot Tests
The Linux boot tests refer to the tests performed with different gem5 configurations to check its ability to boot a Linux kernel.
More information on Linux boot tests can be found [here](https://www.gem5.org/project/2020/03/09/boot-tests.html).
The boot-tests resources consist of three main components:
- x86-ubuntu disk image
- gem5 run scripts to execute boot tests
- linux kernel configuration files
The instructions to build the x86-ubuntu disk image, the Linux binaries, and how to use gem5 run scripts to run boot-tests are available in this [README](src/x86-ubuntu/README.md) file.
## Resource: RISCV Full System
The RISCV Full System resource includes a RISCV boot loader (`berkeley bootloader (bbl)`) to boot the Linux 5.10 kernel on a RISCV system, and an image which includes the BusyBox software suite.
The resource also contains simple gem5 run/config scripts to run Linux full system simulations in which a user may telnet into.
Further information on building a riscv disk image, a riscv boot loader, and how to use gem5 scripts to run riscv Linux full system simulations, is available in the [README](src/riscv-fs/README.md) file.
### RISCV Full System pre-built disk image
<http://dist.gem5.org/dist/v22-0/images/riscv/busybox/riscv-disk.img.gz>
### RISCV Full System pre-built Linux bootloader
<http://dist.gem5.org/dist/v22-0/kernels/riscv/static/bootloader-vmlinux-5.10>
## Resource: RISCV Full System with Disk Image
The RISCV Full System resource includes a RISCV bootloader (`berkeley bootloader (bbl)`) to boot the Linux 5.10 kernel on a RISCV system.
The workload and the Linux utils (provided by BusyBox) are also included in the bootloader.
The resource also contains simple gem5 run/config scripts to run Linux full system simulations in which a user may telnet into.
More details on building such a RISCV bootloader and hwo does it work are available in the [README.md](src/riscv-boot-exit-nodisk/README.md) file.
### RISCV Full System pre-built Linux bootloader with embedded workload
<http://dist.gem5.org/dist/v22-0/misc/riscv/bbl-busybox-boot-exit>
## Resource: Insttest
The Insttests test SPARC instructions.
Creating the SPARC Insttest binary requires a SPARC cross compile. Instructions
on creating a cross compiler can be found [here](
https://preshing.com/20141119/how-to-build-a-gcc-cross-compiler).
### Insttest Compilation
To compile:
```
cd src/insttest
make
```
We provide a docker image with a pre-loaded SPARC cross compiler. To use:
```
cd src/insttest
docker run --volume $(pwd):$(pwd) -w $(pwd) --rm gcr.io/gem5-test/sparc64-gnu-cross:latest make
```
The compiled binary can be found in `src/insttest/bin`.
### Insttest Pre-built binary
<http://dist.gem5.org/dist/v22-0/test-progs/insttest/bin/sparc/linux/insttest>
## Resource: Linux Kernel Binary
Contains scripts to create a Linux kernel binary.
### Linux Kernel Compilation
Instructions on how to use the scripts can be found here
`src/linux-kernel/README.md`.
### Linux Kernel Pre-built binaries
<http://dist.gem5.org/dist/v22-0/kernels/x86/static/vmlinux-4.4.186>
<http://dist.gem5.org/dist/v22-0/kernels/x86/static/vmlinux-4.9.186>
<http://dist.gem5.org/dist/v22-0/kernels/x86/static/vmlinux-4.14.134>
<http://dist.gem5.org/dist/v22-0/kernels/x86/static/vmlinux-4.19.83>
## Resource: LupV Disk image and Kernel/boot loader
[gem5 supports LupIO](https://www.gem5.org/project/2022/02/07/lupio.html).
An example of using gem5 with LupIO can be found in [`configs/example/lupv`](https://gem5.googlesource.com/public/gem5/+/refs/tags/v22.0.0.0/configs/example/lupv/).
The sources to build a LupV (LupIO with RISC-V) disk image (based on busybox) and a LupV bootloader/kernel can be found in `src/lupv`.
### LupV Pre-built disk image
<http://dist.gem5.org/dist/v22-0/images/riscv/busybox/riscv-lupio-busybox.img.gz>
### LupV Pre-built bootloader/kernel
<http://dist.gem5.org/dist/v22-0/kernels/riscv/static/lupio-linux>
## Licensing
There is no universal license encompassing all this repository's contents.
The licences covering the individual gem5 resources are therefore highlighted
below.
* **asmtest** : [`src/asmtest/LICENSE`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/asmtest/LICENSE).
* **riscv-tests** : [`src/riscv-tests/LICENSE`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/riscv-tests/LICENSE).
* **square**: Consult individual copyright notices of source files in
`src/gpu/square`.
* **hsa-agent-pkt**: `src/gpu/hsa-agent-pkt/square.cpp` is licensed under the
same licence as 'src/gpu/square/square.cpp'.
`src/gpu/hsa-agent-pkt/HSA_Interface.[h|.cpp]` are licensed under a BSD Lisense
(A University of Maryland copyright).
* **hip-samples**: Consult individual copyright notices of the source file in
'src/gpu/hip-samples/src'
* **heterosync**: Consult `src/gpu/heterosync/LICENSE.txt`
* **lulesh**: Consult the copyright notice in `src/gpu/lulesh/src/gpu/lulesh.hip.cc`
* **halo-finder**: halo-finder is a subcomponent of HACC, which is licensed under
a BSD license.
* **DNNMark**: DNNMark is licensed under an MIT license, see `src/gpu/DNNMark/LICENSE`
* **pennant**: pennant is licensed under a BSD license, see `src/gpu/pennant/LICENSE`
[src/gpu/square](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/gpu/square).
* **spec 2006**: SPEC CPU 2006 requires purchase of benchmark suite from
[SPEC](https://www.spec.org/cpu2006/) thus, it cannot be freely distributed.
Consult individual copyright notices of source files in [`src/spec-2006`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/spec-2006).
* **spec 2017**: SPEC CPU 2017 requires purchase of benchmark suite from
[SPEC](https://www.spec.org/cpu2017/) thus, it cannot be freely distributed.
Consult individual copyright notices of source files in [`src/spec-2017`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/spec-2017).
* **gapbs**: Consult individual copyright notices of source files in
[`src/gapbs`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/gapbs).
* **parsec**: The code of the [PARSEC project](
https://parsec.cs.princeton.edu/)
is covered by a 3-Clause BSD License (
[`src/parsec/disk-image/parsec/parsec-benchmark/LICENSE`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/parsec/disk-image/parsec/parsec-benchmark/LICENSE)).
For the remaining files, please consult copyright notices in individual source
files.
* **npb-tests**: Consult individual copyright notices of source files in
[`src/npb`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/npb).
The NAS Parallel Benchmarks utilize a permissive BSD-style license.
* **x86-ubuntu**: Consult individual copyright notices of source files in
[`src/x86-ubuntu`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/x86-ubuntu).
* **insttest**: Consult individual copyright notices of source files in
[`src/insttest`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/insttest).
* **linux-kernel**: Consult individual copyright notices of source files in
[`src/linux-kernel`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/linux-kernel).
* **hack-back**: Consult individual copyright notices of source files in
[`src/hack-back`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/hack-back).
* **simple**: Consult individual copyright notices of the source files in
[`src/simple`](
https://gem5.googlesource.com/public/gem5-resources/+/refs/heads/stable/src/simple).