Go to file
Hanchen Ye 2a01425bc0
[Readme] Update paper info
2022-08-29 17:11:05 -05:00
.github/workflows [CI] Remove polygeist test from buildAndTest workflow; Update badge to master branch 2022-04-02 17:23:45 -05:00
docs [Docs] Update scalehls architecture figure 2022-03-20 17:01:30 -05:00
include [FuncDuplication] Implement this pass, which supports the subview sink after duplication; [Transforms] Move FuncPreprocess out of the Loop directory 2022-04-21 14:57:51 -05:00
lib [Transforms] Apply buffer-loop-hoisting after materialize-reduction in scalehls-dse-pipeline 2022-05-12 17:27:25 -05:00
polygeist@edd8f9d0cc Update Polygeist version to support subindex-to-subview option 2022-04-21 01:40:59 -05:00
samples [Samples] Add backprop benchmark from machsuite 2022-04-21 15:13:05 -05:00
test [AffineLoopPerfection] Avoid to perfectize loops with function calls in between two loop levels 2022-04-22 11:26:24 -05:00
tools Remove redundant and transparent includes 2022-04-02 09:08:55 -05:00
.clang-format mechanical rename hlsld to scalehls; update file structure 2020-09-06 18:05:16 -05:00
.gitignore [Samples] Update the structure of the samples folder 2022-02-20 17:15:16 -06:00
.gitmodules Rename Polygeist to polygeist 2021-09-30 12:20:01 -05:00
CMakeLists.txt [CMake] Set LLVM_RUNTIME_OUTPUT_INTDIR parameter to output scalehls-opt and scalehls-translate to correct path during standalone ScaleHLS build 2022-03-25 00:49:18 -05:00
LICENSE Update license 2022-04-02 09:09:32 -05:00
README.md [Readme] Update paper info 2022-08-29 17:11:05 -05:00
build-scalehls.sh [Build] Disable python binding by default; Add a pybind option to build-scalehls.sh; [Readme] Update readme accordingly 2022-03-09 02:11:32 -06:00

README.md

ScaleHLS Project

Build and Test

ScaleHLS is a High-level Synthesis (HLS) framework on MLIR. ScaleHLS can compile HLS C/C++ or PyTorch model to optimized HLS C/C++ in order to generate high-efficiency RTL design using downstream tools, such as Xilinx Vivado HLS.

By using the MLIR framework that can be better tuned to particular algorithms at different representation levels, ScaleHLS is more scalable and customizable towards various applications coming with intrinsic structural or functional hierarchies. ScaleHLS represents HLS designs at multiple levels of abstraction and provides an HLS-dedicated analysis and transform library (in both C++ and Python) to solve the optimization problems at the suitable representation levels. Using this library, we've developed a design space exploration engine to generate optimized HLS designs automatically.

For more details, please see our HPCA'22 and DAC'22 paper:

@inproceedings{yehpca2022scalehls,
  title={ScaleHLS: A New Scalable High-Level Synthesis Framework on Multi-Level Intermediate Representation},
  author={Ye, Hanchen and Hao, Cong and Cheng, Jianyi and Jeong, Hyunmin and Huang, Jack and Neuendorffer, Stephen and Chen, Deming},
  booktitle={2022 IEEE International Symposium on High-Performance Computer Architecture (HPCA)},
  year={2022}
}
@inproceedings{yedac2022scalehls,
  title={ScaleHLS: a scalable high-level synthesis framework with multi-level transformations and optimizations},
  author={Ye, Hanchen and Jun, HyeGang and Jeong, Hyunmin and Neuendorffer, Stephen and Chen, Deming},
  booktitle={Proceedings of the 59th ACM/IEEE Design Automation Conference},
  year={2022}
}

Framework Architecture

Setting this up

Prerequisites

  • python3
  • cmake
  • ninja
  • clang and lld

Optionally, the following packages are required for the Python binding.

  • pybind11
  • numpy

Clone ScaleHLS

$ git clone --recursive git@github.com:hanchenye/scalehls.git
$ cd scalehls

Build ScaleHLS

Run the following script to build ScaleHLS. Optionally, add -p ON to enable the Python binding and -j xx to specify the number of parallel linking jobs.

$ ./build-scalehls.sh

After the build, we suggest to export the following paths.

$ export PATH=$PATH:$PWD/build/bin:$PWD/polygeist/build/bin
$ export PYTHONPATH=$PYTHONPATH:$PWD/build/tools/scalehls/python_packages/scalehls_core

Compiling HLS C/C++

To optimize C/C++ kernels with the design space exploration (DSE) engine, run:

$ cd samples/polybench/gemm

$ # Parse C/C++ kernel into MLIR.
$ mlir-clang test_gemm.c -function=test_gemm -S \
    -memref-fullrank -raise-scf-to-affine > test_gemm.mlir

$ # Launch the DSE and emit the optimized design as C++ code.
$ scalehls-opt test_gemm.mlir -debug-only=scalehls \
    -scalehls-dse-pipeline="top-func=test_gemm target-spec=../config.json" \
    | scalehls-translate -emit-hlscpp > test_gemm_dse.cpp

If Python binding is enabled, we provide a pyscalehls tool to showcase the scalehls Python library:

$ pyscalehls.py test_gemm.c -f test_gemm > test_gemm_pyscalehls.cpp

Compiling PyTorch Model

If you have installed Torch-MLIR with SHA ea371a9, you should be able to run the following test:

$ cd samples/pytorch/resnet18

$ # Parse PyTorch model to TOSA dialect (with Torch-MLIR mlir_venv activated).
$ # This may take several minutes to compile due to the large amount of weights.
$ python3 export_resnet18_mlir.py | torch-mlir-opt \
    -torchscript-module-to-torch-backend-pipeline="optimize=true" \
    -torch-backend-to-tosa-backend-pipeline="optimize=true" > resnet18.mlir

$ # Optimize the model and emit C++ code.
$ scalehls-opt resnet18.mlir \
    -scalehls-pytorch-pipeline-v2="top-func=forward loop-tile-size=4 loop-unroll-factor=2" \
    | scalehls-translate -emit-hlscpp > resnet18.cpp

Repository Layout

The project follows the conventions of typical MLIR-based projects:

  • include/scalehls and lib for C++ MLIR dialects/passes.
  • polygeist for the C/C++ front-end.
  • samples for C/C++ and PyTorch examples.
  • test for holding regression tests.
  • tools for command line tools.