Class IntNTTConvolutionStepStrategy

  • All Implemented Interfaces:
    Parallelizable, NTTConvolutionStepStrategy

    public class IntNTTConvolutionStepStrategy
    extends IntModMath
    implements NTTConvolutionStepStrategy, Parallelizable
    Steps of a three-NTT convolution for the int type. This class implements the details of the element-by-element multiplication and element-by-element squaring of the transformed elements.

    The in-place multiplication and squaring of the data elements is done using a parallel algorithm, if the data fits in memory.

    All access to this class must be externally synchronized.

    Since:
    1.7.0
    Version:
    1.9.0
    Author:
    Mikko Tommila
    • Constructor Detail

      • IntNTTConvolutionStepStrategy

        public IntNTTConvolutionStepStrategy()
        Default constructor.
    • Method Detail

      • multiplyInPlace

        public void multiplyInPlace​(DataStorage sourceAndDestination,
                                    DataStorage source,
                                    int modulus)
                             throws ApfloatRuntimeException
        Description copied from interface: NTTConvolutionStepStrategy
        Linear multiplication in the number theoretic domain. The operation is sourceAndDestination[i] *= source[i] (mod m).

        For maximum performance, sourceAndDestination should be in memory if possible.

        Specified by:
        multiplyInPlace in interface NTTConvolutionStepStrategy
        Parameters:
        sourceAndDestination - The first source data storage, which is also the destination.
        source - The second source data storage.
        modulus - Which modulus to use (0, 1, 2)
        Throws:
        ApfloatRuntimeException
      • squareInPlace

        public void squareInPlace​(DataStorage sourceAndDestination,
                                  int modulus)
                           throws ApfloatRuntimeException
        Description copied from interface: NTTConvolutionStepStrategy
        Linear squaring in the number theoretic domain. The operation is sourceAndDestination[i] *= sourceAndDestination[i] (mod m).

        For maximum performance, sourceAndDestination should be in memory if possible.

        Specified by:
        squareInPlace in interface NTTConvolutionStepStrategy
        Parameters:
        sourceAndDestination - The source data storage, which is also the destination.
        modulus - Which modulus to use (0, 1, 2)
        Throws:
        ApfloatRuntimeException
      • createMultiplyInPlaceParallelRunnable

        protected ParallelRunnable createMultiplyInPlaceParallelRunnable​(DataStorage sourceAndDestination,
                                                                         DataStorage source,
                                                                         int modulus)
        Create a ParallelRunnable for multiplying the elements in-place.
        Parameters:
        sourceAndDestination - The first source data storage, which is also the destination.
        source - The second source data storage.
        modulus - Which modulus to use (0, 1, 2)
        Returns:
        An object suitable for multiplying the elements in parallel.
      • createSquareInPlaceParallelRunnable

        protected ParallelRunnable createSquareInPlaceParallelRunnable​(DataStorage sourceAndDestination,
                                                                       int modulus)
        Create a ParallelRunnable for squaring the elements in-place.
        Parameters:
        sourceAndDestination - The source data storage, which is also the destination.
        modulus - Which modulus to use (0, 1, 2)
        Returns:
        An object suitable for squaring the elements in parallel.