v0.1.15
NexusFIX v0.1.15
Portable SIMD via xsimd Abstraction Layer
Highlights
- xsimd 13.2.0 replaces raw
<immintrin.h>intrinsics across all SIMD code paths - Zero performance regression - all deltas within +/- 3% measurement noise
- ARM NEON ready - arch-templated functions compile for any xsimd-supported architecture
Performance
Structural Index (ExecutionReport, 169 bytes)
| Metric | Before (raw intrinsics) | After (xsimd) | Delta |
|---|---|---|---|
| P50 | 46.82 ns | 45.65 ns | -2.5% |
| P99 | 60.86 ns | 59.69 ns | -1.9% |
Checksum AVX2
| Size | Before | After | Delta |
|---|---|---|---|
| 64 B | 7.6 ns | 7.6 ns | 0% |
| 256 B | 10.2 ns | 10.5 ns | +2.9% |
| 1024 B | 14.9 ns | 15.2 ns | +2.0% |
All deltas within measurement noise. Zero regression confirmed.
What's New
- Arch-templated SIMD functions via
xsimd::batch<uint8_t, Arch>detail::scan_soh_xsimd<Arch>()- SOH scanningdetail::find_soh_xsimd<Arch>()/find_equals_xsimd<Arch>()- delimiter searchdetail::count_soh_xsimd<Arch>()- SOH countingdetail::checksum_xsimd<Arch>()- FIX checksum calculationdetail_idx::build_index_xsimd<Arch>()- structural index construction
- Raw intrinsics retained as fallback when
NFX_ENABLE_XSIMD=OFF - CMake option
NFX_ENABLE_XSIMD(default ON) with FetchContent integration
Architecture
Before: scan_soh_avx2() -> raw __m256i intrinsics
After: scan_soh_avx2() -> detail::scan_soh_xsimd<xsimd::avx2>()
Future: scan_soh_neon() -> detail::scan_soh_xsimd<xsimd::neon64>()
Upgrade Notes
No breaking changes. Public API unchanged. Internal implementation swapped to xsimd when available, falls back to raw intrinsics otherwise.
Full Changelog: v0.1.14...v0.1.15