Skip to content

Commit

Permalink
Updates to README.md on how to create assignments
Browse files Browse the repository at this point in the history
Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
  • Loading branch information
powerjg committed Jan 3, 2025
1 parent c9c5eef commit 78f4960
Showing 1 changed file with 23 additions and 7 deletions.
30 changes: 23 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,31 @@ This repository is set up so that you can easily use it as a template repository
This repo contains all of the "general" requirements for gem5-based assignments.
For each assignment, you should create a *fork* of this repository with the template code needed for that particular assignment.

This repository can be used in Codespaces to provide a complete development environment for students to work on the assignments.

## Assignments

The assignment text can be found in the `assignment.md` file in subdirectories of the `assignments` directory.
Each assignment is structured as a single *research question* for which the students must develop hypotheses, design experiments, and analyze results.
Below is the list of assignments in order of increasing difficulty:

- *Getting started*: A simple assignment to get students started with gem5. This will introduce the students to how to use gem5, codespaces, etc.
- *ISA vs Technology*: This assignment compares the performance difference of x86, Arm, and RISC-V ISAs on a simple matrix multiplication workload. The performance is compared across ISAs and between 1 GHz and 4 GHz. The goal is to use the Iron Law of Performance to explain the results.
- *Pipelining*: This assignment compares the performance of an in-order CPU with different pipeline widths, latencies, and depths. The goal is to understand the impact of the pipeline on performance.
- *Out of Order CPU*: This assignment digs into how different parameters of an out-of-order CPU, including width, ROB size, and the number of physical registers, impact performance. This assignment uses a variety of workloads to showcase the differences in how these parameters impact performance.
- *Blocked matrix-multiply*: This assignment uses blocked matrix multiply to show the importance of algorithm design on the performance of caches. It reinforces the AMAT calculation and the impact of cache size on performance.
- *Virtual memory*: (Coming soon) This assignment will explore the impact of virtual memory on performance.
- *False sharing*: This assignment looks at the impact of false sharing on performance. It uses a simple parallel workload, shows 6 different implementations, and asks the students to figure out why the performance is different.

## Using this to create assignments

1. Fork this repository to an assignment-specific repository (e.g., "assign-1") under your classroom organization.
2. Add the new repository as a new remote (`git remote add assign-1 git@github.com:<organization>/assign-1`)
3. Create a new branch (e.g., `git branch -b assign-1`)
4. Set the correct upstream for this branch (`git branch --set-upstream-to=assign-1/main assign-1`)
5. Add the template python configuration files on this branch
6. Push to the new repository (`git push`).
1. Fork this repository to an assignment-specific repository (e.g., "assignment-1-template") under your classroom organization. This fork can be public or private.
2. Move the following files to the root of the repository.
1. The `assignment.md` file to `README.md` in the root of the repository.
2. The `questions.md` file.
3. The `components` directory.
3. Delete the assignments directory.

## Using codespaces

I'll fill this in soon.
I'll fill this in soon.

0 comments on commit 78f4960

Please sign in to comment.