github.com/parquet-go/parquet-go@v0.21.1-0.20240501160520-b3c3a0c3ed6f/internal/bytealg/count_amd64.go (about) 1 //go:build !purego 2 3 package bytealg 4 5 // This function is similar to using the standard bytes.Count function with a 6 // one-byte separator. However, the implementation makes use of AVX-512 when 7 // possible, which yields measurable throughput improvements: 8 // 9 // name old time/op new time/op delta 10 // CountByte 82.5ns ± 0% 43.9ns ± 0% -46.74% (p=0.000 n=10+10) 11 // 12 // name old speed new speed delta 13 // CountByte 49.6GB/s ± 0% 93.2GB/s ± 0% +87.74% (p=0.000 n=10+10) 14 // 15 // On systems that do not have AVX-512, the AVX2 version of the code is also 16 // optimized to make use of multiple register lanes, which gives a bit better 17 // throughput than the standard library function: 18 // 19 // name old time/op new time/op delta 20 // CountByte 82.5ns ± 0% 61.0ns ± 0% -26.04% (p=0.000 n=10+10) 21 // 22 // name old speed new speed delta 23 // CountByte 49.6GB/s ± 0% 67.1GB/s ± 0% +35.21% (p=0.000 n=10+10) 24 // 25 //go:noescape 26 func Count(data []byte, value byte) int