Developer knowledge network ยท moderated exchange

Komunitas Kode Tidak Dapat Diandalkan

Riset Pengembang, Rekayasa Terbalik & Komunitas Pengkodean

Knowledge indexHidup
4Categories
919Threads
2.8KPostingan
Tutorial

SIMD hardware intrinsics (Vector256 / AVX2) in C# for pattern scanning [v2.4 Technical Discussion]

dotnet_native_aot
C# Veteran
MEMBER
Reputasi: 174
Tanggal Bergabung: Sep 2021
Postingan: 16
Terima kasih: 62
4 minggu yang lalu ยท Jul 26, 2026 6:40 AM
#1

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#!

sig_scanner_sam
Pattern Master
MEMBER
Reputasi: 210
Tanggal Bergabung: Dec 2019
Postingan: 11
Terima kasih: 51
4 minggu yang lalu ยท Jul 26, 2026 9:08 AM
#2

C# JIT compiler emits native vpcmpeqb and vpmovmskb instructions matching MSVC C++ output identically. Very impressive.

ptr_arithmetic
C++ Wizard
MEMBER
Reputasi: 162
Tanggal Bergabung: May 2018
Postingan: 73
Terima kasih: 42
4 minggu yang lalu ยท Jul 26, 2026 4:15 PM
#3

Hardware intrinsics in .NET are fantastic.