Interface NTTStepStrategy

All Known Implementing Classes:
DoubleNTTStepStrategy, FloatNTTStepStrategy, IntAparapiNTTStepStrategy, IntNTTStepStrategy, LongAparapiNTTStepStrategy, LongNTTStepStrategy

public interface NTTStepStrategy
Steps for the six-step or two-pass NTT.
Since:
1.7.0
Version:
1.7.0
Author:
Mikko Tommila
  • Method Summary

    Modifier and Type
    Method
    Description
    long
    Get the maximum transform length.
    void
    multiplyElements​(ArrayAccess arrayAccess, int startRow, int startColumn, int rows, int columns, long length, long totalTransformLength, boolean isInverse, int modulus)
    Multiply each matrix element (i, j) by wi * j / totalTransformLength.
    void
    transformRows​(ArrayAccess arrayAccess, int length, int count, boolean isInverse, boolean permute, int modulus)
    Transform the rows of the data matrix.
  • Method Details

    • multiplyElements

      void multiplyElements(ArrayAccess arrayAccess, int startRow, int startColumn, int rows, int columns, long length, long totalTransformLength, boolean isInverse, int modulus) throws ApfloatRuntimeException
      Multiply each matrix element (i, j) by wi * j / totalTransformLength. The matrix size is n1 x n2.
      Parameters:
      arrayAccess - The memory array to multiply.
      startRow - Which row in the whole matrix the starting row in the arrayAccess is.
      startColumn - Which column in the whole matrix the starting column in the arrayAccess is.
      rows - The number of rows in the arrayAccess to multiply.
      columns - The number of columns in the matrix (= n2).
      length - The length of data in the matrix being transformed.
      totalTransformLength - The total transform length, for the scaling factor. Used only for the inverse case.
      isInverse - If the multiplication is done for the inverse transform or not.
      modulus - Index of the modulus.
      Throws:
      ApfloatRuntimeException
    • transformRows

      void transformRows(ArrayAccess arrayAccess, int length, int count, boolean isInverse, boolean permute, int modulus) throws ApfloatRuntimeException
      Transform the rows of the data matrix. If only one processor is available, it runs all transforms in the current thread. If more than one processor are available, it dispatches the calculations to multiple threads to parallelize the calculation. The number of processors is determined using ApfloatContext.getNumberOfProcessors().
      Parameters:
      arrayAccess - The memory array to split to rows and to transform.
      length - Length of one transform (one row).
      count - Number of rows.
      isInverse - true if an inverse transform is performed, false if a forward transform is performed.
      permute - If permutation should be done.
      modulus - Index of the modulus.
      Throws:
      ApfloatRuntimeException
    • getMaxTransformLength

      long getMaxTransformLength()
      Get the maximum transform length.
      Returns:
      The maximum transform length.