You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by "fallintoplace (via GitHub)" <gi...@apache.org> on 2026/09/03 21:41:41 UTC
[PR] perf(compute): add ARM64 NEON compression for null-free 32-bit fixed-width filters [arrow-go]
fallintoplace opened a new pull request, #1286:
URL: https://github.com/apache/arrow-go/pull/1286
## Summary
* **Add an ARM64 NEON path** for null-free 32-bit fixed-width filters.
* **Compact two groups of four values** with table-driven `VTBL`.
* **Use exact-size stores** for the selected values.
* Keep the current fallbacks for nulls, short or unaligned inputs, dense masks, unsupported CPUs, and `noasm` builds.
## Benchmark
Hardware: Apple M1 Pro, macOS arm64, Go 1.26.3.
Command: `go test ./arrow/compute -run '^$' -bench '^BenchmarkFilter(Int32|Float32)MixedMasks$' -benchtime=100ms -count=3 -benchmem`
The baseline used the same command with `GODEBUG=cpu.all=off`, which forces the existing scalar path. Values are median ns/op from three runs. Pattern order is `alternating / random25 / random50 / random75 / clustered50 / all-selected / none-selected`.
| Type | Rows | Baseline ns/op | NEON ns/op | Speedup |
| --- | ---: | --- | --- | --- |
| int32 | 1K | 9002 / 6043 / 7167 / 6126 / 4336 / 4603 / 3376 | 4398 / 4345 / 4617 / 4679 / 4548 / 4812 / 3432 | 2.05x / 1.39x / 1.55x / 1.31x / 0.95x / 0.96x / 0.98x |
| int32 | 64K | 274954 / 145437 / 226114 / 192618 / 36169 / 45217 / 6176 | 37957 / 69222 / 90711 / 71447 / 35481 / 46478 / 6306 | 7.24x / 2.10x / 2.49x / 2.70x / 1.02x / 0.97x / 0.98x |
| int32 | 1M | 4016235 / 2118964 / 3441839 / 2839365 / 300915 / 232850 / 48657 | 340022 / 1273778 / 1530240 / 1312927 / 291230 / 235818 / 48973 | 11.81x / 1.66x / 2.25x / 2.16x / 1.03x / 0.99x / 0.99x |
| float32 | 1K | 8875 / 5979 / 7188 / 6157 / 4455 / 4647 / 3373 | 4428 / 4286 / 4579 / 4686 / 4441 / 4844 / 3418 | 2.00x / 1.40x / 1.57x / 1.31x / 1.00x / 0.96x / 0.99x |
| float32 | 64K | 267098 / 145365 / 226897 / 193153 / 35817 / 44286 / 6171 | 37340 / 71035 / 93770 / 73563 / 36372 / 44714 / 6239 | 7.15x / 2.05x / 2.42x / 2.63x / 0.98x / 0.99x / 0.99x |
| float32 | 1M | 4061853 / 2116060 / 3435942 / 2850531 / 304719 / 272701 / 48689 | 344281 / 1268462 / 1516895 / 1300810 / 293596 / 233508 / 49292 | 11.80x / 1.67x / 2.27x / 2.19x / 1.04x / 1.17x / 0.99x |
Fallback controls stayed on the existing path:
| Control | Baseline ns/op | NEON build ns/op |
| --- | ---: | ---: |
| unaligned filter offset 3 | 280053 | 271730 |
| short input, 56 rows | 4436 | 4392 |
| non-multiple length, 65537 rows | 272665 | 268016 |
## Tests
* `go test ./arrow/compute/... -count=1`
* `go test -race ./arrow/compute/internal/kernels ./arrow/compute -count=1`
* `go test -tags noasm ./arrow/compute/internal/kernels ./arrow/compute -count=1`
* `GOARCH=amd64 go test -c -o /dev/null ./arrow/compute/internal/kernels`
* `GOARCH=amd64 go test -c -o /dev/null ./arrow/compute`
## Limitations
* This is limited to ARM64 ASIMD, 32-bit fixed-width values, no value nulls, no filter nulls, aligned filter bitmap offsets, and lengths divisible by 8.
* All other cases keep using the existing general or specialized paths.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] perf(compute): add ARM64 NEON compression for null-free 32-bit fixed-width filters [arrow-go]
Posted by "zeroshade (via GitHub)" <gi...@apache.org>.
zeroshade merged PR #1286:
URL: https://github.com/apache/arrow-go/pull/1286
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org