Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
R=gri
CC=golang-dev, golang-dev
http://codereview.appspot.com/1244044
|
|
R=rsc
CC=golang-dev
http://codereview.appspot.com/1231044
Committer: Robert Griesemer <gri@golang.org>
|
|
Implementations are pretty rough and simple at this point, but it's a start.
R=gri
CC=golang-dev
http://codereview.appspot.com/1250043
Committer: Robert Griesemer <gri@golang.org>
|
|
always return z for nat.scan
R=rsc
CC=golang-dev
http://codereview.appspot.com/1236043
|
|
- implemented setWord, use it where setUint64 is wrong
- divLarge: use fast mulWW, divWW; implemented mulWW, divWW
- better assembly code for addMulVVW
R=rsc
CC=golang-dev
http://codereview.appspot.com/1258042
|
|
Fixes issue 784.
R=rsc
CC=golang-dev
http://codereview.appspot.com/1196043
|
|
- support for binary prefix 0b (to match fmt.Format)
- renamed nat.new -> nat.setUint64 for consistency
- more tests
R=r
CC=golang-dev
http://codereview.appspot.com/1233041
Committer: Robert Griesemer <gri@golang.org>
|
|
- removed last argument (n) from all core arithmetic routines;
instead, use the length of the result
- simplified nat.make implementation and chose a better capacity
for new values, removed a TODO in the process
Changing the constant e from 1 (old) to 4 (new) improved
pidigits -s -n 10000 by ~9% (on a 3.06GHz Intel Core 2 Duo):
user 0m3.882s (old)
user 0m3.549s (new)
R=rsc
CC=golang-dev
http://codereview.appspot.com/1133043
|
|
- pass []Word instead of *Word to core arithmetic functions
- remove dead code
R=rsc
CC=golang-dev
http://codereview.appspot.com/1154042
|
|
- no need to make copies in cases of aliases
- removed deprecated internal shift functions
- minor unrelated simplifications
This change improves pidigits -s -n10000 by almost 20%:
user 0m6.156s (old)
user 0m4.999s (new)
(pidigits -s -n20000 goes from ~25s to ~19s)
R=rsc
CC=golang-dev
http://codereview.appspot.com/1149041
|
|
- renamed Len -> BitLen, simplified implementation
- renamed old Div, Mod, DivMod -> Que, Rem, QuoRem
- implemented Div, Mod, DivMod (Euclidian definition, more
useful in a mathematical context)
- fixed a bug in Exp (-0 was possible)
- added extra tests to check normalized results everywhere
- uniformly set Int.neg flag at the end of computations
- minor cosmetic cleanups
- ran all tests
R=rsc
CC=golang-dev
http://codereview.appspot.com/1091041
|
|
R=gri
CC=golang-dev
http://codereview.appspot.com/1084041
|
|
R=gri
CC=golang-dev
http://codereview.appspot.com/987041
Committer: Robert Griesemer <gri@golang.org>
|
|
R=rsc
CC=golang-dev
http://codereview.appspot.com/1048041
|
|
- fixed a couple of bugs in the process
(shift right was incorrect for negative numbers)
- added more tests and made some tests more robust
- changed pidigits back to using shifts to multiply
by 2 instead of add
This improves pidigit -s -n 10000 by approx. 5%:
user 0m6.496s (old)
user 0m6.156s (new)
R=rsc
CC=golang-dev
http://codereview.appspot.com/963044
|
|
This results in an improvement of > 35% for the existing Mul benchmark
using the same karatsuba threshold, and an improvement of > 50% with
a slightly higher threshold (32 instead of 30):
big.BenchmarkMul 500 6731846 ns/op (old alg.)
big.BenchmarkMul 500 4351122 ns/op (new alg.)
big.BenchmarkMul 500 3133782 ns/op (new alg., new theshold)
Also:
- tweaked calibrate.go, use same benchmark as for Mul benchmark
R=rsc
CC=golang-dev
http://codereview.appspot.com/1037041
|
|
Plus:
- calibration "test" - include in tests with gotest -calibrate
- basic Mul benchmark
- extra multiplication tests
- various cleanups
This change improves multiplication speed of numbers >= 30 words
in length (current threshold; found empirically with calibrate):
The multiplication benchmark (multiplication of a variety of long numbers)
improves by ~35%, individual multiplies can be significantly faster.
gotest -benchmarks=Mul
big.BenchmarkMul 500 6829290 ns/op (w/ Karatsuba)
big.BenchmarkMul 100 10600760 ns/op
There's no impact on pidigits for -n=10000 or -n=20000
because the operands are are too small.
R=rsc
CC=golang-dev
http://codereview.appspot.com/1004042
Committer: Robert Griesemer <gri@golang.org>
|
|
Changed most of the functions in nat.go to methods on nat.
R=gri
CC=golang-dev
http://codereview.appspot.com/976041
Committer: Robert Griesemer <gri@golang.org>
|
|
R=gri, eds
CC=golang-dev
http://codereview.appspot.com/947042
|
|
This gives about a 6% performance improvement to pidigits.
Thanks to Russ for the suggestion.
R=rsc, gri
CC=golang-dev
http://codereview.appspot.com/957041
Committer: Russ Cox <rsc@golang.org>
|
|
There was a bug in makeN that caused lots of unnecessary
allocations. Fixing this exposed a few bugs in other
functions which worked when makeN allocated a new slice, but
failed when it simply resized an existing slice. The result
is a pretty big performance improvement. When running
pidigits, here were the numbers I got on amd64:
Before this change:
pidigits 10000
gcc -O2 pidigits.c -lgmp 2.09u 0.02s 2.11r
gc pidigits 12.68u 0.04s 12.72r
gc_B pidigits 12.71u 0.03s 12.75r
After:
pidigits 10000
gcc -O2 pidigits.c -lgmp 2.09u 0.00s 2.10r
gc pidigits 6.82u 0.00s 6.85r
gc_B pidigits 6.55u 0.01s 6.59r
R=rsc, gri
CC=golang-dev
http://codereview.appspot.com/953042
Committer: Russ Cox <rsc@golang.org>
|
|
This yields a pretty significant performance boost to pidigits and there are still some improvements to be made. Here are my numbers:
amd64 w/ bignum:
pidigits 10000
gcc -O2 pidigits.c -lgmp 2.10u 0.00s 2.10r
gc pidigits 22.92u 0.02s 22.97r
gc_B pidigits 22.62u 0.00s 22.65r
amd64 w/ big:
pidigits 10000
gcc -O2 pidigits.c -lgmp 2.09u 0.02s 2.11r
gc pidigits 12.68u 0.04s 12.72r
gc_B pidigits 12.71u 0.03s 12.75r
386 w/ bignum:
pidigits 10000
gcc -O2 pidigits.c -lgmp 2.09u 0.00s 2.09r
gc pidigits 44.30u 0.01s 44.35r
gc_B pidigits 44.29u 0.03s 44.35r
386 w/ big:
pidigits 10000
gcc -O2 pidigits.c -lgmp 2.10u 0.00s 2.10r
gc pidigits 22.70u 0.06s 22.79r
gc_B pidigits 22.80u 0.09s 22.91r
R=rsc, gri
CC=golang-dev
http://codereview.appspot.com/881050
Committer: Russ Cox <rsc@golang.org>
|
|
probablyPrime would return false negatives in some cases.
This code has now been tested against GMP for several million iterations without issues.
Fixes issue 638.
R=rsc
CC=golang-dev
http://codereview.appspot.com/252041
|
|
(changes adopted from alc, agl)
R=agl1, agl
CC=golang-dev
http://codereview.appspot.com/181137
|
|
parsing and printing to new syntax.
Use -oldparser to parse the old syntax,
use -oldprinter to print the old syntax.
2) Change default gofmt formatting settings
to use tabs for indentation only and to use
spaces for alignment. This will make the code
alignment insensitive to an editor's tabwidth.
Use -spaces=false to use tabs for alignment.
3) Manually changed src/exp/parser/parser_test.go
so that it doesn't try to parse the parser's
source files using the old syntax (they have
new syntax now).
4) gofmt -w src misc test/bench
1st set of files.
R=rsc
CC=agl, golang-dev, iant, ken2, r
http://codereview.appspot.com/180047
|
|
R=r, gri
CC=golang-dev
http://codereview.appspot.com/156115
|
|
I missed a case.
R=rsc, agl
CC=golang-dev
http://codereview.appspot.com/156092
|
|
|
|
TBR=agl1
CC=golang-dev
http://codereview.appspot.com/154065
|
|
Turn methods that don't store the result in their receiver into
functions in order to preserve the convention.
Re-jig Exp and Div by moving their guts into nat.go.
Add ProbablyPrime to perform Miller-Rabin primality tests.
crypto/rsa: reenable key generation since we now have ProbablyPrime.
R=gri
CC=go-dev
http://codereview.prom.corp.google.com/1024038
|
|
R=rsc
CC=r
http://go/go-review/1026038
|
|
rsc's algorithm
- applied gofmt -w misc src
- partial CL (remaining files in other CLs)
R=rsc, r
http://go/go-review/1024040
|
|
R=rsc, r
http://go/go-review/1025029
|
|
- enabled for function declarations (not just function literals)
- applied gofmt -w $GOROOT/src
(look for instance at src/pkg/debug/elf/elf.go)
R=r, rsc
CC=go-dev
http://go/go-review/1026006
|
|
R=agl
http://go/go-review/1022003
|
|
R=gri, rsc
CC=go-dev
http://go/go-review/1017036
|
|
that have not changed since I applied gofmt.
R=gri
DELTA=456 (77 added, 3 deleted, 376 changed)
OCL=35378
CL=35383
|
|
R=rsc
DELTA=2 (2 added, 0 deleted, 0 changed)
OCL=34196
CL=34199
|
|
R=rsc
DELTA=113 (10 added, 30 deleted, 73 changed)
OCL=33877
CL=33882
|
|
- removed defs.go (moved declarations into arith.go where they belong)
R=r
DELTA=40 (16 added, 20 deleted, 4 changed)
OCL=33464
CL=33464
|
|
- changed Cmp to return -1, 0, +1
- added corresponding test cases
R=rsc
DELTA=173 (136 added, 3 deleted, 34 changed)
OCL=33431
CL=33459
|
|
- no other changes
R=r
DELTA=1248 (623 added, 623 deleted, 2 changed)
OCL=33371
CL=33371
|