Assignment 2
(FFT Algorithms, Timings, and Analysis)

Due Tue. July 19 at the start of class

Overview

In this assignment you will use tensor product notation to derive a mixed-radix FFT algorithm, analyze the number of multiplications in various FFT algorithms, and empirically time Numeric Recipes vs. FFTW.

Problems

  1. Let N = n1 * ... * nt. Use tensor product notation to generalize the radix-two iterative FFT to use F_n1,...,F_nt instead of F2. Prove your formula using properties of the tensor product and induction.
  2. Use induction to show that all fully expanded (leaf nodes = 1) FFT trees for N = 2^t have the same number of multiplications (in the twiddle factors) not equal to 1.
  3. Install and time FFTW for sizes N = 2^t, for t=1,...,22. Empirically verify that the times are growing like Theta(N*lg(N)) -- compute ratios of the time for size N to N*lg(N).
  4. Time the code in Numeric Recipes for FFTs of size N = 2^t, for t=1,...,22 and compare to FFTW. Produce a plot of the ratios of the times for Numeric Recipies divided by the times for FFTW. Try different levels of optimization when compiling the code from Numeric Recipes. Can you think of things to do that would make the numeric recipes code faster?

    What to Hand in

    You should prepare a report containing the answers to the questions (submit a pdf file). Make sure to include all relevent information on the computing platforms you used for the timings (i.e. the machine specs including processor type, speed, and amount of memory (cache info if possible), compiler specs used including type, version, and flags).