Cómo parsear direcciones IPv4 en C# a gran velocidad con AVX-512

Fuentes: Parsing IP addresses in C# at crazy speeds

El investigador Daniel Lemire presenta una rutina en C# capaz de parsear direcciones IPv4 —como 192.168.0.1— unas tres veces más rápido que la función IPAddress.TryParse incluida en la biblioteca estándar de .NET. La clave está en aprovechar las instrucciones SIMD AVX-512, disponibles en procesadores AMD e Intel recientes, y que .NET 10 ya soporta, incluidas las masked loads, que permiten cargar en un registro solo los bytes necesarios de una cadena UTF-16 sin leer más allá de su longitud.

El método funciona cargando de forma selectiva los primeros caracteres de la cadena en un registro de 256 bits, descartando los bytes en cero propios de UTF-16, verificando que todos los caracteres sean ASCII y reduciendo el contenido a un registro de 128 bits. A continuación se localiza la posición de los tres puntos divisorios; como solo existen 81 combinaciones válidas, basta con aplicar movimientos de bytes y un producto escalar para validar y reconstruir la dirección. Las formas de IP menos habituales (IPv6, IPv4 con ceros a la izquierda, etc.) se derivan a la rutina estándar mediante una comprobación de respaldo.

En pruebas con 10.000 direcciones aleatorias parseadas 20 millones de veces en un Intel Xeon Gold 6548N con .NET 10, la implementación basada en AVX-512 multiplica por tres el rendimiento del método incluido en la librería. El propio autor reconoce que el núcleo de la rutina no tarda catorce nanosegundos y que parte del tiempo se debe a sobrecostes de construcción del objeto IPAddress. Si el procesador no soporta AVX-512, C# permite proteger la rama con una simple comprobación Avx512BW.VL.IsSupported. El código fuente está disponible en el repositorio del blog del autor.