Перейти к содержимому

Como o .NET encontra uma substring com SIMD | C# e IndexOf

Pedro Sakuma Travi

0:00 / 0:00

Como o .NET encontra uma substring com SIMD | C# e IndexOf

81 просмотр · 2 нед. назад
Pedro Sakuma Travi
4 подписчика
81 просмотр · 2 нед. назад
Como ReadOnlySpan.IndexOf encontra uma substring? Vamos acompanhar o caminho SIMD do .NET: comparações vetoriais, filtro de candidatos, extração da máscara e confirmação da sequência completa. O ponto de partida é um benchmark em que IndexOf foi cerca de 24× mais rápido que uma busca ingênua. Esse resultado vale para o cenário e a máquina medidos — não é uma promessa de desempenho para qualquer string. A explicação visual separa o exemplo didático das entradas do benchmark e acompanha o código, os vetores e as variáveis locais em cada etapa. 📖 Artigo com código, diagramas, assembly e instruções para reproduzir o benchmark: https://dev.to/pedrosakuma/como-reado... CAPÍTULOS 00:00 O resultado que surpreende 00:27 O contexto da medição 00:57 O contrato da busca 01:19 Duas implementações, o mesmo contrato 01:50 Resultados por cenário 02:28 SIMD: vetores, lanes e registradores 03:21 Filtrando possíveis inícios 07:18 Da máscara ao match confirmado 09:58 O exemplo não é o benchmark 10:35 Avanço, último bloco e conclusão CONTEXTO TÉCNICO • Código do runtime: .NET 10.0.12 • Ambiente medido: Linux x64, AMD EPYC 7763, AVX2 • BenchmarkDotNet com MediumRun • Comparação ordinal de unidades de código UTF-16 • Walkthrough do caminho Vector256 O benchmark compara implementações com algoritmos diferentes; ele não isola apenas o custo da abstração ou do SIMD. Narração sintetizada com ElevenLabs. #dotnet #csharp #SIMD