Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: FFTW 3.3.8: 64-bit Guru Interface Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: Chris@82:
Chris@82:

Chris@82: Previous: , Up: Guru Interface   [Contents][Index]

Chris@82:
Chris@82:
Chris@82: Chris@82:

4.5.6 64-bit Guru Interface

Chris@82: Chris@82: Chris@82:

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

Chris@82:

We expect that few users will require transforms larger than this, but, Chris@82: for those who do, we provide a 64-bit version of the guru interface in Chris@82: which all sizes are specified as integers of type ptrdiff_t Chris@82: instead of int. (ptrdiff_t is a signed integer type Chris@82: defined by the C standard to be wide enough to represent address Chris@82: differences, and thus must be at least 64 bits wide on a 64-bit Chris@82: machine.) We stress that there is no performance advantage to Chris@82: using this interface—the same internal FFTW code is employed Chris@82: regardless—and it is only necessary if you want to specify very Chris@82: large transform sizes. Chris@82: Chris@82:

Chris@82: Chris@82:

In particular, the 64-bit guru interface is a set of planner routines Chris@82: that are exactly the same as the guru planner routines, except that Chris@82: they are named with ‘guru64’ instead of ‘guru’ and they take Chris@82: arguments of type fftw_iodim64 instead of fftw_iodim. Chris@82: For example, instead of fftw_plan_guru_dft, we have Chris@82: fftw_plan_guru64_dft. Chris@82:

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

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

Chris@82:
Chris@82:
typedef struct {
Chris@82:      ptrdiff_t n;
Chris@82:      ptrdiff_t is;
Chris@82:      ptrdiff_t os;
Chris@82: } fftw_iodim64;
Chris@82: 
Chris@82: Chris@82: Chris@82:

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

Chris@82:
Chris@82:
Chris@82:

Chris@82: Previous: , Up: Guru Interface   [Contents][Index]

Chris@82:
Chris@82: Chris@82: Chris@82: Chris@82: Chris@82: