With the increasing importance of machine learning, both array-based programming and high-performance computing are receiving a lot of attention. On first thought, both of these concepts might not seem like a good match for functional languages, which emphasise abstraction and offer limited support for destructive updates. Hence it might come as a suprise that it is indeed parallel array programming where functional languages can really shine: the conventional indexed-based interface for arrays is as badly suited for parallel programming as it is for functional programming. Instead, a collection-oriented style, which is natural to functional programming and aided by its powerful abstractions, is a much better match. There are more and more functional array languages and libraries that are based on this premise and demonstrate excellent performance, while offering a portable, powerful programming model.
In this talk, I will give an overview of functional array based high-performance computing, how we can map such programs efficiently to parallel hardware, and discuss challenges and ongoing work. Among other approaches, I will detail the application and implementation of our Haskell-based embedded array language Accelerate.