Skip to content

Add AVX-512 Ice Lake decoder and retarget to .NET 10 - #38

Merged
lemire merged 2 commits into
mainfrom
dotnet10-avx512
Aug 19, 2026
Merged

Add AVX-512 Ice Lake decoder and retarget to .NET 10#38
lemire merged 2 commits into
mainfrom
dotnet10-avx512

Conversation

@lemire

@lemire lemire commented Aug 19, 2026

Copy link
Copy Markdown
Member

Summary

  • Retarget the library, tests, benchmarks, and CI to .NET 10.
  • Add an AVX-512 VBMI / VBMI2 decoder (UTF-8 and UTF-16) ported from simdutf's Ice Lake kernel: 64-byte VPERMI2B lookup, VPCOMPRESSB to strip white space, and a masked 48-byte store.
  • Dispatch is now NEON → AVX-512 VBMI2 → AVX2 → SSSE3 → scalar.
  • Update the README and docs, including new Xeon Gold 6548N numbers.

Benchmarks (big4, Intel Xeon Gold 6548N, 2.8 GHz, .NET 10.0.11)

Enron email corpus (benchmark/data/email), BenchmarkDotNet, one core:

SimdBase64 (GB/s) .NET (GB/s) speed-up
UTF-8 (DecodeFromUtf8) 11.3 4.7 2.4×
UTF-16 (FromBase64String vs Convert.FromBase64String) 2.1 0.71 2.9×

Avx512Vbmi2.IsSupported and Vector512.IsHardwareAccelerated are both true on this machine.

Tests

  • Local Apple Silicon: 80 passed, 125 skipped (x64 kernels).
  • big4: 167 passed, 35 skipped (ARM). The three EnronChoppedUTF8 failures (SSE, AVX2, AVX-512) are a pre-existing 1-byte bytesConsumed disagreement with scalar on a chopped suffix; AVX-512 matches AVX2/SSE.

lemire added 2 commits August 19, 2026 12:13
Port simdutf's Ice Lake base64 kernel (VPERMI2B lookup, VPCOMPRESSB
whitespace compression, masked 48-byte stores) using the .NET 10
AVX-512 VBMI/VBMI2 intrinsics. Dispatch prefers AVX-512 VBMI2, then
AVX2, SSSE3, or scalar. Benchmarks on a Xeon Gold 6548N reach 11.3 GB/s
versus 4.7 GB/s for System.Buffers.Text.Base64.DecodeFromUtf8.
This makes same-machine kernel comparisons part of the regular run.
@lemire
lemire merged commit 1c846d8 into main Aug 19, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant