measuring time differences between functions
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
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).
Am Mittwoch 17 Juni 2009 20:25:08 schrieb Nico Rolle:
or is there a better way to mesure performance in execution time?
I think System.CPUTime provides more reliable timings if the work takes long enough for the scheduler to kick in. And there are several benchmarking packages on Hackage, e.g. maybench, microbench, benchpress, StrictBench.
participants (2)
-
Daniel Fischer -
Nico Rolle