d@0: d@0: d@0: 64-bit Guru Interface - FFTW 3.2.1 d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0:
d@0:

d@0: d@0: d@0: Previous: Guru Real-to-real Transforms, d@0: Up: Guru Interface d@0:


d@0:
d@0: d@0:

4.5.6 64-bit Guru Interface

d@0: d@0:

d@0: When compiled in 64-bit mode on a 64-bit architecture (where addresses d@0: are 64 bits wide), FFTW uses 64-bit quantities internally for all d@0: transform sizes, strides, and so on—you don't have to do anything d@0: special to exploit this. However, in the ordinary FFTW interfaces, d@0: you specify the transform size by an int quantity, which is d@0: normally only 32 bits wide. This means that, even though FFTW is d@0: using 64-bit sizes internally, you cannot specify a single transform d@0: dimension larger than d@0: 231−1numbers. d@0: d@0:

We expect that few users will require transforms larger than this, but, d@0: for those who do, we provide a 64-bit version of the guru interface in d@0: which all sizes are specified as integers of type ptrdiff_t d@0: instead of int. (ptrdiff_t is a signed integer type d@0: defined by the C standard to be wide enough to represent address d@0: differences, and thus must be at least 64 bits wide on a 64-bit d@0: machine.) We stress that there is no performance advantage to d@0: using this interface—the same internal FFTW code is employed d@0: regardless—and it is only necessary if you want to specify very d@0: large transform sizes. d@0: d@0: In particular, the 64-bit guru interface is a set of planner routines d@0: that are exactly the same as the guru planner routines, except that d@0: they are named with `guru64' instead of `guru' and they take d@0: arguments of type fftw_iodim64 instead of fftw_iodim. d@0: For example, instead of fftw_plan_guru_dft, we have d@0: fftw_plan_guru64_dft. d@0: d@0:

     fftw_plan fftw_plan_guru64_dft(
d@0:           int rank, const fftw_iodim64 *dims,
d@0:           int howmany_rank, const fftw_iodim64 *howmany_dims,
d@0:           fftw_complex *in, fftw_complex *out,
d@0:           int sign, unsigned flags);
d@0: 
d@0:

d@0: The fftw_iodim64 type is similar to fftw_iodim, with the d@0: same interpretation, except that it uses type ptrdiff_t instead d@0: of type int. d@0: d@0:

     typedef struct {
d@0:           ptrdiff_t n;
d@0:           ptrdiff_t is;
d@0:           ptrdiff_t os;
d@0:      } fftw_iodim64;
d@0: 
d@0:

d@0: Every other `fftw_plan_guru' function also has a d@0: `fftw_plan_guru64' equivalent, but we do not repeat their d@0: documentation here since they are identical to the 32-bit versions d@0: except as noted above. d@0: d@0: d@0: d@0: