Parallel FFTW
*************
In this chapter we discuss the use of FFTW in a parallel environment,
documenting the different parallel libraries that we have provided.
(Users calling FFTW from a multi-threaded program should also consult
Note:Thread safety.) The FFTW package currently contains three
parallel transform implementations that leverage the uniprocessor FFTW
code:
* The first set of routines utilizes shared-memory threads for
parallel one- and multi-dimensional transforms of both real and
complex data. Any program using FFTW can be trivially modified to
use the multi-threaded routines. This code can use any common
threads implementation, including POSIX threads. (POSIX threads
are available on most Unix variants, including Linux.) These
routines are located in the `threads' directory, and are
documented in Note:Multi-threaded FFTW.
* The `mpi' directory contains multi-dimensional transforms of real
and complex data for parallel machines supporting MPI. It also
includes parallel one-dimensional transforms for complex data.
The main feature of this code is that it supports
distributed-memory transforms, so it runs on everything from
workstation clusters to massively-parallel supercomputers. More
information on MPI can be found at the MPI home page (http://www.mcs.anl.gov/mpi). The FFTW MPI routines are documented in Note:MPI
FFTW.
* We also have an experimental parallel implementation written in
Cilk, a C-like parallel language developed at MIT and currently
available for several SMP platforms. For more information on Cilk
see the Cilk home page (http://supertech.lcs.mit.edu/cilk). The
FFTW Cilk code can be found in the `cilk' directory, with
parallelized one- and multi-dimensional transforms of complex
data. The Cilk FFTW routines are documented in `cilk/README'.