\chapentry{Introduction}{1}{1} \chapentry{Tutorial}{2}{3} \secentry{Complex One-Dimensional DFTs}{2}{1}{3} \secentry{Complex Multi-Dimensional DFTs}{2}{2}{5} \secentry{One-Dimensional DFTs of Real Data}{2}{3}{6} \secentry{Multi-Dimensional DFTs of Real Data}{2}{4}{7} \secentry{More DFTs of Real Data}{2}{5}{8} \subsecentry{The Halfcomplex-format DFT}{2}{5}{1}{9} \subsecentry{Real even/odd DFTs (cosine/sine transforms)}{2}{5}{2}{10} \subsecentry{The Discrete Hartley Transform}{2}{5}{3}{12} \chapentry{Other Important Topics}{3}{15} \secentry{Data Alignment}{3}{1}{15} \subsecentry{SIMD alignment and fftw_malloc}{3}{1}{1}{15} \subsecentry{Stack alignment on x86}{3}{1}{2}{15} \secentry{Multi-dimensional Array Format}{3}{2}{16} \subsecentry{Row-major Format}{3}{2}{1}{16} \subsecentry{Column-major Format}{3}{2}{2}{16} \subsecentry{Static Arrays in C}{3}{2}{3}{16} \subsecentry{Dynamic Arrays in C}{3}{2}{4}{17} \subsecentry{Dynamic Arrays in C---The Wrong Way}{3}{2}{5}{17} \secentry{Words of Wisdom---Saving Plans}{3}{3}{18} \secentry{Caveats in Using Wisdom}{3}{4}{19} \chapentry{FFTW Reference}{4}{21} \secentry{Data Types and Files}{4}{1}{21} \subsecentry{Complex numbers}{4}{1}{1}{21} \subsecentry{Precision}{4}{1}{2}{21} \subsecentry{Memory Allocation}{4}{1}{3}{22} \secentry{Using Plans}{4}{2}{22} \secentry{Basic Interface}{4}{3}{23} \subsecentry{Complex DFTs}{4}{3}{1}{23} \subsecentry{Planner Flags}{4}{3}{2}{24} \subsecentry{Real-data DFTs}{4}{3}{3}{25} \subsecentry{Real-data DFT Array Format}{4}{3}{4}{27} \subsecentry{Real-to-Real Transforms}{4}{3}{5}{27} \subsecentry{Real-to-Real Transform Kinds}{4}{3}{6}{29} \secentry{Advanced Interface}{4}{4}{29} \subsecentry{Advanced Complex DFTs}{4}{4}{1}{30} \subsecentry{Advanced Real-data DFTs}{4}{4}{2}{30} \subsecentry{Advanced Real-to-real Transforms}{4}{4}{3}{31} \secentry{Guru Interface}{4}{5}{31} \subsecentry{Interleaved and split arrays}{4}{5}{1}{32} \subsecentry{Guru vector and transform sizes}{4}{5}{2}{32} \subsecentry{Guru Complex DFTs}{4}{5}{3}{33} \subsecentry{Guru Real-data DFTs}{4}{5}{4}{34} \subsecentry{Guru Real-to-real Transforms}{4}{5}{5}{35} \subsecentry{Guru Execution of Plans}{4}{5}{6}{35} \secentry{Wisdom}{4}{6}{37} \subsecentry{Wisdom Export}{4}{6}{1}{37} \subsecentry{Wisdom Import}{4}{6}{2}{37} \subsecentry{Forgetting Wisdom}{4}{6}{3}{38} \subsecentry{Wisdom Utilities}{4}{6}{4}{38} \secentry{What FFTW Really Computes}{4}{7}{38} \subsecentry{The 1d Discrete Fourier Transform (DFT)}{4}{7}{1}{39} \subsecentry{The 1d Real-data DFT}{4}{7}{2}{39} \subsecentry{1d Real-even DFTs (DCTs)}{4}{7}{3}{40} \subsecentry{1d Real-odd DFTs (DSTs)}{4}{7}{4}{41} \subsecentry{1d Discrete Hartley Transforms (DHTs)}{4}{7}{5}{42} \subsecentry{Multi-dimensional Transforms}{4}{7}{6}{42} \chapentry{Parallel FFTW}{5}{45} \secentry{Multi-threaded FFTW}{5}{1}{45} \subsecentry{Installation and Supported Hardware/Software}{5}{1}{1}{45} \subsecentry{Usage of Multi-threaded FFTW}{5}{1}{2}{45} \subsecentry{How Many Threads to Use?}{5}{1}{3}{46} \secentry{Thread safety}{5}{2}{47} \chapentry{Calling FFTW from Fortran}{6}{49} \secentry{Fortran-interface routines}{6}{1}{49} \secentry{FFTW Constants in Fortran}{6}{2}{50} \secentry{Fortran Examples}{6}{3}{50} \secentry{Wisdom of Fortran?}{6}{4}{51} \chapentry{Upgrading from FFTW version 2}{7}{53} \chapentry{Installation and Customization}{8}{57} \secentry{Installation on Unix}{8}{1}{57} \secentry{Installation on non-Unix systems}{8}{2}{59} \secentry{Cycle Counters}{8}{3}{59} \secentry{Generating your own code}{8}{4}{60} \chapentry{Acknowledgments}{9}{63} \chapentry{License and Copyright}{10}{65} \chapentry{Concept Index}{11}{67} \chapentry{Library Index}{12}{69}