Wednesday, April 22, 15:00 - 17:30, Location: Show and Tell Area A
Franz Franchetti, Yevgen Voronenko, Srinivas Chellappa, Daniel McFarlin, Frederic de Mesmay, Peter A. Milder, Qian Yu, James C. Hoe, Jose M. F. Moura, Markus Pueschel
Writing fast software has become extraordinarily difficult. For optimal performance, programs and their underlying algorithms have to be adapted to take full advantage of the platform’s parallelism, memory hierarchy, and available instruction set. To make things worse, the best implementations are often platform-dependent and platforms are constantly evolving, which quickly renders libraries obsolete.
In this tool demonstration we present Spiral (www.spiral.net), a domain-specific program generation system for important functionality used in signal processing and communication including linear transforms (fast Fourier transform, discrete sine and cosine transform, wavelet transform and others) and filters, SAR image formation, Viterbi decoders, and basic linear algebra routines.
We will show how a user with only basic knowledge of high-performance code development can easily generate very fast implementations for the desired functionality. Moreover, we will show the inner workings of the system, and how we can port it quickly to new platforms, enabling the continued optimization of libraries while the target hardware is still being developed.
Spiral completely replaces the human programmer. For a desired function, Spiral generates alternative algorithms, optimizes them, compiles them into programs, and “intelligently” searches for the best match to the computing platform. Spiral can generate functions specialized to the input size or full-fledged libraries similar to FFTW. The main idea behind Spiral is a mathematical, declarative, domain-specific framework to represent algorithms and the use of rewriting systems to generate and optimize algorithms and to derive the required library infrastructure at a high level of abstraction. Optimization includes parallelization for vector architectures, shared and distributed memory platforms, and even FPGAs.
Experimental results show that the code generated by Spiral competes with, and sometimes outperforms, the best available human-written code. Further, Spiral can generate industry quality code; for example, the widely used Intel Performance Primitives (IPP) library contains an increasing number of Spiral generated functions identified by the prefix ippg.