1
0
mirror of https://github.com/golang/go synced 2024-10-04 19:21:21 -06:00
Commit Graph

72 Commits

Author SHA1 Message Date
Russ Cox
44ca04d3d6 big, bytes: move assembly externs to separate file
to make it easier to build package without assembly.

R=r, r2
CC=golang-dev
https://golang.org/cl/1680045
2010-06-21 19:53:08 -07:00
Russ Cox
8ae29642b1 big: fix spelling of Euclidean
R=gri
CC=golang-dev
https://golang.org/cl/1372042
2010-06-02 12:53:15 -07:00
Robert Griesemer
ab215f73fc big: bug fix for Quo aliasing problem
Fixes #820.

R=rsc
CC=golang-dev
https://golang.org/cl/1453041
2010-06-01 14:37:11 -07:00
Adam Langley
f199f292e7 big: add ModInverse.
ModInverse is just a small wrapper around GcdInt, but it's nice to
have in order to be clear about what one is doing in other code.

R=gri, agl1
CC=golang-dev
https://golang.org/cl/1244045
2010-05-26 15:58:58 -04:00
Evan Shaw
751fc425ee big: Rat test improvements
R=gri
CC=golang-dev
https://golang.org/cl/1270041
2010-05-24 16:38:41 -07:00
Adam Langley
eadebba36f big: prevent errors in Exp in the face of aliasing
R=gri
CC=golang-dev, golang-dev
https://golang.org/cl/1244044
2010-05-24 14:32:55 -04:00
Robert Griesemer
38b2d10bb2 test/hilbert.go: convert to test case and benchmark for big.Rat
R=rsc
CC=golang-dev
https://golang.org/cl/1231044
2010-05-21 20:20:17 -07:00
Evan Shaw
5ac88f4a8b big: Add Rat type
Implementations are pretty rough and simple at this point, but it's a start.

R=gri
CC=golang-dev
https://golang.org/cl/1250043
2010-05-21 16:14:55 -07:00
Robert Griesemer
e8dec0dc05 big: fix Int.SetString comment, simplify implementation,
always return z for nat.scan

R=rsc
CC=golang-dev
https://golang.org/cl/1236043
2010-05-21 14:28:34 -07:00
Robert Griesemer
e3bfeec474 big: implemented Int.Binomial (to be used in test/hilbert.go with the
forthcoming implementation of big.Rat)

R=rsc
CC=golang-dev
https://golang.org/cl/1229047
2010-05-20 23:10:51 -07:00
Robert Griesemer
a688eb6ee4 big: potential bug fix, cleanups
- 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
https://golang.org/cl/1258042
2010-05-19 09:36:50 -07:00
Robert Griesemer
90d0c3316c big: bug fix for division
Fixes #784.

R=rsc
CC=golang-dev
https://golang.org/cl/1196043
2010-05-18 16:31:49 -07:00
Robert Griesemer
dbb6232724 big: implemented format support for fmt library, MulRange
- support for binary prefix 0b (to match fmt.Format)
- renamed nat.new -> nat.setUint64 for consistency
- more tests

R=r
CC=golang-dev
https://golang.org/cl/1233041
2010-05-15 10:23:41 -07:00
Robert Griesemer
52cc058172 big: cleanups and performance tuning
- 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
https://golang.org/cl/1133043
2010-05-08 13:52:36 -07:00
Robert Griesemer
61eb0e71f2 big: more cleanup
- pass []Word instead of *Word to core arithmetic functions
- remove dead code

R=rsc
CC=golang-dev
https://golang.org/cl/1154042
2010-05-07 18:26:31 -07:00
Robert Griesemer
6d7583d5fd fix build (typo in arith_386.s)
R=rsc
CC=golang-dev
https://golang.org/cl/1139042
2010-05-06 19:16:26 -07:00
Robert Griesemer
3f287b5002 big: implemented overlap-tolerant shifts in assembly
- 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
https://golang.org/cl/1149041
2010-05-06 18:20:01 -07:00
Robert Griesemer
b9caa4ac56 big: completed set of Int division routines & cleanups
- 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
https://golang.org/cl/1091041
2010-05-03 18:48:05 -07:00
Russ Cox
9995dec9da big: fix memory corruption in nat.shr
R=gri
CC=golang-dev
https://golang.org/cl/1084041
2010-05-03 14:28:45 -07:00
Evan Shaw
4d1b1574af big: Add bitwise methods for Int
R=gri
CC=golang-dev
https://golang.org/cl/987041
2010-05-03 11:20:52 -07:00
Robert Griesemer
26078c395a big: cleanup and removal of redundant functionality
R=rsc
CC=golang-dev
https://golang.org/cl/1048041
2010-05-01 15:11:27 -07:00
Robert Griesemer
58e77990ba big: use fast shift routines
- 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
https://golang.org/cl/963044
2010-04-30 21:25:48 -07:00
Robert Griesemer
161b44c76a big/arith: assembly routines for 386 long shifts (2nd round)
R=rsc
CC=golang-dev
https://golang.org/cl/986044
2010-04-30 14:41:04 -07:00
Robert Griesemer
ac1d46a22a fix build
R=rsc
CC=golang-dev
https://golang.org/cl/1044041
2010-04-30 12:01:15 -07:00
Robert Griesemer
407dbb42d4 big: improved computation of "karatsuba length" for faster multiplies
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
https://golang.org/cl/1037041
2010-04-30 11:54:27 -07:00
Robert Griesemer
f78b09e673 big: assembly routines for 386 long shifts
R=rsc
CC=golang-dev
https://golang.org/cl/974043
2010-04-30 11:53:37 -07:00
Robert Griesemer
2b0a30c4b5 big: implemented core shift routines in arith.go and
provide assembly versions (for x86-64 for now)

