Functional languages are becoming increasingly popular, not least due to their high level of abstraction, reuse, and compositionally. By conventional wisdom, these features discourage their use for performance critical applications as they can come at the cost of lower efficiency. However, as demonstated by a number of new functional high-performance systems, we can make abstraction work for us in this space, exploiting the absence of uncontrolled side effects and the way they expose computational and communication patterns to aggressively optimise and generate highly efficient code
The Haskell embedded DSL Accelerate is such a language. It enables application programmers with relatively little knowledge of parallel computing to write programs accelerated by multi-core CPU and GPU architectures, even beating hand optimised code for typical applications. In this talk, I will give an overview over programming in Accelerate, demonstrate some applications, and show how advanced features of the Haskell type system, like type families, play a crucial role in the implementation.