Low-Level Functional GPU Programming for Parallel Algorithms
Paper in proceedings, 2016
We present a Functional Compute Language (FCL) for low-level
GPU programming. FCL is functional in style, which allows for
easy composition of program fragments and thus easy prototyping
and a high degree of code reuse. In contrast with projects such as
Futhark, Accelerate, Harlan, Nessie and Delite, the intention is not
to develop a language providing fully automatic optimizations, but
instead to provide a platform that supports absolute control of the
GPU computation and memory hierarchies. The developer is thus
required to have an intimate knowledge of the target platform, as is
also required when using CUDA/OpenCL directly.
FCL is heavily inspired by Obsidian. However, instead of relying
on a multi-staged meta-programming approach for kernel generation
using Haskell as meta-language, FCL is completely selfcontained,
and we intend it to be suitable as an intermediate language
for data-parallel languages, including data-parallel parts of
high-level array languages, such as R, Matlab, and APL.
We present a type-system and a dynamic semantics suitable
for understanding the performance characteristics of both FCL and
Obsidian-style programs. Our aim is that FCL will be useful as a
platform for developing new parallel algorithms, as well as a target language
for various code-generators targeting GPU hardware.