The manual describes the following implementations of the fast Fourier transform functions available in Intel® Math Kernel Library (Intel® MKL):
Intel MKL also supports FFTW3* interface to the fast Fourier transform functionality for symmetric multiprocessing (SMP) systems.
The general form of the discrete Fourier transform is
for kl = 0, ... nl-1 (l = 1, ..., d), where σ is an arbitrary real-valued scale factor, and the sign in the exponent is δ = -1 for the forward transform and δ = +1 for the backward transform. In most common situations, the domain of the forward transform, that is, the set where the input (periodic) sequence {wj1, j2, ..., jd} belongs, can be the set of complex-valued sequences and real-valued sequences. Respective domains for the backward transform, or backward domains, are represented by complex-valued sequences and complex-valued conjugate-even sequences.
Both groups of FFT functions above present a uniform and easy-to-use application programmer interface providing fast computation of a discrete Fourier transform through the fast Fourier transform algorithm.
Both FFT and Cluster FFT functions support a five-stage usage model for computing an FFT:
Allocate a fresh descriptor for the problem with a call to the DftiCreateDescriptor or DftiCreateDescriptorDM function. The descriptor captures the configuration of the transform, namely, the dimensionality (or rank), sizes, number of transforms, memory layout of the input/output data (defined by strides), scaling factors, and so on. Many of the configuration settings are assigned default values in this call and may need modification depending on your application.
Optionally adjust the descriptor configuration with a call to the DftiSetValue or DftiSetValueDM function as needed. Typically, you must carefully define the data storage layout for an FFT or the data distribution among processes for a Cluster FFT. The configuration settings of the descriptor, such as the default values, can be obtained with the DftiGetValue or DftiGetValueDM function.
Commit the descriptor with a call to the DftiCommitDescriptor or DftiCommitDescriptorDM function, that is, make the descriptor ready for the transform computation. Once the descriptor is committed, the parameters of the transform, such as the type and number of transforms, strides and distances, the type and storage layout of the data, and so on, are "frozen" in the descriptor.
Compute the transform with a call to the DftiComputeForward/DftiComputeBackward or DftiComputeForwardDM/DftiComputeBackwardDM functions as many times as needed. With the committed descriptor, the compute functions only accept pointers to the input/output data and compute the transform as defined. To modify any configuration parameters later on, use DftiSetValue followed by DftiCommitDescriptor (DftiSetValueDM followed by DftiCommitDescriptorDM) or create and commit another descriptor.
All the above functions return an integer status value, which is zero upon successful completion of the operation. You can interpret a non-zero status with the help of the DftiErrorClass or DftiErrorMessage function.
The FFT functions support lengths with arbitrary factors. See the Intel MKL User's Guide for specific radices supported efficiently and the length constraints.
The FFT functions assume the Cartesian representation of complex data (that is, the real and imaginary parts define a complex number). The Intel MKL Vector Mathematical Functions provide an efficient tool for conversion to and from the polar representation (see Example "Conversion from Cartesian to polar representation of complex data" and Example "Conversion from polar to Cartesian representation of complex data").
Copyright © 1994 - 2011, Intel Corporation. All rights reserved.