Rena is an HLS-based Resonator Network (RN) accelerator for binary Vector Symbolic Architectures (VSA), a.k.a., Hyperdimensional Computing (HDC). Rena supports state-of-the-art binary RN optimizations, such as activation function and dynamic noise injection. Our HLS-based implementation empowers Rena with flexibility, allowing users to generate RN accelerators for different tasks. To the best of our knowledge, Rena is the first effort to build open-source RN accelerators.
- Resonator Network: Rena is an open-source tool to accelerate RNs based on Binary Spatter Codes (BSC) class in VSA/HDC.
- Versatile: Our HLS-based implementation allows users to generate accelerators considering different parameters such as hypervector dimensionalities and factorization cases.
- Performant: By generating dedicated accelerators, the HLS tool can tune the microarchitecture generation to a specific case.
- Extendable: Working at the HLS level instead of HDL (Verilog or VHDL) allows users to quickly extend the Rena and integrate it in their projects.
- Tested: Rena is built upon a Python and HLS modules. The first is an accurate Pytorch implementation of RNs, while the latter is an accurate hardware replication of the Python module. We provide scritps and tools to validate the HLS model with the one in the Python module.
Clone the repository and all necessary submodules:
git clone https://github.com/cravieira/rena.git
cd rena
git submodule update --init --recursiveThis repository is divided into 2 modules: python and hls. The python module implements a software RN model implemented using TorchHD and Pytorch and is meant to be a golden RN model where users can test different RN parameters, such as vector dimensionality (D), number of factors (F), and codebook size (M). This module is essential to evaluate an RN in terms of algorithm, obtaining results as operational capacity and iterations to convergence.
The hls module implements the accelerator using Hyle and VitisHLS. This module can be used to generate actual FPGA accelerators capable of running the same RNs defined in the python module. This repository also features scripts to load the codebook vectors used in the python module into the HLS testbench to ensure the correcness of the accelerator.
The modules in this project are independent from each other. Please refer to each submodule for details on using them and reproducing the experiments. The top-level directory provides scripts to recreate the plots used in the paper.
Each module has different requirements. Please refer to the README.md in the Python module for its requirements.
The HLS module is built upon Xilinx's Vitis HLS, which must be installed and configured in your PATH. This README assumes the Vitis executable is named vitis_hls. This is important as Xilinx recently introduced the vitis executable with a slightly different CLI than vitis_hls. However, both executables should be able to reproduce the experiments in this repository.
For instructions regarding Vitis installation, please refer to the website. This repository provides automation scripts for vitis_hls v2024.1.
To the best of our knowledge, Rena is the first open-source initiative to accelerate RNs on hardware. However, there are other relevant RN projects available online that implement the resonator on software.
To appear at the 36th International Conference on Field-Programmable Logic and Applications (FPL).