# Springbok Model Execution Repository

This project contains ML model codegen and execution libraries/examples. The
artifacts built from this project is targeted for RISC-V 32-bit baremetal machine
(Springbok).

## Prerequisite

If you get this project from Project Shodan manifest, you are all set. If not,
you need to have following projects as well to build the project successfully.

* [Springbok BSP](https://spacebeaker.googlesource.com/shodan/sw/vec): Under `<dir>/sw/vec`
* [IREE](https://github.com/google/iree): Under `<dir>/toolchain/iree`
* [Public ML models](https://spacebeaker.googlesource.com/shodan/ml-models-public): Under `<dir>/ml/ml-models-public`
* RISC-V 32-bit crosscompile toolchain

This project needs to be at `<dir>/sw/vec_iree`

## Code structure

* build_tools: Utility scripts for the project
* cmake: CMake Macros for the project
* native_log: BSP support for the Linux userspace emulation
* samples: Codegen and execution of ML models based on IREE
  * device: Device HAL driver library
  * float_model: float model examples
  * quant_model: quantized model examples
  * simple_vec_mul: Point-wise vector multiplication examples
  * util: Runtime utility library for model execution

## Build the project

If you are running from Project Shodan repo, you can build the artifacts with `m iree`.
If you download this project alone, you need to download/build IREE's host compiler,
then at the top level directory

```bash
  cmake -B <output dir> -G Ninja \
     -DCMAKE_TOOLCHAIN_FILE="$(realpath sw/vec_iree/cmake/riscv_iree.cmake)" \
     -DCMAKE_BUILD_TYPE=MinSizeRel \
     -DIREE_HOST_BINARY_ROOT="$(IREE_COMPILER_DIR)/install" \
     -DRISCV_TOOLCHAIN_ROOT=$(TOOLCHAINRV32_PATH) \
     <dir>/sw/vec_iree
  cmake --build <output dir> --target all
```

## Run the executables

You can run QEMU or RENODE emulation with the built executables. In Shodan repo,
`qemu_sim_springbok` for QEMU emulation, and `sim_springbok` for Renode simulation.
Out-of-repo emulation is possible but require more steps.

## Test the executables

In Shodan, this project utilizes LLVM `lit` and `FileCheck` to test the ML
executable performance. The tests are defined in the *_test.txt files under
`samples`. To run the test, at the Shodan top level directory

```bash
lit --path <Filecheck dir> -a sw/vec_iree/samples
```

Filecheck in Debian testing is under `/usr/lib/llvm-11/bin`

Add `-D FEATURES=internal` to enable the internal model tests. Add `-D RUNNER=qemu`
to enable the qemu tests.
