mirror of
https://github.com/samber/lo.git
synced 2026-04-22 23:47:11 +08:00
ac8295b68a
* style(simd): rename sse to avx * fix(exp,simd): apply the right avx512 constraints to a few methods * fix(exp,simd): apply the right avx512 constraints to a few methods
1.6 KiB
1.6 KiB
SIMD experiment (Go 1.26+)
This package requires Go 1.26 with GOEXPERIMENT=simd and amd64.
See benchmarks.
CPU compatibility (avoiding SIGILL)
If you see SIGILL: illegal instruction when running tests, the CPU or VM does not support the SIMD instructions used by that code.
Check support on Linux
# List SIMD-related flags
grep -E 'avx' /proc/cpuinfo
# Or with lscpu
lscpu | grep -i avx
Rough mapping:
| Tests / code | Required flag(s) | Typical CPUs |
|---|---|---|
| AVX (128-bit) | avx (baseline on amd64) |
All amd64 |
| AVX2 (256-bit) | avx2 |
Intel Haswell+, AMD Excavator+ |
| AVX-512 (512-bit) | avx512f |
Intel Skylake-X+, some Xeons; many AMD/consumer CPUs do not have it |
What the tests do
- AVX tests (128-bit) call
requireAVX(t)and are skipped if the CPU does not support AVX. - AVX2 tests call
requireAVX2(t)and are skipped if the CPU does not support AVX2 (no SIGILL). - AVX-512 tests (when enabled) should call
requireAVX512(t)and skip when AVX-512 is not available.
So on a machine without AVX2, AVX2 tests will show as skipped instead of crashing.
Run only AVX tests
If your environment does not support AVX2/AVX-512, you can still run the AVX (128-bit) tests:
GOEXPERIMENT=simd go test -run AVX ./...