[Haskell-cafe] measuring time differences between functions

Daniel Fischer daniel.is.fischer at web.de
Wed Jun 17 15:07:36 EDT 2009


Am Mittwoch 17 Juni 2009 20:25:08 schrieb Nico Rolle:
> Hi everyone.
> I made parallel versions of my functions projection selection and sort
> and i wanted to test the difference in runtime.
> But he only printed 0.00 twice.
> Maybe hes just too fast?
> Or is it because of lazy evaluation?
> or is there a better way to mesure performance in execution time?
> regards
>
> main = do
>     xs <- readCSV "dataconvert/lineitem.tbl" '|'
>     start <- getCurrentTime
>     let pnp = projection [5] xs
>     let snp = selection (\x -> (x!!0) > (Int 17000)) pnp
>     let sortnp = sort [0] [ASC] snp
>     end <- getCurrentTime
>     putStrLn $ show (end `diffUTCTime` start)
>     start2 <- getCurrentTime
>     let pp = pProjection [5] xs
>     let sp = pSelection (\x -> (x!!0) > (Int 17000)) pp
>     let sortp = pSort [0] [ASC] sp
>     end2 <- getCurrentTime
>     putStrLn $ show (end2 `diffUTCTime` start2)
>     return snp

The let bindings do not cause any computation because of laziness, all they do is bind the 
names to a thunk that says how to calculate the value if it is needed. Regardless of how 
long the computation would take, binding the names to a thunk takes only a few 
nanoseconds.

To measure the time needed for the computations, you must force them to be carried out 
between the two calls to getCurrentTime.

Probably inserting

print $ last snp

before 
end <- getCurrentTime
(and likewise for the second) would be enough (if the sorting doesn't require the values 
in snp to be fully evaluated, you would have to do more forcing).


More information about the Haskell-Cafe mailing list