
Am Montag 01 Februar 2010 15:59:59 schrieb Markus Böhm:
1. I used Your lualoop file with content: module Main (main) where
main :: IO () main = do --putStrLn "EPS:" -- eps <- readLn :: IO Double print $ 4*calcPi 0.00000001
calcPi :: Double -> Double calcPi eps = go False 1 3 where go bl p1 i
| 4*abs(p2-p1) < eps = p1 | otherwise = go (not bl) p2 (i+2)
where p2 | bl = p1+1/i
| otherwise = p1-1/i
Oops, I've screwed up my timings earlier, that variant doesn't quite give optimal speed (3.65s via-C vs.3.02s for the other loops, but the NCG code of that takes a whopping 12.13s here vs. 4.x - 6.y s for the other loops), what I had measured was ==================================== calcPi :: Double -> Double calcPi eps = go False 1 3 where go True p1 i | 4*(p2-p1) < eps = p1 | otherwise = go False p2 (i+2) where p2 = p1+1/i go False p1 i | 4*(p1-p2) < eps = p1 | otherwise = go True p2 (i+2) where p2 = p1-1/i ==================================== (which gives 3.03s via C and 6.91s with the NCG). Mind trying that, too? Nevertheless, the results are seriously disturbing. The previous code runs more than 2.5 times as fast on your computer than on mine when compiled with the NCG and twice as fast on my computer than on yours when compiled via C. I don't know what to make of it.
2. F:\MeineUebungen>ghc -O2 -fforce-recomp -fexcess-precision -fvia-C -optc-O3 -o c loop --make p085-pi_lualoop.hs [1 of 1] Compiling Main ( p085-pi_lualoop.hs, p085-pi_lualoop.o ) Linking cloop.exe ...
F:\MeineUebungen>ghc -O2 -fforce-recomp -o nloop --make p085-pi_lualoop.hs [1 of 1] Compiling Main ( p085-pi_lualoop.hs, p085-pi_lualoop.o ) Linking nloop.exe ...
F:\MeineUebungen>cloop +RTS -sstderr cloop +RTS -sstderr 3.1415926485894725 20,860 bytes allocated in the heap 892 bytes copied during GC 3,068 bytes maximum residency (1 sample(s)) 13,316 bytes maximum slop 1 MB total memory in use (0 MB lost due to fragmentation)
Generation 0: 0 collections, 0 parallel, 0.00s, 0.00s elapsed Generation 1: 1 collections, 0 parallel, 0.00s, 0.00s elapsed
INIT time 0.02s ( 0.02s elapsed) MUT time 7.39s ( 7.27s elapsed) GC time 0.00s ( 0.00s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 7.41s ( 7.28s elapsed)
%GC time 0.0% (0.0% elapsed)
Alloc rate 2,816 bytes per MUT second
Productivity 99.8% of total user, 101.5% of total elapsed
F:\MeineUebungen>nloop +RTS -sstderr nloop +RTS -sstderr 3.1415926485894725 20,860 bytes allocated in the heap 892 bytes copied during GC 3,068 bytes maximum residency (1 sample(s)) 13,316 bytes maximum slop 1 MB total memory in use (0 MB lost due to fragmentation)
Generation 0: 0 collections, 0 parallel, 0.00s, 0.00s elapsed Generation 1: 1 collections, 0 parallel, 0.00s, 0.00s elapsed
INIT time 0.02s ( 0.00s elapsed) MUT time 4.77s ( 4.81s elapsed) GC time 0.00s ( 0.00s elapsed) EXIT time 0.00s ( 0.00s elapsed) Total time 4.78s ( 4.81s elapsed)
%GC time 0.0% (0.0% elapsed)
Alloc rate 4,362 bytes per MUT second
Productivity 99.7% of total user, 99.0% of total elapsed
-- Markus