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