btcsuite / btcutil

Provides bitcoin-specific convenience functions and types
477 stars 410 forks source link

gcs/gcs: use sort.Slice instead of sort.Sort, remove uint64Slice #140

Closed cfromknecht closed 5 years ago

cfromknecht commented 5 years ago

This commit removes the uint64Slice type and performs sorting during filter construction and ZipMatchAny using sort.Slice. The benchmarks indicated that this speeds up BuildGCSFilter and ZipMatchAny by 10-12%, likely to the overhead of needing to resolve the sort.Interface methods.

The benchmarks indicate that this improvement is not present for the smallest query size in our benchmarks, i.e. 100 elements, but the reduction is only about 3%. This would indicate the at these small values, the use of reflection is actually slightly slower than interface method resolution in total.

BuildGCSFilter

Before:

BenchmarkGCSFilterBuild50000-8               100          11943821 ns/op         1062984 B/op         29 allocs/op                   
BenchmarkGCSFilterBuild100000-8               50          23676670 ns/op         2218056 B/op         32 allocs/op 

After:

BenchmarkGCSFilterBuild50000-8               100          10685083 ns/op         1063016 B/op         30 allocs/op                   
BenchmarkGCSFilterBuild100000-8               50          21461074 ns/op         2218088 B/op         33 allocs/op 

ZipMatchAny

Before:

BenchmarkGCSFilterZipMatchAny/q100-f1K-8                   30000             48246 ns/op            3616 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1K-f1K-8                    10000            191598 ns/op           10912 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10K-f1K-8                    1000           1769106 ns/op           84640 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q100K-f1K-8                    100          19739071 ns/op          805536 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1M-f1K-8                        5         228651911 ns/op         8006304 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10M-f1K-8                       1        2577334082 ns/op        80005792 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q100-f5K-8                   10000            203600 ns/op           14496 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1K-f5K-8                     5000            352488 ns/op           21792 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10K-f5K-8                    1000           1960853 ns/op           95520 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q100K-f5K-8                    100          20253092 ns/op          816416 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1M-f5K-8                        5         236500378 ns/op         8017184 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10M-f5K-8                       1        2540748808 ns/op        80016672 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q100-f10K-8                   3000            398091 ns/op           28192 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1K-f10K-8                    3000            536861 ns/op           35488 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10K-f10K-8                   1000           2157720 ns/op          109216 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q100K-f10K-8                   100          20225096 ns/op          830112 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1M-f10K-8                       5         235499006 ns/op         8030880 B/op          3 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10M-f10K-8                      1        2604567284 ns/op        80030368 B/op          3 allocs/op  

After:

BenchmarkGCSFilterZipMatchAny/q100-f1K-8                   30000             49704 ns/op            3648 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1K-f1K-8                    10000            177145 ns/op           10944 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10K-f1K-8                    1000           1546793 ns/op           84672 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q100K-f1K-8                    100          17580089 ns/op          805568 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1M-f1K-8                        5         201943739 ns/op         8006336 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10M-f1K-8                       1        2290204909 ns/op        80005824 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q100-f5K-8                   10000            207921 ns/op           14528 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1K-f5K-8                     5000            354693 ns/op           21824 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10K-f5K-8                    1000           1802161 ns/op           95552 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q100K-f5K-8                    100          18506239 ns/op          816448 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1M-f5K-8                        5         214090326 ns/op         8017216 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10M-f5K-8                       1        2584704822 ns/op        80016704 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q100-f10K-8                   3000            468296 ns/op           28224 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1K-f10K-8                    2000            598390 ns/op           35520 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10K-f10K-8                   1000           2212426 ns/op          109248 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q100K-f10K-8                   100          19784148 ns/op          830144 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q1M-f10K-8                       5         209131790 ns/op         8030912 B/op          4 allocs/op   
BenchmarkGCSFilterZipMatchAny/q10M-f10K-8                      1        2458558724 ns/op        80030400 B/op          4 allocs/op