The fast evolution and increasing complexity of computing platforms pose a
major challenge for developers of high performance image and signal processing
libraries (Digital Signal Processing - DSP): it is increasingly difficult to
harness the available computing power; conversely, straightforward implementations
may loose as much as one or two orders of magnitude in performance. Creating
optimal implementations requires the developer to have an understanding of algorithms,
capabilities and limitations of compilers, and the target platform's microarchitecture.
For these reasons, a recent trend in numerical computing is towards "self-adaptable"
software to achieve optimal performance and portability with reduced coding effort.
One approach to self-adapting software is the automatic generation of algorithms
and implementations and the use of intelligent search to find the "best"
implementation on a given platform.
This course introduces the student to the foundations and state-of-the-art
techniques, including automatic tuning and self adaptation, in high performance
software development for DSP libraries such as Intel's MKL (Math Kernel Library)
and IPP (Integrated Performance Primitives). The course will focus on algorithms
for fast signal transforms such as the Fast Fourier Transform (FFT),
Walsh-Hadamard Transform (WHT), Discrete Trigonometric
Transforms (e.g Discrete Cosine Transform (DCT)), Convolution and Filtering,
and Fast Wavelet Transforms. Applications such as JPEG, radar, image processing, and
integer multiplication will be discussed. The course will study the
FFTW, and the
More generally, topics include:
- Fundamental tools in algorithm theory and analysis
- Benchmarking and performance modeling
- Fast signal transform algorithms
- Features of modern computer architectures
(memory hierarchy, pipelining, instruction level parallelism,
speculative computation and branch prediction)
- Special instruction sets, such as SSE/MMX on Pentium;
- Multi-core architectures and parallel implementations
- Optimizing compilers
- Self-adaptable software and program generators.