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