[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