[
https://issues.apache.org/jira/browse/MATH-216?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Cyril Briquet updated MATH-216:
-------------------------------
Attachment: RootsOfUnityOptimization-20081214.patch
Tentative patch to address issues #1 and #2:
* a private class RootsOfUnity is now instantiated to compute, and cache, the
values of the n-th roots of unity for a given FF transform
* the computations of roots of unity now rely on 3 double[] rather than 1
Complex[]
* the computations of roots of unity are now computed simultaneously for both
the forward and inverse transforms
Given the refactoring from Complex methods to basic arithmetic operations, I
suggest this patch be thoroughly reviewed.
> Faster and more computationally-efficient Fast Fourier Transform
> implementation
> -------------------------------------------------------------------------------
>
> Key: MATH-216
> URL: https://issues.apache.org/jira/browse/MATH-216
> Project: Commons Math
> Issue Type: Improvement
> Affects Versions: 1.2
> Reporter: Daniel Kuan
> Priority: Minor
> Fix For: 2.1
>
> Attachments: RootsOfUnityOptimization-20081214.patch
>
>
> Here are some suggestions on improving the speed and computational-efficiency
> of FastFourierTransformer.
> 1. Store roots of unity as a double array of arrays instead of Complex array.
> No need for all the functionality that comes with class Complex when all that
> is required are the values of the roots of unity.
> 2. Keep track of the largest set of roots of unity calculated so far, and
> adopt Singleton pattern.
> Subsequent requests for smaller sets of roots of unity can be derived from
> the largest set -- no need to recalculate the roots of unity from scratch.
> 3. When computing the nth roots of unity, need only compute n/4 roots instead
> of all n roots.
> Since the roots of unity lie along a circle of unity radius, trigonometric
> relations can be leveraged to reduce the number of roots that need to be
> computed from n to n/4.
> 4. Execute transform algorithm on double primitives instead of on class
> Complex.
> New instances of Complex are instantiated each time a simple arithmetic
> operation is performed on the Complex variables. Much time is lost to object
> creation and initialisation.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.