(Not yet used - waiting for previous CL to clear)

R=rsc
CC=golang-dev
https://golang.org/cl/1040041
2010-04-30 09:29:11 -07:00
Robert Griesemer
b2183701c0 big: implemented Karatsuba multiplication
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
https://golang.org/cl/1004042
2010-04-27 19:16:08 -07:00
Evan Shaw
841a32dd5e big: Create type nat
Changed most of the functions in nat.go to methods on nat.

R=gri
CC=golang-dev
https://golang.org/cl/976041
2010-04-22 16:57:29 -07:00
Evan Shaw
455e799f6d big: Add some tests
R=rsc, gri
CC=golang-dev
https://golang.org/cl/967041
2010-04-21 17:12:36 -07:00
Russ Cox
1b70b61411 big: fix build - start with zero in scanN
R=gri, eds
CC=golang-dev
https://golang.org/cl/947042
2010-04-20 22:51:48 -07:00
Evan Shaw
e4136fe91c big: eliminate redundant array lookups
This gives about a 6% performance improvement to pidigits.
Thanks to Russ for the suggestion.

R=rsc, gri
CC=golang-dev
https://golang.org/cl/957041
2010-04-20 21:41:58 -07:00
Evan Shaw
4f445d2744 big: reduce the number of allocations
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
https://golang.org/cl/953042
2010-04-20 21:24:07 -07:00
Evan Shaw
76cbbc8a95 big: Add Lsh and Value; convert pidigits to use big
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
https://golang.org/cl/881050
2010-04-20 20:39:36 -07:00
Evan Shaw
73374c93a6 big: Get rid of function pointers and init function
R=rsc, gri
CC=golang-dev
https://golang.org/cl/929041
2010-04-19 19:07:22 -07:00
Andrew Gerrand
9ba5ec53ad comment typos
Fixes #698.
Fixes #699.

R=rsc
CC=golang-dev
https://golang.org/cl/824041
2010-03-29 16:31:41 +11:00
Adam Langley
308064fc59 big: fix mistakes with probablyPrime
probablyPrime would return false negatives in some cases.

This code has now been tested against GMP for several million iterations without issues.

Fixes #638.

R=rsc
CC=golang-dev
https://golang.org/cl/252041
2010-03-05 15:55:26 -05:00
Robert Griesemer
f44fa9b4c7 gofmt: experiment: align values in map composites where possible
- gofmt -w src misc
- looking for feedback

R=rsc, r
CC=golang-dev
https://golang.org/cl/223076
2010-03-02 13:46:51 -08:00
Russ Cox
718be3215f in C and asm, replace pkg·name with ·name
(eliminate assumption of package global name space,
make code easier to move between packages).

R=r
CC=golang-dev
https://golang.org/cl/194072
2010-01-25 18:52:55 -08:00
Russ Cox
cfbee34a27 big: fix ProbablyPrime bug, comments
(changes adopted from alc, agl)

R=agl1, agl
CC=golang-dev
https://golang.org/cl/181137
2010-01-05 16:49:05 -08:00
Robert Griesemer
5a1d3323fe 1) Change default gofmt default settings for
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
https://golang.org/cl/180047
2009-12-15 15:33:31 -08:00
Robert Griesemer
295ceb4526 remove uses of string concatenation from src and misc directory
R=rsc
https://golang.org/cl/172041
2009-12-09 16:54:07 -08:00
Sergio Luis O. B. Correia
6fc820729e go: makes it build for the case $GOROOT has whitespaces
the bash scripts and makefiles for building go didn't take into account
the fact $GOROOT / $GOBIN could both be directories containing whitespaces,
and was not possible to build it in such a situation.

this commit adjusts the various makefiles/scripts to make it aware of that
possibility, and now it builds successfully when using a path with whitespaces
as well.

Fixes #115.

R=rsc, dsymonds1
https://golang.org/cl/157067
2009-11-23 17:32:51 -08:00
Russ Cox
9ac4449cb2 gofmt -r 'α[β:len(α)] -> α[β:]' -w src/cmd src/pkg
R=r, gri
CC=golang-dev
https://golang.org/cl/156115
2009-11-20 11:45:05 -08:00
Russ Cox
ec30932124 big: fix arm build - forgot how to spell JMP
Fixes #269.

TBR=kaib
https://golang.org/cl/156107
2009-11-19 20:32:09 -08:00
Adam Langley
bf1f63a273 big: fix large division.
I missed a case.

R=rsc, agl
CC=golang-dev
https://golang.org/cl/156092
2009-11-18 19:26:12 -08:00
Russ Cox
a274099340 big: implement 386 assembly routines
7x speedup on big and crypto/rsa unit tests.
also dropped useAsm in favor of making the
asm stubs jump to the Go versions.

R=agl1
CC=golang-dev, gri
https://golang.org/cl/157062
2009-11-18 09:54:51 -08:00
Adam Langley
1941855730 Reland a112249da741, this time with missing file. 2009-11-11 13:21:37 -08:00
Russ Cox
ed86d0e70a roll back 3985: build is broken
TBR=agl1
CC=golang-dev
https://golang.org/cl/154065
2009-11-11 12:54:52 -08:00
Adam Langley
af1fa43a81 big:
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
2009-11-11 12:34:46 -08:00