CFU Playground
CFU Playground is a full-stack open-source framework for TinyML Acceleration. The tool enables users to rapidly design and prototype tightly coupled accelerators and explore novel design space tradeoffs between CPU and accelerator.
Installing CFU Playground
From the repository root, run the following script:
./install_sim cfu
Run Training Scripts
Run the required script in the arch-gym conda environment. These scripts are present in sims/CFU-Playground:
Random Walker:
python train_randomwalker_CFUPlayground.pyRandom Search:
python train_randomsearch_CFUPlayground.pyQuasi Random:
python train_quasirandom_CFUPlayground.pyGrid Search:
python train_gridsearch_CFUPlayground.pyNSGA2:
python train_NSGA2_CFUPlayground.pyEMUKIT_GP:
python train_EMUKIT_GP_CFUPlayground.py
Configuration options
There are various workloads available to train for in CFU Playground:
micro_speech, magic_wand, mnv2, hps, mlcommons_tiny_v01_amond, mlcommons_tiny_v01_imgc, mlcommons_tiny_v01_kws, mlcommons_tiny_v01_vww
There are also the following embench workloads available:
primecount, minver, aha_mont64, crc_32, cubic, edn, huffbench, matmul, md5, nbody, nettle_aes, nettle_sha256, nsichneu, picojpeg, qrduino, slre, st, statemate, tarfind, ud, wikisort
To update various parameters such as workload, num_steps, reward_formulation for the training scripts, follow these steps:
python training_script.py --parameter=value
Script Parameter |
Values |
default |
|---|---|---|
workload |
any of the workloads listed above |
micro_speech |
num_steps |
any integer |
1 |
traject_dir |
directory name (relative to sims/CFU-Playground) |
<training algorithm name>_trajectories |
use_envlogger |
boolean |
True |
reward_formulation |
both, cells, cycles |
both |
Design Space
Currently, CFU-Playground allows the exploration of the following design space:
System Parameter |
Values |
|---|---|
Bypass |
True, False |
Branch Prediction |
None, Static, Dynamic, Dynamic Target |
Instruction Cache Size |
0-16KiB |
Data Cache Size |
0-16KiB |
Hardware Multiplier |
True, False |
Hardware Divider |
True, False |
Single Cycle Multiplier |
True, False |
Single Cycle Shifter |
True, False |
Safe |
True, False |