• Stars
    star
    217
  • Rank 182,446 (Top 4 %)
  • Language VHDL
  • License
    Apache License 2.0
  • Created almost 7 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Fletcher: A framework to integrate FPGA accelerators with Apache Arrow

Fletcher logo

Fletcher: A framework to integrate FPGA accelerators with Apache Arrow

License Last Commit

Fletcher is a framework that helps to integrate FPGA accelerators with tools and frameworks that use Apache Arrow in their back-ends.

Apache Arrow specifies an in-memory format targeting large datasets and provides libraries for various languages to interface with the data in that format. Arrow prevents the need for serialization between different language run-times and provides zero-copy inter-process communication of datasets. Languages that have Arrow libraries (under development) include C, C++, Go, Java, JavaScript, Python, Ruby and Rust.

While many software projects can benefit from these advantages, hardware accelerated applications have also seen serious serialization bottlenecks. Fletcher focuses on FPGA accelerators. Through Fletcher and Arrow, interfacing efficiently between FPGA accelerator and high-level language runtimes is made available to all the supported languages.

Given a set of Arrow Schemas, Fletcher generates the following:

  • A high-performance, easy-to-use hardware interface for your accelerator kernel:
    • You provide a range indices of your Arrow RecordBatch (rather than byte address).
    • You receive (or supply) streams of the data-type specified by the schema (rather than bus words).
    • No pointer arithmetic, reordering, buffering, etc.. required - Fletcher does this for you, with high throughput (think system bandwidth).
  • A template for the accelerator kernel (to be implemented manually or using high-level synthesis)
    • You connect directly to streams of data from/to your RecordBatch rather than some memory bus interface.

Fletcher overview

Apache Arrow support

  • Fletcher currently supports reading/writing from/to multiple Arrow RecordBatches with an Arrow Schema created from any (nested) combination of:

    • Fixed-width primitives (ints, float, etc...)
    • Lists (strings, vectors, etc...)
    • Structs
    • Validity bitmaps
  • In the future we would like to support:

    • Sparse and dense unions
    • Dictionaries
    • Chunked tabular structures (Arrow::Table)

Platform support

  • Fletcher is vendor-agnostic. Our core hardware descriptions and generated code are vendor independent; we don't use any vendor IP.

  • You can simulate a Fletcher based design without a specific target platform.

  • Tested simulators include the free and open-source GHDL and the proprietary Mentor Graphics Questa/Modelsim, and Xilinx Vivado XSIM.

  • The following platforms are (partially) supported (may be work-in-progress):

Current state

Our framework is functional, but experimental.

⚠️ This project is currently not actively worked on. ⚠️

Especially the development branch (which is currently our main branch) may break without notice. Some larger examples and the supported platforms are quite hard to integrate in a CI pipeline (they would take multiple days to complete and would incur significant costs for platforms such as Amazon's EC F1). For now, these larger examples and platform support resides in separate repositories (shown above) and are tested against a specific tag of this repository.

Further reading

Tutorials:

Hardware design flow:

  • Fletcher Design Generator - The design generator converts a set of Arrow Schemas to a hardware design and provides templates for your kernel.
  • Hardware library - All Fletcher core hardware components used by the design generator.

Software design flow:

Example projects

External projects using Fletcher:

Publications

If you used or studied Fletcher, please cite:

  • J. Peltenburg, J. van Straten, L. Wijtemans, L. van Leeuwen, Z. Al-Ars, and H.P. Hofstee, Fletcher: A Framework to Efficiently Integrate FPGA Accelerators with Apache Arrow*, in 29th International Conference on Field Programmable Logic and Applications (FPL) (2019) pp. 270–277.

Additional publications:

  • J. Peltenburg, J. van Straten, M. Brobbel, H.P. Hofstee, and Z. Al-Ars, Supporting Columnar In-memory Formats on FPGA: The Hardware Design of Fletcher for Apache Arrow*, in Applied Reconfigurable Computing, edited by C. Hochberger, B. Nelson, A. Koch, R. Woods, and P. Diniz (Springer International Publishing, Cham, 2019) pp. 32–47

More Repositories

1

sbd

Course material for Supercomputing for Big Data
26
star
2

vhdeps

VHDL dependency analyzer
VHDL
21
star
3

ArrowSAM

Genomics datastructures using Apache Arrow
Python
20
star
4

vhdre

Generator for VHDL regular expression matchers
Python
13
star
5

tydi

Tydi: an open specification for complex data structures over hardware streams
Rust
13
star
6

Tydi-Chisel

Scala
12
star
7

vhsnunzip

Hardware Snappy decompressor
VHDL
10
star
8

vhdmmio

VHDL code generator for AXI4-lite register files
Python
10
star
9

vhlib

Package of miscellaneous VHDL libraries
VHDL
10
star
10

variant-calling-at-scale

Scalable and High Performance Variant Calling on Cluster Environments
Python
10
star
11

wiki-search-alveo

C++
5
star
12

fletcher-example-regexp

Regular expression matching example with Fletcher
VHDL
4
star
13

cerata

Cerata: a Hardware Construction Library written in C++17
C++
3
star
14

arrow

C++
3
star
15

cmake-modules

Collection of CMake modules
CMake
2
star
16

fletcher-example-kmeans

K-Means example using Fletcher
HTML
2
star
17

templates

Repository for storing code style info and templates
VHDL
1
star
18

gen-mpi

MPI-based Cluster Scalable Variant Calling for Short/Long Reads Sequencing Data
C
1
star
19

Tydi-tools

A docker image with all Tydi tools included.
Dockerfile
1
star
20

FletcherFiltering

SQL to HLS hardware filtering for Flechter streams
Python
1
star
21

vivado-impl-scripts

Scripts that help to automate trying out implementation strategies and constraints, incremental optimization, and stuff like routing critical nets first
Shell
1
star
22

time-to-fly-high

Benchmarking Arrow Flight - A wire-speed protocol for data transfer, querying and microservices
Python
1
star