This course introduces the student to the foundations and state-of-the-art techniques in high performance software development for numeric libraries (including linear algebra and signal processing kernels). Topics include: 1) fundamental tools in algorithm theory and analysis; 2) fast signal processing and numerical algorithms; 3) optimzing compilers, what they and can not do and how to write software that overcomes compiler limitations; 4) the role of the memory hierarchy and other microarchitectural features in software development; 5) how to use special instruction sets, such as SSE/MMX on Pentium; 6) an introduction to the concepts of self-adaptable software and program generators.
The course will be organized around three fundamental computations: matrix multiplication, the fast Fourier transform, and integer multiplication.
Undergraduate students in the 480 section must have CS 260, MATH 201, MATH 221, and CS 282.
All assignments must be completed alone unless otherwise stated. No Late assignments will be accepted without prior approval.