Package ffx.numerics.fft
Class MixedRadixFactor
java.lang.Object
ffx.numerics.fft.MixedRadixFactor
- Direct Known Subclasses:
MixedRadixFactor2
,MixedRadixFactor3
,MixedRadixFactor4
,MixedRadixFactor5
,MixedRadixFactor6
,MixedRadixFactor7
,MixedRadixFactorPrime
Mixed radix factor is extended by the pass classes to apply the mixed radix factor.
-
Field Summary
Modifier and TypeFieldDescriptionprotected static final int
The number of complex elements that will be processed in each inner loop iteration.protected static final int
The number of complex elements that will be processed in each inner loop iteration.protected static final int
The number of complex elements that will be processed in each inner loop iteration.protected static final int
The number of complex elements that will be processed in each inner loop iteration.protected final int
Equal to 2 * nextInput for interleaved complex data.protected final int
Equal to 2 * innerLoopLimit for interleaved complex data.protected static final VectorSpecies
<Double> The preferred vector species for double precision.protected final int
The mixed radix factor.protected final int
The increment for input data within the inner loop.protected final int
The imaginary offset.protected final int
The inner loop limit (product / factor).protected final int
Increment for the inner loop.protected static final int
The number of contiguous elements that will be read from the input data array.protected static final int
The number of contiguous elements that will be read from the input data array.protected static final int
The number of contiguous elements that will be read from the input data array.protected static final int
The number of contiguous elements that will be read from the input data array.protected static final int
The number of complex elements that will be processed in each inner loop iteration.protected static final int
The number of complex elements that will be processed in each inner loop iteration.protected static final int
The number of complex elements that will be processed in each inner loop iteration.protected static final int
The number of complex elements that will be processed in each inner loop iteration.protected final int
The size of the input.protected static final DoubleVector
Vector used to change the sign of the imaginary members of the vector via multiplication.protected static final DoubleVector
Vector used to change the sign of the imaginary members of the vector via multiplication.protected static final DoubleVector
Vector used to change the sign of the imaginary members of the vector via multiplication.protected static final DoubleVector
Vector used to change the sign of the imaginary members of the vector via multiplication.protected static final DoubleVector
Vector used to change the sign of the real members of the vector via multiplication.protected static final DoubleVector
Vector used to change the sign of the real members of the vector via multiplication.protected static final DoubleVector
Vector used to change the sign of the real members of the vector via multiplication.protected static final DoubleVector
Vector used to change the sign of the real members of the vector via multiplication.protected final int
The next input (n / factor).protected final int
The number of FFTs to process (default = 1).protected final int
The outer loop limit (n / product).protected final int
The product of all factors applied so far.protected static final VectorShuffle
<Double> Shuffle used to swap real and imaginary members of the vector.protected static final VectorShuffle
<Double> Shuffle used to swap real and imaginary members of the vector.protected static final VectorShuffle
<Double> Shuffle used to swap real and imaginary members of the vector.protected static final VectorShuffle
<Double> Shuffle used to swap real and imaginary members of the vector.protected final double[][]
The twiddle factors for this pass. -
Constructor Summary
ConstructorDescriptionMixedRadixFactor
(PassConstants passConstants) Constructor for the mixed radix factor. -
Method Summary
Modifier and TypeMethodDescriptionprotected static void
multiplyAndStore
(double x_r, double x_i, double w_r, double w_i, double[] ret, int re, int im) Multiply two complex numbers [x_r, x_i] and [w_r, w_i] and store the result.protected abstract void
passScalar
(PassData passData) Apply the mixed radix factor using scalar operations.protected abstract void
Apply the mixed radix factor using SIMD operations.toString()
Return a string representation of the mixed radix factor.
-
Field Details
-
DOUBLE_SPECIES
The preferred vector species for double precision. -
NEGATE_IM
Vector used to change the sign of the imaginary members of the vector via multiplication. -
NEGATE_RE
Vector used to change the sign of the real members of the vector via multiplication. -
SHUFFLE_RE_IM
Shuffle used to swap real and imaginary members of the vector. -
LENGTH
protected static final int LENGTHThe number of contiguous elements that will be read from the input data array. -
LOOP
protected static final int LOOPThe number of complex elements that will be processed in each inner loop iteration. The number of elements to process in the inner loop must be evenly divisible by this loop increment. -
BLOCK_LOOP
protected static final int BLOCK_LOOPThe number of complex elements that will be processed in each inner loop iteration. The number of elements to process in the inner loop must be evenly divisible by this loop increment. -
NEGATE_IM_128
Vector used to change the sign of the imaginary members of the vector via multiplication. -
NEGATE_RE_128
Vector used to change the sign of the real members of the vector via multiplication. -
SHUFFLE_RE_IM_128
Shuffle used to swap real and imaginary members of the vector. -
LENGTH_128
protected static final int LENGTH_128The number of contiguous elements that will be read from the input data array. -
LOOP_128
protected static final int LOOP_128The number of complex elements that will be processed in each inner loop iteration. The number of elements to process in the inner loop must be evenly divisible by this loop increment. -
BLOCK_LOOP_128
protected static final int BLOCK_LOOP_128The number of complex elements that will be processed in each inner loop iteration. The number of elements to process in the inner loop must be evenly divisible by this loop increment. -
NEGATE_IM_256
Vector used to change the sign of the imaginary members of the vector via multiplication. -
NEGATE_RE_256
Vector used to change the sign of the real members of the vector via multiplication. -
SHUFFLE_RE_IM_256
Shuffle used to swap real and imaginary members of the vector. -
LENGTH_256
protected static final int LENGTH_256The number of contiguous elements that will be read from the input data array. -
LOOP_256
protected static final int LOOP_256The number of complex elements that will be processed in each inner loop iteration. The number of elements to process in the inner loop must be evenly divisible by this loop increment. -
BLOCK_LOOP_256
protected static final int BLOCK_LOOP_256The number of complex elements that will be processed in each inner loop iteration. The number of elements to process in the inner loop must be evenly divisible by this loop increment. -
NEGATE_IM_512
Vector used to change the sign of the imaginary members of the vector via multiplication. -
NEGATE_RE_512
Vector used to change the sign of the real members of the vector via multiplication. -
SHUFFLE_RE_IM_512
Shuffle used to swap real and imaginary members of the vector. -
LENGTH_512
protected static final int LENGTH_512The number of contiguous elements that will be read from the input data array. -
LOOP_512
protected static final int LOOP_512The number of complex elements that will be processed in each inner loop iteration. The number of elements to process in the inner loop must be evenly divisible by this loop increment. -
BLOCK_LOOP_512
protected static final int BLOCK_LOOP_512The number of complex elements that will be processed in each inner loop iteration. The number of elements to process in the inner loop must be evenly divisible by this loop increment. -
n
protected final int nThe size of the input. -
nFFTs
protected final int nFFTsThe number of FFTs to process (default = 1). -
im
protected final int imThe imaginary offset. -
factor
protected final int factorThe mixed radix factor. -
product
protected final int productThe product of all factors applied so far. -
outerLoopLimit
protected final int outerLoopLimitThe outer loop limit (n / product). -
innerLoopLimit
protected final int innerLoopLimitThe inner loop limit (product / factor). -
nextInput
protected final int nextInputThe next input (n / factor). This is the separation between the input data for each pass. -
di
protected final int diEqual to 2 * nextInput for interleaved complex data. Equal to nextInput for separate real and imaginary arrays. -
dj
protected final int djEqual to 2 * innerLoopLimit for interleaved complex data. Equal to innerLoopLimit for separate real and imaginary arrays. -
twiddles
protected final double[][] twiddlesThe twiddle factors for this pass. -
ii
protected final int iiThe increment for input data within the inner loop. This is equal to 2 for interleaved complex data. This is equal to 1 for separate real and imaginary arrays. -
jstep
protected final int jstepIncrement for the inner loop.
-
-
Constructor Details
-
MixedRadixFactor
Constructor for the mixed radix factor.- Parameters:
passConstants
- the pass constants.
-
-
Method Details
-
toString
Return a string representation of the mixed radix factor. -
passScalar
Apply the mixed radix factor using scalar operations.- Parameters:
passData
- the pass data.
-
passSIMD
Apply the mixed radix factor using SIMD operations.- Parameters:
passData
- the pass data.
-
multiplyAndStore
protected static void multiplyAndStore(double x_r, double x_i, double w_r, double w_i, double[] ret, int re, int im) Multiply two complex numbers [x_r, x_i] and [w_r, w_i] and store the result.- Parameters:
x_r
- the real part of the complex number.x_i
- the imaginary part of the complex number.w_r
- the real part of the twiddle factor.w_i
- the imaginary part of the twiddle factor.ret
- the array to store the result.re
- the real part index in the result array.im
- the imaginary part index in the result array.
-