-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
57 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,79 +1,69 @@ | ||
# OPMark (Prototype of OpenPerf Project) | ||
# OpenPerf Project | ||
|
||
This Flake give a Qemu RISC-V Linux / Spike bare metal runtime to run benchmark, aim to make test environment reproducible and result fair enough. | ||
OpenPerf is an open source benchmark aims to test the performance of the microarchitechture in processor core, developed and be mantained by [One Student One Chip Project](https://ysyx.org). | ||
|
||
## Candidate Benchmark Programs | ||
# How to use | ||
|
||
[stress-ng - GPL 2.0 Licence](https://github.com/ColinIanKing/stress-ng) | ||
This project is planning to integrate with [YSYX's workbench](https://github.com/OSCPU/ysyx-workbench) and [NJU ProjectN](https://github.com/NJU-ProjectN). | ||
|
||
[Anybench - MIT Licence](https://github.com/EntityFX/anybench) | ||
|
||
### Memory access patterns | ||
|
||
#### Stream access | ||
|
||
[STREAM - Custom Licence, but Open Source friendly](https://github.com/jeffhammond/STREAM) | ||
|
||
[RRZE-HPC/TheBandwidthBenchmark - MIT Licence](https://github.com/RRZE-HPC/TheBandwidthBenchmark?tab=readme-ov-file) | ||
|
||
#### Other patterns | ||
|
||
[emilk/ram_bench - No Licence](https://github.com/emilk/ram_bench) | ||
|
||
### Integer Arithmetic | ||
|
||
[shaswata56/BenchUtil - WTFPL license](https://github.com/shaswata56/BenchUtil?tab=readme-ov-file) | ||
|
||
### Floating-point Arithmetic | ||
|
||
[shaswata56/BenchUtil - WTFPL license](https://github.com/shaswata56/BenchUtil?tab=readme-ov-file) | ||
|
||
### Branch Prediction | ||
|
||
Verilator Model | ||
|
||
## Run Built-in QEMU VM | ||
|
||
A Nix Flake is provided for convenience, but not necessary dependency in the final project. | ||
|
||
With Nix installed, run `nix develop` to get the reproducible development environment. | ||
|
||
Run `vm` to launch QEMU. | ||
|
||
## How to compile & run programs in Spike | ||
|
||
With `just` installed, run `just compile` then `just run` in the program source code directory. | ||
|
||
Or you can run commands manually. `Justfile` is extremely easy to read and understand. | ||
|
||
## Development Environment & Testing | ||
To use openperf in baseline practice, clone it into your project's [AbstractMachine Kernels](https://github.com/NJU-ProjectN/am-kernels). | ||
|
||
```sh | ||
cd am-kernel # This project would be a submodule in am-kernel when it's finish | ||
git clone [email protected]:Yakkhini/OPMark.git | ||
cd OPMark | ||
# git switch [branch] # Maybe you want to contribute to another branch | ||
cp -r src/common/stdio.c $AM_HOME/klib/src/stdio.c # We improve printf functions feature, like print float numbers | ||
cd src/linpack # Run a sub program to ensure build system working | ||
make ARCH=riscv32-nemu run | ||
cd am-kernels | ||
git clone [email protected]:OSCPU/openperf.git | ||
cd openperf | ||
make ARCH= ... # NOTICE: `...` is not a part of the make command and you need to write it by yourself. | ||
``` | ||
|
||
## Transplanted | ||
|
||
* Memory Access: STREAM | ||
The make recipe just like other benchmark programs in `am-kernel` that you can decide the Architectures and the test scale. | ||
|
||
## Benchmark Programs | ||
|
||
<!-- [stress-ng - GPL 2.0 Licence](https://github.com/ColinIanKing/stress-ng) --> | ||
<!----> | ||
<!-- [Anybench - MIT Licence](https://github.com/EntityFX/anybench) --> | ||
<!----> | ||
<!-- ### Memory access patterns --> | ||
<!----> | ||
<!-- #### Stream access --> | ||
<!----> | ||
<!-- [STREAM - Custom Licence, but Open Source friendly](https://github.com/jeffhammond/STREAM) --> | ||
<!----> | ||
<!-- [RRZE-HPC/TheBandwidthBenchmark - MIT Licence](https://github.com/RRZE-HPC/TheBandwidthBenchmark?tab=readme-ov-file) --> | ||
<!----> | ||
<!-- #### Other patterns --> | ||
<!----> | ||
<!-- [emilk/ram_bench - No Licence](https://github.com/emilk/ram_bench) --> | ||
<!----> | ||
<!-- ### Integer Arithmetic --> | ||
<!----> | ||
<!-- [shaswata56/BenchUtil - WTFPL license](https://github.com/shaswata56/BenchUtil?tab=readme-ov-file) --> | ||
<!----> | ||
<!-- ### Floating-point Arithmetic --> | ||
<!----> | ||
<!-- [shaswata56/BenchUtil - WTFPL license](https://github.com/shaswata56/BenchUtil?tab=readme-ov-file) --> | ||
<!----> | ||
<!-- ### Branch Prediction --> | ||
<!----> | ||
<!-- Verilator Model --> | ||
<!----> | ||
|
||
* Stream Memory Access: STREAM | ||
* Irregular Memory Access: mcf | ||
* Float Memory: GEMM | ||
* Footprint: Gsim and essent which verilate various RISC-V processor cores like riscv-mini, Nutshell, Rocket Core, BOOM and XiangShan | ||
* Branch Prediction: TCC | ||
* Floating-point Arithmetic: Linpack, Whetstone | ||
* Utils: soft-fp(cyl), abstract-machine, openlibm | ||
* Can build: Spike, RISC-V OpenOCD | ||
|
||
## Roadmap | ||
## Ranking (Coming Soon) | ||
|
||
One Student One Chip Project is planning to build a rank for students! You can run OpenPerf with your NEMU or NPC to figure out the performance, and compare to others. | ||
|
||
## Contribute Guide | ||
|
||
### Roadmap | ||
|
||
- [x] Run Configurable Linux on QEMU RISC-V Platform | ||
- [x] Basic Benchmark Programs | ||
- [x] Math Library | ||
- [x] GEMM | ||
- [x] Organize Build Scripts | ||
- [x] More Complex Programs | ||
- [ ] Embedded into am-kernel | ||
- [ ] Handle with Licence | ||
- [ ] Merge into single benchmark program | ||
- [ ] Decide OpenPerf Project File Struct | ||
- [x] Transplant benchmark programs | ||
- [ ] Test the sensitivity of different programs | ||
- [ ] Early Access |