[Haskell-beginners] Difference of time execution times when measuring with time and profiling

Javier de Vega Ruiz javier.devega.ruiz at gmail.com
Mon Oct 26 12:02:40 UTC 2015


Thanks Thomas,

I tried in Linux and the behavior of the time tool seems more reasonable
now:
real 0m46.743s
user 0m45.888s
sys 0m0.160s

After checking some of the RTS documentation, it turns out the GC's cost
centre is not included by default, in order to include I had to change the
-p to -pa which results in:
  fast-fib +RTS -pa -RTS

total time  =       47.43 secs   (47433 ticks @ 1000 us, 1 processor)
total alloc = 44,128,957,088 bytes  (excludes profiling overheads)

COST CENTRE      MODULE                  %time %alloc  ticks     bytes

GC               GC                       86.0    0.0  40778         0
fastFibs.nextFib Main                     13.1   99.6   6228 43952857104

This clearly states where that 86% difference was coming from, the GC,
which means the world makes sense again :)

Does someone know how to add the cost centre for GC without having to use
-pa?

Best regards,
Javier de Vega Ruiz.

On Fri, Oct 23, 2015 at 1:27 AM, Thomas Koster <tkoster at gmail.com> wrote:

> Javier,
>
> On 23 October 2015 at 03:00, Javier de Vega Ruiz
> <javier.devega.ruiz at gmail.com> wrote:
> > I am messing around with bang patterns and noticed some huge differences
> > between the total time as reported by the time tool and the .prof file.
> > Below is the code used.
> > Without bang patterns:
> > module Main where
> >
> > import Data.List
> >
> > fastFibs =
> >   unfoldr nextFib (1, 1)
> >   where nextFib (x, y) = Just $ (x, (y, (x + y)))
> >
> > main =
> >   putStrLn $ (show n) ++ "th fib is: " ++ (show $ fastFibs !! (n - 1))
> >   where n = 1000000
> >
> > With bang patterns:
> > {-# LANGUAGE BangPatterns #-}
> >
> > module Main where
> >
> > import Data.List
> >
> > fastFibs =
> >   unfoldr nextFib (1, 1)
> >   where nextFib (!x, !y) = Just $ (x, (y, (x + y)))
> >
> > main =
> >   putStrLn $ (show n) ++ "th fib is: " ++ (show $ fastFibs !! (n - 1))
> >   where n = 1000000
> >
> > when looking at the first through time and prof I get the following.
> > Without:
> > real    0m53.501s
> > user    0m0.015s
> > sys     0m0.328s
> >         Thu Oct 22 16:46 2015 Time and Allocation Profiling Report
> (Final)
> >
> >            fast-fib.exe +RTS -p -RTS
> >
> >         total time  =        9.52 secs   (9520 ticks @ 1000 us, 1
> processor)
> >         total alloc = 43,500,223,152 bytes  (excludes profiling
> overheads)
> >
> > Please note the huge difference 53 vs 9 seconds.
> >
> > With:
> > real    0m10.095s
> > user    0m0.031s
> > sys     0m0.344s
> >         Thu Oct 22 16:50 2015 Time and Allocation Profiling Report
> (Final)
> >
> >            fast-fib.exe +RTS -p -RTS
> >
> >         total time  =        8.97 secs   (8971 ticks @ 1000 us, 1
> processor)
> >         total alloc = 43,500,309,960 bytes  (excludes profiling
> overheads)
> >
> > Here differences seem to be much smaller.
> >
> > I am using Windows 8.1 64 bit, GHC 7.8.3 and measuring with the following
> > line:
> > ghc Main.hs -o fast-fib.exe -O2 -prof && time ./fast-fib.exe +RTS -p &&
> cat
> > fast-fib.prof
> >
> > Could someone please explain where the big difference is coming from and
> how
> > to change the measuring approach to get more consistent results?
>
> Before going into why the numbers are what they are, I think there is
> something wrong with your time tool on Windows. Your "user" time is
> suspiciously low in both measurements. When I ran your program on
> Linux, the report from the -s RTS option and the "real" and "user"
> numbers from the time tool were within milliseconds of each other
> (qualification: I used GHC 7.10.2).
>
> Apart from that, I am pretty sure the -p RTS option and the time tool
> are not measuring the same thing. I think the profiler samples "ticks"
> in the runtime, whereas the time tool and the -s option probably use
> CPU performance counters. Somebody more familiar with the GHC runtime
> should be able to give you more detail.
>
> --
> Thomas Koster
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20151026/aa78fd3b/attachment.html>


More information about the Beginners mailing list