---
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).
