Class ThreeNTTConvolutionStrategy

  • All Implemented Interfaces:
    ConvolutionStrategy
    Direct Known Subclasses:
    ParallelThreeNTTConvolutionStrategy

    public class ThreeNTTConvolutionStrategy
    extends Object
    implements ConvolutionStrategy
    Convolution using three Number Theoretic Transforms and the Chinese Remainder Theorem to get the final result.

    Multiplication can be done in linear time in the transform domain, where the multiplication is simply an element-by-element multiplication.

    All access to this class must be externally synchronized.

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

      • ThreeNTTConvolutionStrategy

        public ThreeNTTConvolutionStrategy​(int radix,
                                           NTTStrategy nttStrategy)
        Creates a new convoluter that uses the specified transform for transforming the data.
        Parameters:
        radix - The radix to be used.
        nttStrategy - The transform to be used.
    • Method Detail

      • convoluteOne

        protected DataStorage convoluteOne​(DataStorage x,
                                           DataStorage y,
                                           long length,
                                           int modulus,
                                           boolean cached)
                                    throws ApfloatRuntimeException
        Performs a convolution modulo one modulus, of the specified transform length.
        Parameters:
        x - First data set.
        y - Second data set.
        length - Length of the transformation.
        modulus - Which modulus to use.
        cached - If the result data should be kept cached in memory when possible.
        Returns:
        The result of the convolution for one modulus.
        Throws:
        ApfloatRuntimeException
      • autoConvoluteOne

        protected DataStorage autoConvoluteOne​(DataStorage x,
                                               long length,
                                               int modulus,
                                               boolean cached)
                                        throws ApfloatRuntimeException
        Performs an autoconvolution modulo one modulus, of the specified transform length.
        Parameters:
        x - The data set.
        length - Length of the transformation.
        modulus - Which modulus to use.
        cached - If the result data should be kept cached in memory when possible.
        Returns:
        The result of the convolution for one modulus.
        Throws:
        ApfloatRuntimeException
      • lock

        protected void lock​(long length)
        Lock the execution against a synchronization lock.
        Parameters:
        length - The length of the data being processed for determining the type of lock to use.
      • unlock

        protected void unlock()
        Remove the synchronization lock.
      • createCachedDataStorage

        protected DataStorage createCachedDataStorage​(long size)
                                               throws ApfloatRuntimeException
        Create a cached (if possible) data storage for the specified number of elements.
        Parameters:
        size - The number of elements.
        Returns:
        The data storage.
        Throws:
        ApfloatRuntimeException