3 週間前 · Aug 2, 2026 9:45 AM
Using System.Runtime.Intrinsics.X86.Avx2 directly in C#:
CSHARP
public static unsafe IntPtr ScanPatternAVX2(byte* pBase, int size, byte targetByte) {
Vector256<byte> target = Vector256.Create(targetByte);
for (int i = 0; i < size - 32; i += 32) {
Vector256<byte> chunk = Avx2.LoadVector256(pBase + i);
Vector256<byte> cmp = Avx2.CompareEqual(chunk, target);
int mask = Avx2.MoveMask(cmp);
if (mask != 0) {
int bit = System.Numerics.BitOperations.TrailingZeroCount((uint)mask);
return (IntPtr)(pBase + i + bit);
}
}
return IntPtr.Zero;
}Scans at 4.5 GB/s in pure C#!