# 3-prime FFT

Jason Moxham J.L.Moxham@maths.soton.ac.uk
Fri, 13 Dec 2002 05:31:41 +0000

```On Friday 13 Dec 2002 12:35 am, Torbjorn Granlund wrote:
> I'd like to evaluate the 3-prime FFT algorithm for GMP 4.2.
> I think that with current GMP implementation techniques, it
> could be competitive with the current mul_fft code.
>
> The idea with the 3-prime algorithm is to compute three
> separate results, each with coefficients mod a distinct
> limb-sized prime.  At the end, CRT is used to reconstruct
> the coefficients.
>
> The inner loops could be made to run very fast on modern
> computers.  A nice property that will allow high speed is
> the non-recurrency of the inner loops.
>
> I have a basic implementation, originally written back in
> the GMP 1.0 times.  An updated version is included below.
>
> This implementation used a umul_ppmm and a udiv_qrnnd in the
> inner loop (see the function `fft').  This is silly.  At the
> very least udiv_qrnnd_preinv should be used.  But of course,
> the real trick is to use Montgomery multiplication!
>

Barrett division has the same asymtotic complexity as Montgomery=20
multiplication . I don't know how compairs speed wise for single limbs , =
but=20
it does have the advantage that no conversion between representations is=20
needed , this may or may not be an advantage in this case

> And then we should write the inner loop in assembly for
> important processors.  Since the inner loop is simpler than
> any current GMP assembly loops, that isn't much work.  I
> expect it to run at about the same speed as mpn_mul_1.
>
> (My code also uses a large precomputed table.  It would be
> great to avoid that, and I think that could be done without
> much speed loss.  I also think the inverse transform now
> computed with `ffi' could use `fft'.)
>
> Any takers?  Kevin?  Paul?

```