Russ Cox
d6b3f37e1e
bytes: asm for bytes.IndexByte
...
PERFORMANCE DIFFERENCE
SUMMARY
amd64 386
2.2 GHz AMD Opteron 8214 HE (Linux) 3.0x faster 8.2x faster
3.60 GHz Intel Xeon (Linux) 2.2x faster 6.2x faster
2.53 GHz Intel Core2 Duo E7200 (Linux) 1.5x faster 4.4x faster
2.66 Ghz Intel Xeon 5150 (Mac Pro, OS X) 1.5x SLOWER 3.0x faster
2.33 GHz Intel Xeon E5435 (Linux) 1.5x SLOWER 3.0x faster
2.33 GHz Intel Core2 T7600 (MacBook Pro, OS X) 1.4x SLOWER 3.0x faster
1.83 GHz Intel Core2 T5600 (Mac Mini, OS X) none* 3.0x faster
* but yesterday I consistently saw 1.4x SLOWER.
DETAILS
2.2 GHz AMD Opteron 8214 HE (Linux)
amd64 (3x faster)
IndexByte4K 500000 3733 ns/op 1097.24 MB/s
IndexByte4M 500 4328042 ns/op 969.10 MB/s
IndexByte64M 50 67866160 ns/op 988.84 MB/s
IndexBytePortable4K 200000 11161 ns/op 366.99 MB/s
IndexBytePortable4M 100 11795880 ns/op 355.57 MB/s
IndexBytePortable64M 10 188675000 ns/op 355.68 MB/s
386 (8.2x faster)
IndexByte4K 500000 3734 ns/op 1096.95 MB/s
IndexByte4M 500 4209954 ns/op 996.28 MB/s
IndexByte64M 50 68031980 ns/op 986.43 MB/s
IndexBytePortable4K 50000 30670 ns/op 133.55 MB/s
IndexBytePortable4M 50 31868220 ns/op 131.61 MB/s
IndexBytePortable64M 2 508851500 ns/op 131.88 MB/s
3.60 GHz Intel Xeon (Linux)
amd64 (2.2x faster)
IndexByte4K 500000 4612 ns/op 888.12 MB/s
IndexByte4M 500 4835250 ns/op 867.44 MB/s
IndexByte64M 20 77388450 ns/op 867.17 MB/s
IndexBytePortable4K 200000 10306 ns/op 397.44 MB/s
IndexBytePortable4M 100 11201460 ns/op 374.44 MB/s
IndexBytePortable64M 10 179456800 ns/op 373.96 MB/s
386 (6.3x faster)
IndexByte4K 500000 4631 ns/op 884.47 MB/s
IndexByte4M 500 4846388 ns/op 865.45 MB/s
IndexByte64M 20 78691200 ns/op 852.81 MB/s
IndexBytePortable4K 100000 28989 ns/op 141.29 MB/s
IndexBytePortable4M 50 31183180 ns/op 134.51 MB/s
IndexBytePortable64M 5 498347200 ns/op 134.66 MB/s
2.53 GHz Intel Core2 Duo E7200 (Linux)
amd64 (1.5x faster)
IndexByte4K 500000 6502 ns/op 629.96 MB/s
IndexByte4M 500 6692208 ns/op 626.74 MB/s
IndexByte64M 10 107410400 ns/op 624.79 MB/s
IndexBytePortable4K 200000 9721 ns/op 421.36 MB/s
IndexBytePortable4M 100 10013680 ns/op 418.86 MB/s
IndexBytePortable64M 10 160460800 ns/op 418.23 MB/s
386 (4.4x faster)
IndexByte4K 500000 6505 ns/op 629.67 MB/s
IndexByte4M 500 6694078 ns/op 626.57 MB/s
IndexByte64M 10 107397600 ns/op 624.86 MB/s
IndexBytePortable4K 100000 28835 ns/op 142.05 MB/s
IndexBytePortable4M 50 29562680 ns/op 141.88 MB/s
IndexBytePortable64M 5 473221400 ns/op 141.81 MB/s
2.66 Ghz Intel Xeon 5150 (Mac Pro, OS X)
amd64 (1.5x SLOWER)
IndexByte4K 200000 9290 ns/op 440.90 MB/s
IndexByte4M 200 9568925 ns/op 438.33 MB/s
IndexByte64M 10 154473600 ns/op 434.44 MB/s
IndexBytePortable4K 500000 6202 ns/op 660.43 MB/s
IndexBytePortable4M 500 6583614 ns/op 637.08 MB/s
IndexBytePortable64M 20 107166250 ns/op 626.21 MB/s
386 (3x faster)
IndexByte4K 200000 9301 ns/op 440.38 MB/s
IndexByte4M 200 9568025 ns/op 438.37 MB/s
IndexByte64M 10 154391000 ns/op 434.67 MB/s
IndexBytePortable4K 100000 27526 ns/op 148.80 MB/s
IndexBytePortable4M 100 28302490 ns/op 148.20 MB/s
IndexBytePortable64M 5 454170200 ns/op 147.76 MB/s
2.33 GHz Intel Xeon E5435 (Linux)
amd64 (1.5x SLOWER)
IndexByte4K 200000 10601 ns/op 386.38 MB/s
IndexByte4M 100 10827240 ns/op 387.38 MB/s
IndexByte64M 10 173175500 ns/op 387.52 MB/s
IndexBytePortable4K 500000 7082 ns/op 578.37 MB/s
IndexBytePortable4M 500 7391792 ns/op 567.43 MB/s
IndexBytePortable64M 20 122618550 ns/op 547.30 MB/s
386 (3x faster)
IndexByte4K 200000 11074 ns/op 369.88 MB/s
IndexByte4M 100 10902620 ns/op 384.71 MB/s
IndexByte64M 10 181292800 ns/op 370.17 MB/s
IndexBytePortable4K 50000 31725 ns/op 129.11 MB/s
IndexBytePortable4M 50 32564880 ns/op 128.80 MB/s
IndexBytePortable64M 2 545926000 ns/op 122.93 MB/s
2.33 GHz Intel Core2 T7600 (MacBook Pro, OS X)
amd64 (1.4x SLOWER)
IndexByte4K 200000 11120 ns/op 368.35 MB/s
IndexByte4M 100 11531950 ns/op 363.71 MB/s
IndexByte64M 10 184819000 ns/op 363.11 MB/s
IndexBytePortable4K 500000 7419 ns/op 552.10 MB/s
IndexBytePortable4M 200 8018710 ns/op 523.06 MB/s
IndexBytePortable64M 10 127614900 ns/op 525.87 MB/s
386 (3x faster)
IndexByte4K 200000 11114 ns/op 368.54 MB/s
IndexByte4M 100 11443530 ns/op 366.52 MB/s
IndexByte64M 10 185212000 ns/op 362.34 MB/s
IndexBytePortable4K 50000 32891 ns/op 124.53 MB/s
IndexBytePortable4M 50 33930580 ns/op 123.61 MB/s
IndexBytePortable64M 2 545400500 ns/op 123.05 MB/s
1.83 GHz Intel Core2 T5600 (Mac Mini, OS X)
amd64 (no difference)
IndexByte4K 200000 13497 ns/op 303.47 MB/s
IndexByte4M 100 13890650 ns/op 301.95 MB/s
IndexByte64M 5 222358000 ns/op 301.81 MB/s
IndexBytePortable4K 200000 13584 ns/op 301.53 MB/s
IndexBytePortable4M 100 13913280 ns/op 301.46 MB/s
IndexBytePortable64M 10 222572600 ns/op 301.51 MB/s
386 (3x faster)
IndexByte4K 200000 13565 ns/op 301.95 MB/s
IndexByte4M 100 13882640 ns/op 302.13 MB/s
IndexByte64M 5 221411600 ns/op 303.10 MB/s
IndexBytePortable4K 50000 39978 ns/op 102.46 MB/s
IndexBytePortable4M 50 41038160 ns/op 102.20 MB/s
IndexBytePortable64M 2 656362500 ns/op 102.24 MB/s
R=r
CC=golang-dev
https://golang.org/cl/166055
2009-12-04 10:23:43 -08:00
Rob Pike
4ed57173b4
avoid an allocation inside bytes.Buffer by providing a static array.
...
R=rsc
https://golang.org/cl/165058
2009-12-04 00:26:08 -08:00
Rob Pike
bc3e34759c
Add ReadFrom and WriteTo methods to bytes.Buffer, to enable i/o without buffer allocation.
...
Use them in Copy and Copyn.
Speed up ReadFile by using ReadFrom and avoiding Copy altogether (a minor win).
R=rsc, gri
CC=golang-dev
https://golang.org/cl/166041
2009-12-03 12:56:16 -08:00
Peter Froehlich
1eba218e44
Runes: turn string into []int
...
Split: fixed typo in documentation
R=rsc, r, r1
https://golang.org/cl/157170
2009-12-02 20:47:38 -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
Rob Pike
8c1a627e5c
add bytes.IndexByte; common case we can make fast later.
...
also pick off the special case in strings.Index. don't want strings.IndexByte
because the call site will very rarely need to allocate and we can handle the
test in the code itself. bytes.IndexByte can avoid a common allocation.
R=rsc
CC=golang-dev
https://golang.org/cl/156091
2009-11-18 19:23:08 -08:00
Rob Pike
e70cedfaec
remove bytes.Copy
...
replace all calls with calls to copy
use copy in regexp and bytes.Buffer
R=rsc
CC=golang-dev
https://golang.org/cl/157073
2009-11-18 15:24:24 -08:00
David G. Andersen
37f71e8ad6
An asked-for-in #go-nuts extension to quickly create a repeated
...
copy of a string or a byte array.
strings.Repeat("-", 50)
bytes.Repeat(b, 99)
R=rsc
https://golang.org/cl/155063
2009-11-16 12:40:01 -08:00
Rob Pike
27779dd6cb
fix bug in bytes.Map and add test cases for Map in both strings and bytes packages.
...
thanks to ulrik.sverdrup for the test case.
Fixes #191 .
R=rsc
CC=golang-dev
https://golang.org/cl/155056
2009-11-15 12:07:27 -08:00
Robert Griesemer
b27f05f63b
minor adjustments to package comments for better synopsis.
...
R=rsc
CC=r
http://go/go-review/1026038
2009-11-10 10:55:53 -08:00
Robert Griesemer
1698934194
- replaced gofmt expression formatting algorithm with
...
rsc's algorithm
- applied gofmt -w misc src
- partial CL (remaining files in other CLs)
R=rsc, r
http://go/go-review/1024040
2009-11-09 21:09:34 -08:00
Robert Griesemer
40621d5c0d
remove semis after statements in one-statement statement lists
...
R=rsc, r
http://go/go-review/1025029
2009-11-09 12:07:39 -08:00
Robert Griesemer
368f8cbc75
- fine-tuning of one-line func heuristic (nodes.go)
...
- 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
2009-11-06 14:24:38 -08:00
Robert Griesemer
688a6ff71d
gofmt-ify bytes
...
R=r
http://go/go-review/1016044
2009-11-04 16:49:28 -08:00
Russ Cox
5d436b9def
bytes.SplitAfter and strings.SplitAfter
...
most common usage is:
lines := strings.SplitAfter(text, "\n", 0)
R=r
http://go/go-review/1018042
2009-11-04 15:19:30 -08:00
Rob Pike
63e668d2ad
return "<nil>" when calling String() on a nil bytes.Buffer.
...
R=rsc
CC=go-dev
http://go/go-review/1016005
2009-10-31 13:28:22 -07:00
Russ Cox
d2829faa7c
files that are okay from the last gofmt round
...
R=gri
http://go/go-review/1015011
2009-10-27 22:47:54 -07:00
Rob Pike
f1b91263d8
fix typo/oversight: s/Title/ToTitle/. the comment was already correct
...
R=rsc
DELTA=1 (0 added, 0 deleted, 1 changed)
OCL=35964
CL=35979
2009-10-21 19:51:05 -07:00
Russ Cox
10c7d19e07
fix comment on strings.LastIndex.
...
add bytes.LastIndex.
add strings.Reader.
R=r
DELTA=59 (56 added, 0 deleted, 3 changed)
OCL=35585
CL=35601
2009-10-12 10:09:35 -07:00
Russ Cox
094f1d5990
more lgtm files from gofmt
...
R=gri
OCL=35485
CL=35488
2009-10-08 15:14:54 -07:00
Russ Cox
650bff6aa9
another round of gofmt applications
...
R=gri
DELTA=900 (106 added, 31 deleted, 763 changed)
OCL=35384
CL=35396
2009-10-06 14:55:39 -07:00
Rob Pike
9e7f3a46d3
restore the old algorithm. the new one is more memory efficient in large cases
...
but too slow across the board.
R=rsc
DELTA=315 (50 added, 219 deleted, 46 changed)
OCL=34868
CL=34902
2009-09-22 14:53:48 -07:00
Rob Pike
6efd7e6b8f
move strings.Buffer into bytes
...
delete strings.Buffer
add a test for a bug not caught before (mustn't install zero-length blocks)
R=rsc
DELTA=987 (289 added, 587 deleted, 111 changed)
OCL=34850
CL=34850
2009-09-21 12:59:14 -07:00
Rob Pike
d5be41fc4e
rename bytes.Buffer.Data() to bytes.Buffer.Bytes()
...
R=rsc
DELTA=152 (6 added, 0 deleted, 146 changed)
OCL=34695
CL=34701
2009-09-16 15:15:00 -07:00
Russ Cox
ca6a0fee1b
more "declared and not used".
...
the last round omitted := range and only
checked 1 out of N vars in a multi-var :=
R=r
OCL=34624
CL=34638
2009-09-15 09:41:59 -07:00
Russ Cox
28eba4877b
fix "declared and not used" errors in non-test code.
...
R=r
DELTA=112 (6 added, 57 deleted, 49 changed)
OCL=34610
CL=34610
2009-09-14 17:20:29 -07:00
Rob Pike
d3013d8aa1
Add and AddByte
...
R=rsc
DELTA=83 (83 added, 0 deleted, 0 changed)
OCL=34584
CL=34584
2009-09-13 21:35:18 -07:00
Rob Pike
2f5e75859b
casing operations for byte arrays
...
R=rsc
DELTA=186 (181 added, 0 deleted, 5 changed)
OCL=34203
CL=34203
2009-09-01 13:46:59 -07:00
Russ Cox
3b864e4195
convert low-level (used by testing) packages to
...
whole-package compilation. new Makefiles,
tests now in separate package
bytes
flag
fmt
io
math
once
os
reflect
strconv
sync
time
utf8
delete import "xxx" in package xxx.
inside package xxx, xxx is not declared
anymore so s/xxx.//g
delete file and package level forward declarations.
note the new internal_test.go and sync
and strconv to provide public access to
internals during testing. the installed version
of the package omits that file and thus does
not open the internals to all clients.
R=r
OCL=33065
CL=33097
2009-08-12 13:18:37 -07:00
Russ Cox
832e72beff
delete io.ByteBuffer
...
R=r
DELTA=25 (0 added, 15 deleted, 10 changed)
OCL=30892
CL=30892
2009-06-29 20:53:05 -07:00
Russ Cox
d3a412a5ab
io.StringBytes -> strings.Bytes
...
io.ByteBuffer -> bytes.Buffer
left io.ByteBuffer stub around for now,
for protocol compiler.
R=r
OCL=30861
CL=30872
2009-06-29 15:24:23 -07:00
David Symonds
30533d607a
Change strings.Split, bytes.Split to take a maximum substring count argument.
...
R=rsc
APPROVED=r
DELTA=131 (39 added, 10 deleted, 82 changed)
OCL=30669
CL=30723
2009-06-24 19:02:29 -07:00
Russ Cox
a1646fd50e
make bytes.Copy both src- and dst- limited
...
and return the number of bytes copied.
R=r
DELTA=18 (6 added, 0 deleted, 12 changed)
OCL=30693
CL=30712
2009-06-24 15:35:35 -07:00
Rob Pike
d90e7cbac6
mv src/lib to src/pkg
...
tests: all.bash passes, gobuild still works, godoc still works.
R=rsc
OCL=30096
CL=30102
2009-06-09 09:53:44 -07:00