This a domain-specific language based on Halide that allows easy implementation of recursive or IIR filters for n-dimensional data.
- Ubuntu 14.04, Fedora 20 and Mac OSX
- our spiked version of Halide
- included as submodule, it should download and build automatically upon running
make
- uses NVIDIA's nvvm backend for CUDA ptx generation rather than the open source ptx backend
- other minor modifications
- included as submodule, it should download and build automatically upon running
- Halide requirements: llvm 3.4, clang 3.4 (see Halide building instructions)
- NVIDIA CUDA toolkit 7 and above (version 6.0 or 6.5 will not suffice)
The makefile in the base directory should build everything and place the executables in bin
.
$(RECFILTER_DIR)
|- halide/ (Halide submodule - cloned automatically on running make)
|- lib/ (RecFilter library)
|- apps/ (benchmarking applications)
|- tests/ (tests to check the correctness of tiling algebra)
|- demos/ (application demos)
|- gpu/ (CUDA benchmarks from NVIDIA toolkit and Thrust)
- Allow initializing
RecFilter
from anotherRecFilter
directly, i.e. allowR(x,y) = S(x,y)
, currently this is done usingR(x,y) = S.as_func()(x,y)
. - Provide better interoperability between
Halide::Var
andRecFilter::RecFilterDim
. - Provide better semantics for color images, color channels must be specified
as a
Halide::Tuple
e.g.R(x,y) = Tuple(red,green,blur)
which is not intuitive. - Allow support for tiling of
RecFilter
which do not have any scans, currently this is done via a non-intuitive scheduling command. - Change the
RecFilter::compute_at
interface to something cleaner for merging a recursive filter with a downstream operation.