github.com/segmentio/parquet-go@v0.0.0-20230712180008-5d42db8f0d47/bloom/block_amd64.go (about) 1 //go:build !purego 2 3 package bloom 4 5 import "golang.org/x/sys/cpu" 6 7 // The functions in this file are SIMD-optimized versions of the functions 8 // declared in block_optimized.go for x86 targets. 9 // 10 // The optimization yields measurable improvements over the pure Go versions: 11 // 12 // goos: darwin 13 // goarch: amd64 14 // pkg: github.com/segmentio/parquet-go/bloom 15 // cpu: Intel(R) Core(TM) i9-8950HK CPU @ 2.90GHz 16 // 17 // name old time/op new time/op delta 18 // BlockInsert 11.6ns ± 4% 2.0ns ± 3% -82.37% (p=0.000 n=8+8) 19 // BlockCheck 12.6ns ±28% 2.1ns ± 4% -83.12% (p=0.000 n=10+8) 20 // 21 // name old speed new speed delta 22 // BlockInsert 2.73GB/s ±13% 15.70GB/s ± 3% +475.96% (p=0.000 n=9+8) 23 // BlockCheck 2.59GB/s ±23% 15.06GB/s ± 4% +482.25% (p=0.000 n=10+8) 24 // 25 // Note that the numbers above are a comparison to the routines implemented in 26 // block_optimized.go; the delta comparing to functions in block_default.go is 27 // significantly larger but not very interesting since those functions have no 28 // practical use cases. 29 var hasAVX2 = cpu.X86.HasAVX2 30 31 //go:noescape 32 func blockInsert(b *Block, x uint32) 33 34 //go:noescape 35 func blockCheck(b *Block, x uint32) bool 36 37 func (b *Block) Insert(x uint32) { blockInsert(b, x) } 38 39 func (b *Block) Check(x uint32) bool { return blockCheck(b, x) }