Array-Oriented Languages and Polyhedral Compilation
Summary
Collection-oriented languages are characterised by their provision of a set of primitives which work on data in aggregate, and are intrinsically suited to parallelisation. Polyhedral compilation systems aim at optimising aggregate computations using an abstract, mathematical representation. However, they are typically run as optimisation passes not over high-level programmes representing aggregate computations, but over the low-level intermediate representation they compile down to. This means that information can be lost if code is not written in the correct form. Accelerate is a collection-oriented language embedded in Haskell. Programmes are compiled into LLVM-IR, that code being passed to the LLVM compiler. Polly, a polyhedral optimisation pass of LLVM, aims specifically at optimising programmes typical in Accelerate, namely computations over regular, multi-dimensional arrays. In this project we investigate the strengths of each system in order to see how they can together produce faster code.