Git Product home page Git Product logo

stfleming / relish Goto Github PK

View Code? Open in Web Editor NEW
4.0 3.0 1.0 2.78 MB

Runahead Execution of Load Instructions via Sliced Hardware (RELISH) -- a High level synthesis optimisation pass, which automatically constructs helper circuits used to prefetch load instructions.

Tcl 8.20% Python 10.19% Verilog 61.84% Pascal 0.08% HTML 2.21% CSS 0.16% C++ 16.29% CMake 0.11% Makefile 0.25% Shell 0.67%

relish's Introduction

    ____  ________    _________ __  __
   / __ \/ ____/ /   /  _/ ___// / / /
  / /_/ / __/ / /    / / \__ \/ /_/ / 
 / _, _/ /___/ /____/ / ___/ / __  /  
/_/ |_/_____/_____/___//____/_/ /_/   

Runahead Execution of Load Instructions via Sliced Hardware (RELISH)

A High-level synthesis optimisation pass, which automatically constructs helper circuits used to prefetch load instructions.

DOI

RELISH is an optional compiler flag for the FPGA high-level synthesis tool LegUp (http://www.legupcomputing.com/). When provided with a hardware function RELISH constructs a helper circuit that can prefetch long latency loads even for irregular access patterns. An analysis called program slicing is used to automatically build the helper circuits by extracting only the computation necessary for the loads requiring prefetching. The result of the analysis is then placed in a redundant hardware thread where it can run ahead of the main computation and store the result of the loads in a prefetch buffer. On average RELISH increases the resource utilisation of the generated circuit by 1.15x while improving performance by 1.38x.

More information can be found in papers/fccm2017.pdf

Using the dockerfile

The easiest way to get started experimenting with RELISH is to use the provided Dockerfile. This file constructs a docker container, downloading and installing LegUp-4.0, and patching in RELISH. How to install docker can be located here: https://docs.docker.com/engine/getstarted/step_one/

To build the container image run the following command in the root folder: docker build - "relish_container" . This might take a while to build.

To launch an instance of the container image and open an interactive shell type: docker run -ti relish_container /bin/bash

Running example builds

Example projects and makefiles are provided in the examples/ directory. To construct one of the examples type make all in the appropriate directory.

For the examples the function to be accelerated is specified in config.tcl as the function to be sliced is specified in sliceConfig.tcl. The make file, applies the LegUp hybrid parallel flow to the source along with RELISH and generates AXI wrapper logic for use in a Xilinx system.

The resulting Xilinx build files are included in the outputted folder AXIWrapper/. The files in this folder can be used in Vivado to build a working system through the following two commands in the AXIWrapper directory: ( Vivado is not provided in the Docker image, so this will need to be performed outside the container.)

  • vivado -mode batch -source _packageIPScript.tcl -- which packages the generated hardware into a IP core
  • vivado -mode batch -source vivado_build.tcl -- which builds a Zynq system (Zedboard) using the generated IP core.

To build a new project in the example folder, the following things must be set:

  • config.tcl should specify the name of the function to accelerate
  • sliceConfig.tcl should specify the name of the function to be sliced
  • The ACCELS variable in the Makefile in the examples directory should specify the name of the function being accelerated and sliced, along with the name of the sliced version of the function (default suffix is '_pSlice'). For example in dotproduct, ACCELS="dotproduct,dotproduct_pSlice"

Any questions or queries feel free to contact me on: [email protected]

relish's People

Contributors

stfleming avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.