[commit: packages/containers] master: Reimplement `<*>` (38b1b81)

git at git.haskell.org git at git.haskell.org
Fri Dec 18 22:11:17 UTC 2015


Repository : ssh://git@git.haskell.org/containers

On branch  : master
Link       : http://git.haskell.org/packages/containers.git/commitdiff/38b1b81c8b5536525d0daad9bd8ee9821a3fb929

>---------------------------------------------------------------

commit 38b1b81c8b5536525d0daad9bd8ee9821a3fb929
Author: David Feuer <David.Feuer at gmail.com>
Date:   Thu Dec 18 16:31:10 2014 -0500

    Reimplement `<*>`
    
    Use `coerce` for the `Functor` instance of `Elem`
    
    Using `fmap = coerce` for `Elem` speeds up `<*>` by somewhere
    around 20%.
    
    Benchmark results:
    
    OLD:
    
    benchmarking <*>/ix1000/500000
    time                 11.47 ms   (11.37 ms .. 11.59 ms)
                         0.999 R²   (0.998 R² .. 1.000 R²)
    mean                 11.61 ms   (11.52 ms .. 11.73 ms)
    std dev              279.9 μs   (209.5 μs .. 385.6 μs)
    
    benchmarking <*>/nf100/2500/rep
    time                 8.530 ms   (8.499 ms .. 8.568 ms)
                         1.000 R²   (1.000 R² .. 1.000 R²)
    mean                 8.511 ms   (8.498 ms .. 8.528 ms)
    std dev              40.40 μs   (28.55 μs .. 63.84 μs)
    
    benchmarking <*>/nf100/2500/ff
    time                 27.13 ms   (26.16 ms .. 28.70 ms)
                         0.994 R²   (0.988 R² .. 1.000 R²)
    mean                 26.49 ms   (26.29 ms .. 27.43 ms)
    std dev              697.1 μs   (153.0 μs .. 1.443 ms)
    
    benchmarking <*>/nf500/500/rep
    time                 8.421 ms   (8.331 ms .. 8.491 ms)
                         0.991 R²   (0.967 R² .. 1.000 R²)
    mean                 8.518 ms   (8.417 ms .. 9.003 ms)
    std dev              529.9 μs   (40.37 μs .. 1.176 ms)
    variance introduced by outliers: 32% (moderately inflated)
    
    benchmarking <*>/nf500/500/ff
    time                 33.71 ms   (33.58 ms .. 33.86 ms)
                         1.000 R²   (1.000 R² .. 1.000 R²)
    mean                 33.69 ms   (33.62 ms .. 33.76 ms)
    std dev              150.0 μs   (119.0 μs .. 191.0 μs)
    
    benchmarking <*>/nf2500/100/rep
    time                 8.390 ms   (8.259 ms .. 8.456 ms)
                         0.997 R²   (0.992 R² .. 1.000 R²)
    mean                 8.544 ms   (8.441 ms .. 8.798 ms)
    std dev              402.6 μs   (21.25 μs .. 714.9 μs)
    variance introduced by outliers: 23% (moderately inflated)
    
    benchmarking <*>/nf2500/100/ff
    time                 53.69 ms   (53.33 ms .. 54.08 ms)
                         1.000 R²   (1.000 R² .. 1.000 R²)
    mean                 53.59 ms   (53.38 ms .. 53.75 ms)
    std dev              341.2 μs   (231.7 μs .. 473.9 μs)
    
    NEW
    
    benchmarking <*>/ix1000/500000
    time                 2.688 μs   (2.607 μs .. 2.798 μs)
                         0.994 R²   (0.988 R² .. 1.000 R²)
    mean                 2.632 μs   (2.607 μs .. 2.715 μs)
    std dev              129.9 ns   (65.93 ns .. 242.8 ns)
    variance introduced by outliers: 64% (severely inflated)
    
    benchmarking <*>/nf100/2500/rep
    time                 8.371 ms   (8.064 ms .. 8.535 ms)
                         0.983 R²   (0.947 R² .. 1.000 R²)
    mean                 8.822 ms   (8.590 ms .. 9.463 ms)
    std dev              991.2 μs   (381.3 μs .. 1.809 ms)
    variance introduced by outliers: 61% (severely inflated)
    
    benchmarking <*>/nf100/2500/ff
    time                 22.84 ms   (22.74 ms .. 22.94 ms)
                         1.000 R²   (1.000 R² .. 1.000 R²)
    mean                 22.78 ms   (22.71 ms .. 22.86 ms)
    std dev              183.3 μs   (116.3 μs .. 291.3 μs)
    
    benchmarking <*>/nf500/500/rep
    time                 8.320 ms   (8.102 ms .. 8.514 ms)
                         0.995 R²   (0.990 R² .. 0.999 R²)
    mean                 8.902 ms   (8.675 ms .. 9.407 ms)
    std dev              952.4 μs   (435.5 μs .. 1.672 ms)
    variance introduced by outliers: 58% (severely inflated)
    
    benchmarking <*>/nf500/500/ff
    time                 24.50 ms   (24.41 ms .. 24.58 ms)
                         1.000 R²   (1.000 R² .. 1.000 R²)
    mean                 24.44 ms   (24.41 ms .. 24.48 ms)
    std dev              75.08 μs   (50.16 μs .. 111.3 μs)
    
    benchmarking <*>/nf2500/100/rep
    time                 8.419 ms   (8.366 ms .. 8.458 ms)
                         1.000 R²   (1.000 R² .. 1.000 R²)
    mean                 8.571 ms   (8.525 ms .. 8.670 ms)
    std dev              179.5 μs   (112.0 μs .. 278.1 μs)
    
    benchmarking <*>/nf2500/100/ff
    time                 24.14 ms   (24.07 ms .. 24.26 ms)
                         1.000 R²   (1.000 R² .. 1.000 R²)
    mean                 24.11 ms   (24.07 ms .. 24.17 ms)
    std dev              103.8 μs   (68.34 μs .. 142.0 μs)


>---------------------------------------------------------------

38b1b81c8b5536525d0daad9bd8ee9821a3fb929
 Data/Sequence.hs | 261 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 258 insertions(+), 3 deletions(-)

Diff suppressed because of size. To see it, use:

    git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc 38b1b81c8b5536525d0daad9bd8ee9821a3fb929


More information about the ghc-commits mailing list