All Projects → cornell-zhang → Heterocl

cornell-zhang / Heterocl

Licence: apache-2.0
HeteroCL: A Multi-Paradigm Programming Infrastructure for Software-Defined Heterogeneous Computing

Programming Languages

python
139335 projects - #7 most used programming language
dsl
153 projects

Labels

Projects that are alternatives of or similar to Heterocl

Vna
a simple and cheap vector network analyzer, including support software
Stars: ✭ 121 (-24.84%)
Mutual labels:  fpga
Tang e203 mini
LicheeTang 蜂鸟E203 Core
Stars: ✭ 135 (-16.15%)
Mutual labels:  fpga
Rapidwright
Build Customized FPGA Implementations for Vivado
Stars: ✭ 143 (-11.18%)
Mutual labels:  fpga
Open Register Design Tool
Tool to generate register RTL, models, and docs using SystemRDL or JSpec input
Stars: ✭ 126 (-21.74%)
Mutual labels:  fpga
Gemm hls
Scalable systolic array-based matrix-matrix multiplication implemented in Vivado HLS for Xilinx FPGAs.
Stars: ✭ 134 (-16.77%)
Mutual labels:  fpga
Openfpgaduino
All open source file and project for OpenFPGAduino project
Stars: ✭ 137 (-14.91%)
Mutual labels:  fpga
Connectal
Connectal is a framework for software-driven hardware development.
Stars: ✭ 117 (-27.33%)
Mutual labels:  fpga
Tinytpu
Implementation of a Tensor Processing Unit for embedded systems and the IoT.
Stars: ✭ 153 (-4.97%)
Mutual labels:  fpga
Wbuart32
A simple, basic, formally verified UART controller
Stars: ✭ 133 (-17.39%)
Mutual labels:  fpga
Fletcher
Fletcher: A framework to integrate FPGA accelerators with Apache Arrow
Stars: ✭ 144 (-10.56%)
Mutual labels:  fpga
Free Tpu
Free TPU for FPGA with Lenet, MobileNet, Squeezenet, Resnet, Inception V3, YOLO V3, and ICNet. Deep learning acceleration using Xilinx zynq (Zedboard or ZC702 ) or kintex-7 to solve image classification, detection, and segmentation problem.
Stars: ✭ 129 (-19.88%)
Mutual labels:  fpga
Aes
Verilog implementation of the symmetric block cipher AES (Advanced Encryption Standard) as specified in NIST FIPS 197. This implementation supports 128 and 256 bit keys.
Stars: ✭ 131 (-18.63%)
Mutual labels:  fpga
Openwifi
open-source IEEE 802.11 WiFi baseband FPGA (chip) design
Stars: ✭ 2,257 (+1301.86%)
Mutual labels:  fpga
Dnnweaver2
Open Source Specialized Computing Stack for Accelerating Deep Neural Networks.
Stars: ✭ 125 (-22.36%)
Mutual labels:  fpga
Logic
CMake, SystemVerilog and SystemC utilities for creating, building and testing RTL projects for FPGAs and ASICs.
Stars: ✭ 149 (-7.45%)
Mutual labels:  fpga
Neo430
A very small msp430-compatible customizable soft-core microcontroller-like processor system written in platform-independent VHDL.
Stars: ✭ 120 (-25.47%)
Mutual labels:  fpga
Symbiflow Arch Defs
FOSS architecture definitions of FPGA hardware useful for doing PnR device generation.
Stars: ✭ 137 (-14.91%)
Mutual labels:  fpga
Mipi csi receiver fpga
MIPI CSI-2 Camera Sensor Receiver verilog HDL implementation For any generic FPGA. Tested with IMX219 on Lattice MachXO3LF. 2Gbps UVC Video Stream Over USB 3.0 with Cypress FX3
Stars: ✭ 154 (-4.35%)
Mutual labels:  fpga
Plutosdr Fw
PlutoSDR Firmware
Stars: ✭ 151 (-6.21%)
Mutual labels:  fpga
Space Invaders Vhdl
Space Invaders game implemented with VHDL
Stars: ✭ 142 (-11.8%)
Mutual labels:  fpga

