Space Profiling
"Benjamin Fraser" <[email protected]> Tue, 10 May 2005 22:19:55 +1000
| Newsgroups | gmane.comp.lang.haskell.nhc.user |
|---|---|
| Message-ID | <[email protected]> |
Hello,
I wanted to use nhc to profile a simple program but ran into a string of =
errors. The example I present here is one of four small programs I have =
played
with. This example is from nhc98-1.18 compilied from source, I have =
played with
the 1.18 and 1.16 binary versions also. I'm using debian 3. The program =
is:
#####################strict.hs
module Main where
foldl' f e [] =3D e
foldl' f e (x:xs) =3D (foldl' f $! f e x) xs
main =3D print $ foldl' (+) 0 [1..1000]
{-main =3D print $ foldr (+) 0 [1..1000]-}
#####################strict.hs
With the aim of showing strict.hs would run in constant space as =
compared to
the commented out version. I compilied and ran the program thus (I know =
I can
use hmake instead):
$ nhc98 -p -o strict strict.hs
$ ./strict +RTS -p -i25kb -RTS
500500
$ hp2graph strict.hp
Illegal token JOB at 69
Aborted
This is the most common error encountered. Try again:
$ ./strict +RTS -p -i24kb -RTS
500500
$ hp2graph strict.hp
Segmentation fault
Segmentation faults are the second most common error. It is also =
possible for=20
hp2graph to run without error but it produces invalid postscript that =
cannot=20
be viewed. Here are the strict.hp files from each run:
#####################strict 25kb interval
JOB ./strict +RTS -p -i25kb -RTS ;
DATE "Tue May 10 21:45:49 2005
"
PROFILE_PRODUCER
MARK 0.00
SAMPLE 0 0.00
344
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 1 0.00
356
<binary_int_op> 8
<APPLY> 80
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 2 0.00
328
<binary_int_op> 8
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 3 0.00
344
<binary_int_op> 8
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 4 0.00
356
<binary_int_op> 8
<APPLY> 80
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 5 0.00
328
<binary_int_op> 8
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 6 0.00
344
<binary_int_op> 8
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 7 0.00
;
#####################strict 25kb interval
#####################strict 24kb interval
JOB ./strict +RTS -p -i24kb -RTS ;
DATE "Tue May 10 21:46:40 2005
"
PROFILE_PRODUCER
MARK 0.00
SAMPLE 0 0.00
328
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 1 0.00
328
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 2 0.00
328
<binary_int_op> 8
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 3 0.00
328
<binary_int_op> 8
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 4 0.00
328
<binary_int_op> 8
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 5 0.00
328
<binary_int_op> 8
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 6 0.00
328
<binary_int_op> 8
<APPLY> 72
<Main> 8
Builtin.primIntFromInteger 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 7 0.00
544
IO.hPutChar:7:30-7:52 12
<APPLY> 56
<Main> 8
Prelude.primIntegerAdd 8
;
MARK 0.00
SAMPLE 8 0.00
;
#####################strict 24kb interval
What am I doing wrong, some option perhaps?
Thanks,
Ben Fraser