1
0
mirror of https://github.com/golang/go synced 2024-10-02 04:28:33 -06:00
go/src/math
Robert Griesemer 067acd51b0 math/big: faster "pure Go" addition/subtraction for long vectors
(platforms w/o corresponding assembly kernels)

For short vector adds there's some erradic slow-down, but overall
these routines have become significantly faster. This only matters
for platforms w/o native (assembly) versions of these kernels, so
we are not concerned about the minor slow-down for short vectors.

This code was already reviewed under Mercurial (golang.org/cl/172810043)
but wasn't submitted before the switch to git.

Benchmarks run on 2.3GHz Intel Core i7, running OS X 10.9.5,
with the respective AddVV and AddVW assembly routines disabled.

benchmark              old ns/op     new ns/op     delta
BenchmarkAddVV_1       6.59          7.09          +7.59%
BenchmarkAddVV_2       10.3          10.1          -1.94%
BenchmarkAddVV_3       10.9          12.6          +15.60%
BenchmarkAddVV_4       13.9          15.6          +12.23%
BenchmarkAddVV_5       16.8          17.3          +2.98%
BenchmarkAddVV_1e1     29.5          29.9          +1.36%
BenchmarkAddVV_1e2     246           232           -5.69%
BenchmarkAddVV_1e3     2374          2185          -7.96%
BenchmarkAddVV_1e4     58942         22292         -62.18%
BenchmarkAddVV_1e5     668622        225279        -66.31%
BenchmarkAddVW_1       6.81          5.58          -18.06%
BenchmarkAddVW_2       7.69          6.86          -10.79%
BenchmarkAddVW_3       9.56          8.32          -12.97%
BenchmarkAddVW_4       12.1          9.53          -21.24%
BenchmarkAddVW_5       13.2          10.9          -17.42%
BenchmarkAddVW_1e1     23.4          18.0          -23.08%
BenchmarkAddVW_1e2     175           141           -19.43%
BenchmarkAddVW_1e3     1568          1266          -19.26%
BenchmarkAddVW_1e4     15425         12596         -18.34%
BenchmarkAddVW_1e5     156737        133539        -14.80%
BenchmarkFibo          381678466     132958666     -65.16%

benchmark              old MB/s     new MB/s     speedup
BenchmarkAddVV_1       9715.25      9028.30      0.93x
BenchmarkAddVV_2       12461.72     12622.60     1.01x
BenchmarkAddVV_3       17549.64     15243.82     0.87x
BenchmarkAddVV_4       18392.54     16398.29     0.89x
BenchmarkAddVV_5       18995.23     18496.57     0.97x
BenchmarkAddVV_1e1     21708.98     21438.28     0.99x
BenchmarkAddVV_1e2     25956.53     27506.88     1.06x
BenchmarkAddVV_1e3     26947.93     29286.66     1.09x
BenchmarkAddVV_1e4     10857.96     28709.46     2.64x
BenchmarkAddVV_1e5     9571.91      28409.21     2.97x
BenchmarkAddVW_1       1175.28      1433.98      1.22x
BenchmarkAddVW_2       2080.01      2332.54      1.12x
BenchmarkAddVW_3       2509.28      2883.97      1.15x
BenchmarkAddVW_4       2646.09      3356.83      1.27x
BenchmarkAddVW_5       3020.69      3671.07      1.22x
BenchmarkAddVW_1e1     3425.76      4441.40      1.30x
BenchmarkAddVW_1e2     4553.17      5642.96      1.24x
BenchmarkAddVW_1e3     5100.14      6318.72      1.24x
BenchmarkAddVW_1e4     5186.15      6350.96      1.22x
BenchmarkAddVW_1e5     5104.07      5990.74      1.17x

Change-Id: I7a62023b1105248a0e85e5b9819d3fd4266123d4
Reviewed-on: https://go-review.googlesource.com/2480
Reviewed-by: Russ Cox <rsc@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
2015-01-08 17:00:59 +00:00
..
big math/big: faster "pure Go" addition/subtraction for long vectors 2015-01-08 17:00:59 +00:00
cmplx build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
rand math/rand: fix example_test to show with the correct method 2014-12-23 17:24:24 +00:00
abs_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
abs_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
abs_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
abs_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
abs_ppc64x.s all: power64 is now ppc64 2014-12-05 19:13:20 -05:00
abs.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
acosh.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
all_test.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
asin_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
asin_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
asin_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
asin_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
asin.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
asinh.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atan2_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atan2_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atan2_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atan2_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atan2.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atan_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atan_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atan_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atan_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atan.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
atanh.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
bits.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
cbrt.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
const.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
copysign.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
dim_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
dim_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
dim_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
dim_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
dim.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
erf.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
exp2_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
exp2_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
exp2_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
exp2_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
exp_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
exp_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
exp_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
exp_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
exp.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
expm1_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
expm1_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
expm1_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
expm1_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
expm1.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
export_test.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
floor_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
floor_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
floor_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
floor_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
floor.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
frexp_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
frexp_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
frexp_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
frexp_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
frexp.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
gamma.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
hypot_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
hypot_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
hypot_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
hypot_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
hypot.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
j0.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
j1.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
jn.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
ldexp_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
ldexp_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
ldexp_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
ldexp_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
ldexp.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
lgamma.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log1p_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log1p_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log1p_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log1p_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log1p.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log10_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log10_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log10_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log10_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log10.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
log.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
logb.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
mod_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
mod_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
mod_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
mod_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
mod.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
modf_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
modf_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
modf_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
modf_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
modf.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
nextafter.go math: be consistent in how we document special cases 2015-01-05 21:01:46 +00:00
pow10.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
pow.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
remainder_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
remainder_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
remainder_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
remainder_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
remainder.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
signbit.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sin_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sin_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sin_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sin_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sin.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sincos_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sincos_amd64.s math: avoid assumption of denormalized math mode in Sincos 2014-09-26 17:13:24 -04:00
sincos_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sincos_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sincos.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sinh.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sqrt_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sqrt_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sqrt_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sqrt_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
sqrt.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
stubs_ppc64x.s all: power64 is now ppc64 2014-12-05 19:13:20 -05:00
tan_386.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
tan_amd64.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
tan_amd64p32.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
tan_arm.s build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
tan.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
tanh.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00
unsafe.go build: move package sources from src/pkg to src 2014-09-08 00:08:51 -04:00