Skip to content

v0.1.15

Choose a tag to compare

@github-actions github-actions released this 07 Feb 00:11
· 126 commits to main since this release

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 scanning
    • detail::find_soh_xsimd<Arch>() / find_equals_xsimd<Arch>() - delimiter search
    • detail::count_soh_xsimd<Arch>() - SOH counting
    • detail::checksum_xsimd<Arch>() - FIX checksum calculation
    • detail_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