PolyOpt/HLS
Polyhedral-Based Data Reuse Optimization for FPGA
News
- A preversion of PolyOpt/HLS 0.1.0 is available for download (on request). This is a Convey HC-1 specific version.
Copyright notice
This work is supported by the National Science Foundation Expeditions
in Computing Award CCF-0926127. Nothing in this work should be
construed as reflecting the official policy or position of the Defense
Department, the United States government, the University of California
Los Angeles, Rice University or the Ohio State University.
This software is based on another software, PolyOpt/C, produced with support from the Defense Advanced Research Projects Agency (DARPA) through AFRL Contract FA8650-09-C-1915. Nothing in this work should be construed as reflecting the official policy or position of the Defense Department, the United States government, Rice University or Ohio State University.
THIS SOFTWARE HAS BEEN APPROVED FOR PUBLIC RELEASE, UNLIMITED DISTRIBUTION.
Description
PolyOpt/HLS is a polyhedral loop optimization framework dedicated to data reuse optimization for High-Level Synthesis, integrated in the ROSE compiler. The main features are:
- Automatic extraction of regions that can be optimized in the polyhedral model
- Full support of PoCC (the Polyhedral Compiler Collection) analysis and optimizations
- Dependence analysis with Candl
- Program transformations for tiling and parallelism with Pluto
- Code generation with CLooG
- Parametric tiling with PTile
- Data reuse optmization with LMP
- Numerous under-the-hood functionalities and optimizations
Note, only a subset of C/C++ is currently supported by PolyOpt/HLS.
Documentation
Download
PolyOpt/HLS is currently under active testing before its public
release. In the meantime, we warmly welcome any request to obtain the
source code. Please email Louis-Noel Pouchet
Installation
The installation of PolyOpt/HLS is packaged in an installer
script install.sh
. It assumes ROSE is built, and will download and install a local copy of PoCC.
$> tar xzf polyopt-hls-0.1.0-pre.tar.gz
$> cd polyopt-hls-0.1.0-pre
$> export ROSE_ROOT=/path/to/rose/install
$> export BOOST_ROOT=/path/to/boost/install
$> ./install.sh
$> export PATH=$PATH:`pwd`/src
For a test run of the compiler:
$> PolyOpt dgemm.c
For a full run of the compiler in HLS mode:
$> PolyRose --polyopt-HLS-enable --polyopt-HLS-lmp --polyopt-HLS-autopilot --polyopt-HLS-autopilot-fifo --polyopt-safe-math-func --polyopt-pluto-tile --polyopt-HLS-max-buff-size-per-array=50000 --polyopt-pluto-prevector --polyopt-pluto-fuse-maxfuse dgemm_ap.c
To inspect the available options:
$> PolyOpt --polyopt-help
Manual