SIMD substring in a string
Denis Yaroshevskiy
Interview problem
- nested loops
- find + equal
substring in a string (interview)
performance expectations
- first char is rare: 22 in 1111...s
- first char is common: 12 in 1111...s
- very long needle
C++ standard
- string/string_view::find
- std::search
- std::strstr
- regex
- searchers
Notes
- std::mismatch - Nikolas Klauser
Vector Processor Extensions
- x86
- 128 bits: SSE2, SSE3, SSSE3, SSE4, SSE4.1, SSE4.2
- 256 bits: AVX, AVX2, XOP
- 512 bits: AVX512 and its myriad of sub-genre
- ARM
- 128 bits: NEON, ASIMD
- SVE (VLS/VLA)
- RVV
- PowerPC
- WASM
Unrolling: Notes
- less instructions
- perf stat
- Duff's device
Improvements
- unrolled pre-check
- inline needle validation
Thanks
- Joel Falcou
- Ilya Albrecht
- Amazing people publishing their results