Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: FFTW 3.3.5: 64-bit Guru Interface Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: Chris@42:
Chris@42:

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

Chris@42:
Chris@42:
Chris@42: Chris@42:

4.5.6 64-bit Guru Interface

Chris@42: Chris@42: 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:

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:

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:

Chris@42:
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: 
Chris@42: Chris@42: 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:

Chris@42:
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: 
Chris@42: Chris@42: 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:
Chris@42:

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

Chris@42:
Chris@42: Chris@42: Chris@42: Chris@42: Chris@42: