> module Main(main) -- floating point benchmark - Fourier transforms
> where -- Rex Page ([email protected])
> import Fourier -- Amoco Production Research, Sep 1992
> import Complex_Vectors
> import Complex--1.3
> main = putStr
> ("result1 = " ++ show result1 ++ "\n" ++
> "result2 = " ++ show result2 ++ "\n" ++
> "result3 = " ++ show result3 ++ "\n")
> result1 =
> -- tstfft(rmwC 256)
> tstfft(rmwC 512)
> -- tstfft(rmwC 1024)
> result2 =
> -- tstdft(rmwC 256)
> tstdft(rmwC 512)
> -- tstdft(rmwC 1024)
> result3 =
> -- tstsct(rampWave 256)
> tstsct(rampWave 512)
> -- tstsct(rampWave 1024)
Test Apparatus
> tstfft zs = distance zs (fftinv(fft zs))
> valfft zs = distance (fft zs) (sft zs)
> tstdft zs = distance zs (dftinv(dft zs))
> valdft zs = distance (dft zs) (sft zs)
> tstsct = sum.sct
> squareWave n = take n (repeat 1)
> sqwC = (map (:+0)).squareWave
> rampWave n = [0 .. n-1]
> rmwC = (map (:+0)).rampWave
> sineWave = (map sin).thetas
> snwC = (map (:+0)).sineWave
Haskell timings (in seconds) hbc running on a SparcStation 1+
rampWave
n = 256 512 1024
tstfft 8sec 17sec 41sec 22Sep92
tstdft 14 36 out of heap 29Sep92
tstsct 41 174 706 22Sep92
8.4E6 67.E6 536.E6
Note: result should be approximately zero
in all the above test cases, but isn't in sct cases
(may indicate a problem with the hbc cosine routine;
probably for large arguments -- such problems are
unavoidable in general, but these results seem too
far out, and they aren't consistent with Fortran
and Miranda results)
|