
Hello,
I was thinking about using haskell to do some 'realtime' audio signal
processing, and am trying to figure out how close to the holy grail of
"C" code I can get when it comes to speed. Currently, it looks like I
might be looking at running 10 times slower. Is there stuff I could do
to get better performance out of haskell?
In example 1, I create an unitialized 1.8MB array of type 'IOUArray
Int Word8', and write it to a file. This takes a mere 0.056 seconds
(on an Athlon 600).
module Main where
import Data.Array
import Data.Array.IO
import System.IO
main = do h <- openBinaryFile "test.b" WriteMode
a <- newArray_ (1,1800000)
hPutArray h a 1800000
In example 2, I apply a filter to the array (in this case, the filter
is just the id function). This takes around 1.06 seconds.
main = do h <- openBinaryFile "test.b" WriteMode
a <- newArray_ (1,1800000)
b <- mapArray id a
hPutArray h b 1800000
If I apply the 'filter' twice, the time increases to 2.58 seconds:
main = do h <- openBinaryFile "test.b" WriteMode
a <- newArray_ (1,1800000)
b <- mapArray id a
c <- mapArray id b
hPutArray h c 1800000
By comparison, the following c program runs in 0.10 seconds:
#include