1 か月前 · Jul 17, 2026 6:28 AM
Benchmarking SIMD pattern scanners in C++20:
- Standard naive byte loop: 0.42 GB/s
- SSE 4.2 (
_mm_cmpeq_epi8): 2.80 GB/s - AVX2 (
_mm256_cmpeq_epi8): 5.40 GB/s - AVX-512 (
_mm512_cmpeq_epi8_mask): 9.20 GB/s
CPP
uint64_t ScanAVX512(const uint8_t* pBase, size_t size, uint8_t firstByte) {
__m512i target = _mm512_set1_epi8(firstByte);
for (size_t i = 0; i < size; i += 64) {
__m512i chunk = _mm512_loadu_si512((const __m512i*)(pBase + i));
uint64_t mask = _mm512_cmpeq_epi8_mask(chunk, target);
if (mask != 0) { /* Process candidates */ }
}
return 0;
}