org.apfloat.internal

## 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.

Since:
1.7.0
Version:
1.8.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.