Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Across all benchmarks, pdqsort is never significantly slower than the previous algorithm. - In common patterns, pdqsort is often faster (i.e. 10x faster in sorted slices). The pdqsort is described at https://arxiv.org/pdf/2106.05123.pdf This CL is inspired by both C++ implementation and Rust implementation. - C++ implementation: https://github.com/orlp/pdqsort - Rust implementation: https://docs.rs/pdqsort/latest/pdqsort/ For #50154 name old time/op new time/op delta SearchWrappers-16 72.8ns Β± 3% 75.1ns Β± 2% +3.25% (p=0.000 n=20+10) SortString1K-16 85.2Β΅s Β± 3% 86.2Β΅s Β± 5% ~ (p=0.247 n=19+10) SortString1K_Slice-16 84.6Β΅s Β± 4% 86.1Β΅s Β± 4% ~ (p=0.120 n=20+10) StableString1K-16 112Β΅s Β± 5% 112Β΅s Β± 5% ~ (p=0.604 n=19+10) SortInt1K-16 44.8Β΅s Β± 3% 43.2Β΅s Β± 2% -3.68% (p=0.000 n=20+10) SortInt1K_Sorted-16 28.2Β΅s Β± 3% 3.3Β΅s Β± 3% -88.16% (p=0.000 n=19+10) SortInt1K_Reversed-16 29.4Β΅s Β± 3% 4.8Β΅s Β± 2% -83.59% (p=0.000 n=20+10) SortInt1K_Mod8-16 25.1Β΅s Β± 2% 20.0Β΅s Β± 2% -20.35% (p=0.000 n=18+10) StableInt1K-16 51.3Β΅s Β± 3% 50.9Β΅s Β± 2% ~ (p=0.562 n=20+9) StableInt1K_Slice-16 49.5Β΅s Β± 2% 50.7Β΅s Β± 4% +2.55% (p=0.009 n=19+10) SortInt64K-16 4.73ms Β± 3% 4.49ms Β± 4% -5.08% (p=0.000 n=20+10) SortInt64K_Slice-16 4.51ms Β± 3% 4.35ms Β± 1% -3.42% (p=0.000 n=20+8) StableInt64K-16 4.85ms Β± 2% 4.82ms Β± 2% ~ (p=0.267 n=20+10) Sort1e2-16 27.9Β΅s Β± 1% 28.1Β΅s Β± 2% ~ (p=0.198 n=20+10) Stable1e2-16 56.6Β΅s Β± 2% 55.0Β΅s Β± 2% -2.88% (p=0.000 n=20+10) Sort1e4-16 5.51ms Β± 1% 5.36ms Β± 1% -2.58% (p=0.000 n=19+9) Stable1e4-16 17.8ms Β± 1% 17.3ms Β± 1% -2.40% (p=0.000 n=20+10) Sort1e6-16 833ms Β± 1% 807ms Β± 1% -3.02% (p=0.000 n=20+10) Stable1e6-16 3.49s Β± 2% 3.44s Β± 1% -1.41% (p=0.001 n=20+10) Change-Id: Iecded047d237b9330b5a4101001a5fdc2f50646a Reviewed-on: https://go-review.googlesource.com/c/go/+/371574 Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com> Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Eli Bendersky <eliben@google.com>
- Loading branch information
72e77a7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this is so cool!
72e77a7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
power of open source! one person finds a performance improvement, the gain is trickled into all the systems across.. making whole humanity efficient.
72e77a7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://github.com/scandum/crumsort
claiming better performance than pdqsort.
72e77a7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Go's previous implementation of quickSort used ShellSort on short ranges, but pdqsort only uses plain insertion sort.
Isn't ShellSort better?
https://cs.opensource.google/go/go/+/refs/tags/go1.18.1:src/sort/sort.go;l=215
72e77a7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
all Benchmark is StopTimer() in the begin why not ResetTimer()
72e77a7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We don't use GitHub for code review. Very few people will see comments made on this pull request. If you want to make comments on this change, please comment on https://go.dev/cl/371574. Thanks.