#5034: Performance of Data.Graph.{preorderF, postorderF}
----------------------------------+-----------------------------------------
    Reporter:  michalt            |        Owner:  michalt                
        Type:  bug                |       Status:  patch                  
    Priority:  normal             |    Milestone:                         
   Component:  libraries (other)  |      Version:  7.0.2                  
    Keywords:                     |     Testcase:                         
   Blockedby:                     |   Difficulty:                         
          Os:  Unknown/Multiple   |     Blocking:                         
Architecture:  Unknown/Multiple   |      Failure:  Runtime performance bug
----------------------------------+-----------------------------------------
Changes (by michalt):

  * owner:  => michalt


Comment:

 So I did some more testing, this time using also the GHC's version of
 postorder.
 And it turns out it is slightly (but consistently) faster than the one I
 wrote
 (based on `Data.Sequence`). So I decided to try the same trick with
 preorder:
 {{{
 preorder' :: Tree a -> [a] -> [a]
 preorder' (Node a ts) = (a :) . preorderF' ts

 preorderF' :: Forest a -> [a] -> [a]
 preorderF' ts = foldr (.) id $ map preorder' ts

 preorderF2 :: Forest a -> [a]
 preorderF2 ts = preorderF' ts []
 }}}
 and again it's just a bit faster. Anyway, below are some results
 (functions with
 suffix `Seq` are the ones based on `Data.Sequence`, the ones without any
 suffix are from `Data.Graph`):
 {{{
 benchmarking random graph: preorderF . dff
 [..]
 mean: 14.45173 ms, lb 14.39151 ms, ub 14.52760 ms, ci 0.950
 std dev: 344.7061 us, lb 283.2271 us, ub 464.7833 us, ci 0.950
 [..]

 benchmarking random graph: preorderF2 . dff
 [..]
 mean: 2.224018 ms, lb 2.202782 ms, ub 2.247461 ms, ci 0.950
 std dev: 114.6005 us, lb 98.60243 us, ub 136.9182 us, ci 0.950
 [..]

 benchmarking random graph: preorderSeq . dff
 [..]
 mean: 2.266279 ms, lb 2.245766 ms, ub 2.286897 ms, ci 0.950
 std dev: 105.3449 us, lb 94.27900 us, ub 118.3094 us, ci 0.950
 [..]

 benchmarking random graph: postOrd
 [..]
 mean: 33.65838 ms, lb 33.56979 ms, ub 33.76757 ms, ci 0.950
 std dev: 502.9029 us, lb 408.1316 us, ub 638.5748 us, ci 0.950
 [..]

 benchmarking random graph: postOrdGHC
 [..]
 mean: 2.254825 ms, lb 2.224924 ms, ub 2.288206 ms, ci 0.950
 std dev: 162.0765 us, lb 144.0785 us, ub 195.5252 us, ci 0.950
 [..]

 benchmarking random graph: postOrdSeq
 [..]
 mean: 2.301785 ms, lb 2.283586 ms, ub 2.320407 ms, ci 0.950
 std dev: 93.74991 us, lb 84.26520 us, ub 106.4114 us, ci 0.950
 [..]

 benchmarking random graph: scc
 [..]
 mean: 37.50496 ms, lb 37.40495 ms, ub 37.61987 ms, ci 0.950
 std dev: 548.3968 us, lb 474.6578 us, ub 647.1524 us, ci 0.950
 [..]

 benchmarking random graph: sccGHC
 [..]
 mean: 5.643530 ms, lb 5.620937 ms, ub 5.678739 ms, ci 0.950
 std dev: 140.9852 us, lb 94.59864 us, ub 223.5663 us, ci 0.950
 [..]

 benchmarking random graph: sccSeq
 [..]
 mean: 5.678401 ms, lb 5.621075 ms, ub 5.733683 ms, ci 0.950
 std dev: 289.0819 us, lb 266.6904 us, ub 313.9232 us, ci 0.950
 [..]

 benchmarking extreme case: preorderF . dff
 [..]
 mean: 6.390497 ms, lb 6.360810 ms, ub 6.433112 ms, ci 0.950
 std dev: 180.4465 us, lb 135.0194 us, ub 254.0712 us, ci 0.950
 [..]

 benchmarking extreme case: preorderF2 . dff
 [..]
 mean: 191.6084 us, lb 191.2365 us, ub 192.0628 us, ci 0.950
 std dev: 2.101061 us, lb 1.780396 us, ub 2.735204 us, ci 0.950
 [..]

 benchmarking extreme case: preorderSeq . dff
 [..]
 mean: 210.9569 us, lb 210.3300 us, ub 211.7104 us, ci 0.950
 std dev: 3.505228 us, lb 3.001931 us, ub 4.055361 us, ci 0.950
 [..]

 benchmarking extreme case: postOrd
 [..]
 mean: 15.23066 ms, lb 15.19714 ms, ub 15.27154 ms, ci 0.950
 std dev: 189.1826 us, lb 156.2228 us, ub 237.1671 us, ci 0.950
 [..]

 benchmarking extreme case: postOrdGHC
 [..]
 mean: 199.9126 us, lb 199.2887 us, ub 200.6160 us, ci 0.950
 std dev: 3.404376 us, lb 3.008538 us, ub 4.050542 us, ci 0.950
 [..]

 benchmarking extreme case: postOrdSeq
 [..]
 mean: 224.3217 us, lb 223.6758 us, ub 225.1439 us, ci 0.950
 std dev: 3.715079 us, lb 3.023668 us, ub 4.834299 us, ci 0.950
 [..]

 benchmarking extreme case: scc
 [..]
 mean: 15.54214 ms, lb 15.50617 ms, ub 15.58197 ms, ci 0.950
 std dev: 194.2154 us, lb 170.9911 us, ub 221.9285 us, ci 0.950
 [..]

 benchmarking extreme case: sccGHC
 [..]
 mean: 464.2387 us, lb 462.3211 us, ub 466.3139 us, ci 0.950
 std dev: 10.19258 us, lb 8.882281 us, ub 11.85275 us, ci 0.950
 [..]

 benchmarking extreme case: sccSeq
 [..]
 mean: 490.0950 us, lb 488.4120 us, ub 491.8692 us, ci 0.950
 std dev: 8.864578 us, lb 7.751136 us, ub 10.22137 us, ci 0.950
 [..]
 }}}

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5034#comment:4>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to