
I tried this, with ghc-4.08.1 -O both with and without profiling, on a Sparc box of I believe around 300 MHz, and I can't reproduce it at all. Without profiling, it allocates about 505 k of heap and runs in 0.02 seconds. Ummm ? J | -----Original Message----- | From: Jan Kort [mailto:kort@wins.uva.nl] | Sent: Friday, January 26, 2001 4:40 PM | To: glasgow-haskell-users@haskell.org | Subject: Floating point performance | | | Hi, | I noticed ghc (version 4.08.1) floating point performance is | really slow on my computer: a 270Mhz sun ultra5. The program | below does 1 milion floating point multiplications and takes | 2 seconds to run. I made a profile and it says most of the | time (93%) is spent in the function bar. Any idea what is | going on ? | | Regards, | Jan | | module Main where | | foo :: Double -> [Double] | foo 0 = [1] | foo n = bar n:foo (n-1) | | bar :: Double -> Double | bar n = n*1*1*1*1*1*1*1*1*1*1 | *1*1*1*1*1*1*1*1*1*1 | *1*1*1*1*1*1*1*1*1*1 | *1*1*1*1*1*1*1*1*1*1 | *1*1*1*1*1*1*1*1*1*1 | *1*1*1*1*1*1*1*1*1*1 | *1*1*1*1*1*1*1*1*1*1 | *1*1*1*1*1*1*1*1*1*1 | *1*1*1*1*1*1*1*1*1*1 | *1*1*1*1*1*1*1*1*1*1 | | foldl' :: (a -> b -> a) -> a -> [b] -> a | foldl' _ a [] = a | foldl' f a (x:xs) = (foldl' f $! f a x) xs | | main :: IO() | main = putStrLn (show (foldl' (+) 0 (foo 10000))) | | --------------------------- | Profile: | | total time = 2.60 secs (130 ticks @ 20 ms) | total alloc = 24,845,828 bytes (excludes profiling | overheads) | | COST CENTRE MODULE %time %alloc | | bar Main 93.1 96.1 | foo Main 3.1 2.4 | foldl' Main 3.1 1.4 | | | individual inherited | COST CENTRE MODULE entries %time %alloc | %time %alloc | | MAIN MAIN 0 0.0 0.0 | 100.0 100.0 | main Main 0 0.0 0.0 | 0.0 0.0 | CAF PrelShow 1 0.0 0.0 | 0.0 0.0 | CAF PrelFloat 3 0.0 0.0 | 0.0 0.0 | CAF PrelHandle 3 0.0 0.0 | 0.0 0.0 | CAF Main 9 0.0 0.0 | 100.0 100.0 | main Main 1 0.8 0.0 | 100.0 100.0 | foo Main 10001 3.1 2.4 | 96.2 98.5 | bar Main 10000 93.1 96.1 | 93.1 96.1 | foldl' Main 10002 3.1 1.4 | 3.1 1.4 | | _______________________________________________ | Glasgow-haskell-users mailing list | Glasgow-haskell-users@haskell.org | http://www.haskell.org/mailman/listinfo/glasgow-haskell-users |

"Julian Seward (Intl Vendor)" wrote:
I tried this, with ghc-4.08.1 -O both with and without profiling, on a Sparc box of I believe around 300 MHz, and I can't reproduce it at all. Without profiling, it allocates about 505 k of heap and runs in 0.02 seconds.
Ummm ?
J
I didn't use any optimizations, but I am sure that passing -O to ghc will make it see that 1*1*... is a constant expression. I guess turning all optimizations off is not the right way to test stuff either. Jan

Mon, 29 Jan 2001 18:15:02 +0100, Jan Kort
I didn't use any optimizations, but I am sure that passing -O to ghc will make it see that 1*1*... is a constant expression.
It does not, because it's n*1*1*1*... where n is not a constant. Major advantages seem to be from the strictness analysis. -- __("< Marcin Kowalczyk * qrczak@knm.org.pl http://qrczak.ids.net.pl/ \__/ ^^ SYGNATURA ZASTÊPCZA QRCZAK
participants (3)
-
Jan Kort
-
Julian Seward (Intl Vendor)
-
qrczak@knm.org.pl