<< Chapter < Page Chapter >> Page >

The problem to be solved

In early versions of FFTW, the only choice made by the planner was the sequence of radices [link] , and so each step of the plan took a DFT of a given size n , possibly with discontiguous input/output, and reduced it (via a radix r ) to DFTs of size n / r , which were solved recursively. That is, each step solved the following problem: given a size n , an input pointer I , an input stride ι , an output pointer O , and an output stride o , it computed the DFT of I [ ι ] for 0 < n and stored the result in O [ k o ] for 0 k < n . However, we soon found that we could not easily express many interesting algorithms within thisframework; for example, in-place ( I = O ) FFTs that do not require a separate bit-reversalstage [link] , [link] , [link] , [link] . It became clear that the key issue was not the choice of algorithms, as we hadfirst supposed, but the definition of the problem to be solved. Because only problems that can be expressed can be solved, therepresentation of a problem determines an outer bound to the space of plans that the planner can explore, and therefore it ultimatelyconstrains FFTW's performance.

The difficulty with our initial ( n , I , ι , O , o ) problem definition was that it forced each algorithmic step to address only asingle DFT. In fact, FFTs break down DFTs into multiple smaller DFTs, and it is the combination of these smaller transforms that is best addressed by many algorithmicchoices, especially to rearrange the order of memory accesses between the subtransforms. Therefore, we redefined our notion of a problemin FFTW to be not a single DFT, but rather a loop of DFTs, and in fact multiple nested loops of DFTs. The following sections describe some of the new algorithmic steps thatsuch a problem definition enables, but first we will define the problem more precisely.

DFT problems in FFTW are expressed in terms of structures called I/O tensors, I/O tensors are unrelated to the tensor-product notation used by some other authors to describe FFTalgorithms [link] , [link] . which in turn are described in terms of ancillary structures called I/O dimensions. An I/O dimension d is a triple d = ( n , ι , o ) , where n is a non-negative integer called the length , ι is an integer called the input stride , and o is an integer called the output stride . An I/O tensor t = d 1 , d 2 , ... , d ρ is a set of I/O dimensions. The non-negative integer ρ = t is called the rank of the I/O tensor. A DFT problem , denoted by dft ( N , V , I , O ) , consists of two I/O tensors N and V , and of two pointers I and O . Informally, this describes V nested loops of N -dimensional DFTs with input data starting at memory location I and output data starting at O .

For simplicity, let us consider only one-dimensional DFTs, so that N = ( n , ι , o ) implies a D F T of length n on input data with stride ι and output data with stride o , much like in the original FFTW as described above. The main newfeature is then the addition of zero or more “loops” V . More formally, dft ( N , ( n , ι , o ) V , I , O ) is recursively defined as a “loop” of n problems: for all 0 k < n , do all computations in dft ( N , V , I + k · ι , O + k · o ) . The case of multi-dimensional DFTs is defined more preciselyelsewhere [link] , but essentially each I/O dimension in N gives one dimension of the transform.

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Fast fourier transforms. OpenStax CNX. Nov 18, 2012 Download for free at http://cnx.org/content/col10550/1.22
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Fast fourier transforms' conversation and receive update notifications?

Ask