• Rémy Oudompheng's avatar
    math/big: use nat pool to reduce allocations in mul and sqr · 8f30d251
    Rémy Oudompheng authored
    This notably allows to reuse temporaries across
    the karatsubaSqr recursion.
    
    benchmark                    old ns/op     new ns/op     delta
    BenchmarkNatMul/10-4         227           228           +0.44%
    BenchmarkNatMul/100-4        8339          8589          +3.00%
    BenchmarkNatMul/1000-4       313796        312272        -0.49%
    BenchmarkNatMul/10000-4      11924720      11873589      -0.43%
    BenchmarkNatMul/100000-4     503813354     503839058     +0.01%
    BenchmarkNatSqr/20-4         549           513           -6.56%
    BenchmarkNatSqr/30-4         945           874           -7.51%
    BenchmarkNatSqr/50-4         1993          1832          -8.08%
    BenchmarkNatSqr/80-4         4096          3874          -5.42%
    BenchmarkNatSqr/100-4        6192          5712          -7.75%
    BenchmarkNatSqr/200-4        20388         19543         -4.14%
    BenchmarkNatSqr/300-4        38735         36715         -5.21%
    BenchmarkNatSqr/500-4        99562         93542         -6.05%
    BenchmarkNatSqr/800-4        195554        184907        -5.44%
    BenchmarkNatSqr/1000-4       286302        275053        -3.93%
    BenchmarkNatSqr/10000-4      9817057       9441641       -3.82%
    BenchmarkNatSqr/100000-4     390713416     379696789     -2.82%
    
    benchmark                    old allocs     new allocs     delta
    BenchmarkNatMul/10-4         1              1              +0.00%
    BenchmarkNatMul/100-4        1              1              +0.00%
    BenchmarkNatMul/1000-4       2              1              -50.00%
    BenchmarkNatMul/10000-4      2              1              -50.00%
    BenchmarkNatMul/100000-4     9              11             +22.22%
    BenchmarkNatSqr/20-4         2              1              -50.00%
    BenchmarkNatSqr/30-4         2              1              -50.00%
    BenchmarkNatSqr/50-4         2              1              -50.00%
    BenchmarkNatSqr/80-4         2              1              -50.00%
    BenchmarkNatSqr/100-4        2              1              -50.00%
    BenchmarkNatSqr/200-4        2              1              -50.00%
    BenchmarkNatSqr/300-4        4              1              -75.00%
    BenchmarkNatSqr/500-4        4              1              -75.00%
    BenchmarkNatSqr/800-4        10             1              -90.00%
    BenchmarkNatSqr/1000-4       10             1              -90.00%
    BenchmarkNatSqr/10000-4      731            1              -99.86%
    BenchmarkNatSqr/100000-4     19687          6              -99.97%
    
    benchmark                    old bytes     new bytes     delta
    BenchmarkNatMul/10-4         192           192           +0.00%
    BenchmarkNatMul/100-4        4864          4864          +0.00%
    BenchmarkNatMul/1000-4       57344         49224         -14.16%
    BenchmarkNatMul/10000-4      565248        498772        -11.76%
    BenchmarkNatMul/100000-4     5749504       7263720       +26.34%
    BenchmarkNatSqr/20-4         672           352           -47.62%
    BenchmarkNatSqr/30-4         992           512           -48.39%
    BenchmarkNatSqr/50-4         1792          896           -50.00%
    BenchmarkNatSqr/80-4         2688          1408          -47.62%
    BenchmarkNatSqr/100-4        3584          1792          -50.00%
    BenchmarkNatSqr/200-4        6656          3456          -48.08%
    BenchmarkNatSqr/300-4        24448         16387         -32.97%
    BenchmarkNatSqr/500-4        36864         24591         -33.29%
    BenchmarkNatSqr/800-4        69760         40981         -41.25%
    BenchmarkNatSqr/1000-4       86016         49180         -42.82%
    BenchmarkNatSqr/10000-4      2524800       487368        -80.70%
    BenchmarkNatSqr/100000-4     68599808      5876581       -91.43%
    
    Change-Id: I8e6e409ae1cb48be9d5aa9b5f428d6cbe487673a
    Reviewed-on: https://go-review.googlesource.com/c/go/+/172017
    Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
    8f30d251
nat.go 29.2 KB