cannam@95: cannam@95:
cannam@95:cannam@95: Previous: Guru Real-to-real Transforms, cannam@95: Up: Guru Interface cannam@95:
cannam@95: When compiled in 64-bit mode on a 64-bit architecture (where addresses
cannam@95: are 64 bits wide), FFTW uses 64-bit quantities internally for all
cannam@95: transform sizes, strides, and so on—you don't have to do anything
cannam@95: special to exploit this.  However, in the ordinary FFTW interfaces,
cannam@95: you specify the transform size by an int quantity, which is
cannam@95: normally only 32 bits wide.  This means that, even though FFTW is
cannam@95: using 64-bit sizes internally, you cannot specify a single transform
cannam@95: dimension larger than
cannam@95: 231−1numbers.
cannam@95: 
cannam@95:    
We expect that few users will require transforms larger than this, but,
cannam@95: for those who do, we provide a 64-bit version of the guru interface in
cannam@95: which all sizes are specified as integers of type ptrdiff_t
cannam@95: instead of int.  (ptrdiff_t is a signed integer type
cannam@95: defined by the C standard to be wide enough to represent address
cannam@95: differences, and thus must be at least 64 bits wide on a 64-bit
cannam@95: machine.)  We stress that there is no performance advantage to
cannam@95: using this interface—the same internal FFTW code is employed
cannam@95: regardless—and it is only necessary if you want to specify very
cannam@95: large transform sizes. 
cannam@95: 
cannam@95: 
cannam@95:    
In particular, the 64-bit guru interface is a set of planner routines
cannam@95: that are exactly the same as the guru planner routines, except that
cannam@95: they are named with ‘guru64’ instead of ‘guru’ and they take
cannam@95: arguments of type fftw_iodim64 instead of fftw_iodim. 
cannam@95: For example, instead of fftw_plan_guru_dft, we have
cannam@95: fftw_plan_guru64_dft.
cannam@95: 
cannam@95: 
fftw_plan fftw_plan_guru64_dft( cannam@95: int rank, const fftw_iodim64 *dims, cannam@95: int howmany_rank, const fftw_iodim64 *howmany_dims, cannam@95: fftw_complex *in, fftw_complex *out, cannam@95: int sign, unsigned flags); cannam@95:cannam@95:
cannam@95: The fftw_iodim64 type is similar to fftw_iodim, with the
cannam@95: same interpretation, except that it uses type ptrdiff_t instead
cannam@95: of type int.
cannam@95: 
cannam@95: 
     typedef struct {
cannam@95:           ptrdiff_t n;
cannam@95:           ptrdiff_t is;
cannam@95:           ptrdiff_t os;
cannam@95:      } fftw_iodim64;
cannam@95: 
cannam@95:    cannam@95: Every other ‘fftw_plan_guru’ function also has a cannam@95: ‘fftw_plan_guru64’ equivalent, but we do not repeat their cannam@95: documentation here since they are identical to the 32-bit versions cannam@95: except as noted above. cannam@95: cannam@95: cannam@95: cannam@95: