mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-23 20:37:12 +01:00
lib/uint64set: add benchmark for Set.Intersect
This commit is contained in:
parent
9ef4d32a9a
commit
8dbf430469
@ -8,6 +8,36 @@ import (
|
|||||||
"github.com/valyala/fastrand"
|
"github.com/valyala/fastrand"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func BenchmarkIntersect(b *testing.B) {
|
||||||
|
const itemsCount = 3e6
|
||||||
|
for _, lastBits := range []uint64{20, 24, 28, 32} {
|
||||||
|
sa := createRandomSet(itemsCount, lastBits)
|
||||||
|
sb := createRandomSet(itemsCount, lastBits)
|
||||||
|
b.Run(fmt.Sprintf("lastBits_%d", lastBits), func(b *testing.B) {
|
||||||
|
b.ReportAllocs()
|
||||||
|
b.SetBytes(int64(sa.Len()+sb.Len()))
|
||||||
|
b.RunParallel(func(pb *testing.PB) {
|
||||||
|
for pb.Next() {
|
||||||
|
saCopy := sa.Clone()
|
||||||
|
saCopy.Intersect(sb)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func createRandomSet(itemsCount int, lastBits uint64) *Set {
|
||||||
|
mask := (uint64(1) << lastBits) - 1
|
||||||
|
start := uint64(time.Now().UnixNano())
|
||||||
|
var s Set
|
||||||
|
var rng fastrand.RNG
|
||||||
|
for i := 0; i < itemsCount; i++ {
|
||||||
|
n := start | uint64(rng.Uint32())&mask
|
||||||
|
s.Add(n)
|
||||||
|
}
|
||||||
|
return &s
|
||||||
|
}
|
||||||
|
|
||||||
func BenchmarkSetAddRandomLastBits(b *testing.B) {
|
func BenchmarkSetAddRandomLastBits(b *testing.B) {
|
||||||
const itemsCount = 1e5
|
const itemsCount = 1e5
|
||||||
for _, lastBits := range []uint64{20, 24, 28, 32} {
|
for _, lastBits := range []uint64{20, 24, 28, 32} {
|
||||||
@ -16,10 +46,10 @@ func BenchmarkSetAddRandomLastBits(b *testing.B) {
|
|||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
b.SetBytes(int64(itemsCount))
|
b.SetBytes(int64(itemsCount))
|
||||||
b.RunParallel(func(pb *testing.PB) {
|
b.RunParallel(func(pb *testing.PB) {
|
||||||
|
var rng fastrand.RNG
|
||||||
for pb.Next() {
|
for pb.Next() {
|
||||||
start := uint64(time.Now().UnixNano())
|
start := uint64(time.Now().UnixNano())
|
||||||
var s Set
|
var s Set
|
||||||
var rng fastrand.RNG
|
|
||||||
for i := 0; i < itemsCount; i++ {
|
for i := 0; i < itemsCount; i++ {
|
||||||
n := start | (uint64(rng.Uint32()) & mask)
|
n := start | (uint64(rng.Uint32()) & mask)
|
||||||
s.Add(n)
|
s.Add(n)
|
||||||
@ -38,10 +68,10 @@ func BenchmarkMapAddRandomLastBits(b *testing.B) {
|
|||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
b.SetBytes(int64(itemsCount))
|
b.SetBytes(int64(itemsCount))
|
||||||
b.RunParallel(func(pb *testing.PB) {
|
b.RunParallel(func(pb *testing.PB) {
|
||||||
|
var rng fastrand.RNG
|
||||||
for pb.Next() {
|
for pb.Next() {
|
||||||
start := uint64(time.Now().UnixNano())
|
start := uint64(time.Now().UnixNano())
|
||||||
m := make(map[uint64]struct{})
|
m := make(map[uint64]struct{})
|
||||||
var rng fastrand.RNG
|
|
||||||
for i := 0; i < itemsCount; i++ {
|
for i := 0; i < itemsCount; i++ {
|
||||||
n := start | (uint64(rng.Uint32()) & mask)
|
n := start | (uint64(rng.Uint32()) & mask)
|
||||||
m[n] = struct{}{}
|
m[n] = struct{}{}
|
||||||
@ -142,15 +172,8 @@ func BenchmarkMapAddReuse(b *testing.B) {
|
|||||||
func BenchmarkSetHasHitRandomLastBits(b *testing.B) {
|
func BenchmarkSetHasHitRandomLastBits(b *testing.B) {
|
||||||
const itemsCount = 1e5
|
const itemsCount = 1e5
|
||||||
for _, lastBits := range []uint64{20, 24, 28, 32} {
|
for _, lastBits := range []uint64{20, 24, 28, 32} {
|
||||||
mask := (uint64(1) << lastBits) - 1
|
|
||||||
b.Run(fmt.Sprintf("lastBits_%d", lastBits), func(b *testing.B) {
|
b.Run(fmt.Sprintf("lastBits_%d", lastBits), func(b *testing.B) {
|
||||||
start := uint64(time.Now().UnixNano())
|
s := createRandomSet(itemsCount, lastBits)
|
||||||
var s Set
|
|
||||||
var rng fastrand.RNG
|
|
||||||
for i := 0; i < itemsCount; i++ {
|
|
||||||
n := start | (uint64(rng.Uint32()) & mask)
|
|
||||||
s.Add(n)
|
|
||||||
}
|
|
||||||
a := s.AppendTo(nil)
|
a := s.AppendTo(nil)
|
||||||
|
|
||||||
b.ResetTimer()
|
b.ResetTimer()
|
||||||
|
Loading…
Reference in New Issue
Block a user