GitHub license CircleCI

HeteroCL: A Multi-Paradigm Programming Infrastructure for Software-Defined Reconfigurable Computing

Website | Installation | Tutorials | Samples | Documentation

Introduction

With the pursuit of improving compute performance under strict power constraints, there is an increasing need for deploying applications to heterogeneous hardware architectures with accelerators, such as GPUs and FPGAs. However, although these heterogeneous computing platforms are becoming widely available, they are very difficult to program especially with FPGAs. As a result, the use of such platforms has been limited to a small subset of programmers with specialized hardware knowledge.

To tackle this challenge, we introduce HeteroCL, a programming infrastructure comprised of a Python-based domain-specific language (DSL) and a compilation flow. The HeteroCL DSL provides a clean programming abstraction that decouples algorithm specification from three important types of hardware customization in compute, data types, and memory architectures. HeteroCL can further capture the interdependence among these different customization techniques, allowing programmers to explore various performance/area/accuracy trade-offs in a systematic and productive manner. In addition, our framework currently provides two advanced domain-specific optimizations with stencil analysis and systolic array generation, which produce highly efficient microarchitectures for accelerating popular workloads from image processing and deep learning domains.

Current Compilation Flow

flow

Evaluation on AWS F1 (Xilinx Virtex UltraScale+TM VU9P FPGA)

The speedup is over a single-core single-thread CPU execution on AWS F1.

Benchmark Data Sizes & Type #LUTs #FFs #BRAMs #DSPs Freqency (MHz) Speedup Back End
KNN Digit Recognition
Image classification
K=3 #images=1800
uint49
4009 5835 88 0 250 12.5 General
K-Means
Clustering
K=16 #elem=320 x 32
int32
212708 235011 32 1536 190.6 16.0 General
Smith-Waterman
Genomic sequencing
string len=128
uint2
110841 88369 1409 0 152.2 20.9 General
Seidel
Image processing
2160 pixel x 3840 pixel
fixed16
21719 31663 46 96 250 5.9 Stencil
Gaussian
Image processing
2160 pixel x 3840 pixel
fixed16
70833 131160 46 688 250 13.2 Stencil
Jacobi
Linear algebra
2160 pixel x 3840 pixel
fixed16
14883 22485 46 48 250 5.0 Stencil
GEMM
Matrix multiplication
1024 x 1024 x 1024
fixed16
454492 800283 932 2507 236.8 8.9 Systolic Array
LeNet Inference
CNN
MNIST
fixed16
362291 660186 739.5 1368 250 10.6 Systolic Array

Publication

If you use HeteroCL in your design, please cite our FPGA'19 paper:

@article{lai2019heterocl,
  title={HeteroCL: A Multi-Paradigm Programming Infrastructure for Software-Defined Reconfigurable Computing},
  author={Lai, Yi-Hsiang and Chi, Yuze and Hu, Yuwei and Wang, Jie and Yu, Cody Hao and 
          Zhou, Yuan and Cong, Jason and Zhang, Zhiru},
  journal={Int'l Symp. on Field-Programmable Gate Arrays (FPGA)},
  year={2019}
}

Related Work

HeteroCL is a Python-based DSL extended from TVM and it extends Halide IR for intermediate representation. HeterCL incoporates the SODA framework, PolySA framework, and Merlin Compiler for FPGA back-end generation.

Contributing to HeteroCL

Coding Style (Python)

We follow official Python coding style and use NumPy docstring style.

Coding Style (C and C++)

We follow Google coding style.

Steps

  1. Use clang-format to format your C-related files. The configuration file is in docs/.clang-format. Following is a sample command to format the file in place. Note that you need to put the configuration file at the same directory you execute the command.

    clang-format -i -style=file <cpp-file>

  2. Use Pull Request. Remember to select the most suitable labels and put it in the title.

  3. Make sure all the tests pass.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].